【问题标题】:Public and private API keys公有和私有 API 密钥
【发布时间】:2012-06-11 01:25:18
【问题描述】:

我正在开发一个需要这种类型身份验证的 API 系统。用户将发送一个带有其 ID、数据和散列(使用私钥散列的数据)的 HTTP 请求,然后在服务器中检查散列是否与此处的相同过程匹配。
是否像实施必须的那样?
我将使用客户端的 id 作为公钥,但是生成随机数的私钥 sha256 的最佳方法是什么?

【问题讨论】:

    标签: api hash hmac api-key


    【解决方案1】:

    这不是私钥/公钥密码术。在这样的系统中,客户端将加密整个数据,然后您将使用您的私钥对其进行解密。你永远不会把你的私钥给客户。

    您正在做的是请求签名。你给一个“秘密”(你称之为“私钥”),然后他们用它来生成一个散列。然后您可以检查服务器上的哈希,因为您也知道秘密。

    在这种系统中不会有公钥。您通常使用会话密钥或令牌来识别客户端,因此客户端需要首先进行身份验证(这意味着您需要一些身份验证方法)。本质上,您要实现的是 OAuth。也许看看图书馆,看看你是否可以直接使用它 - http://oauth.net/documentation/getting-started/

    【讨论】:

      【解决方案2】:

      检查amazon s3 为身份验证所做的工作可能是一个好的开始

      基本上,他们正在做与您建议相同的事情,并且他们使用 RFC 2104HMAC-SHA1 进行散列。实施取决于您选择的语言。

      【讨论】:

      • 哪种方法最适合您生成私人密钥?谢谢
      • @Mario 看看这个生成随机的东西grc.com/passwords.htm
      • 我有一个疑问:如果我用随机的东西生成私钥,我必须将它发送到客户端(Android 应用程序),以便嗅探器能够发现密钥。从双方的电子邮件或其他东西中生成它怎么样?好点了吗?
      • @Mario 如果你担心中间人攻击,你应该使用 https,或者只是通过电子邮件发送密钥