【发布时间】:2012-06-11 01:25:18
【问题描述】:
我正在开发一个需要这种类型身份验证的 API 系统。用户将发送一个带有其 ID、数据和散列(使用私钥散列的数据)的 HTTP 请求,然后在服务器中检查散列是否与此处的相同过程匹配。
是否像实施必须的那样?
我将使用客户端的 id 作为公钥,但是生成随机数的私钥 sha256 的最佳方法是什么?
【问题讨论】:
我正在开发一个需要这种类型身份验证的 API 系统。用户将发送一个带有其 ID、数据和散列(使用私钥散列的数据)的 HTTP 请求,然后在服务器中检查散列是否与此处的相同过程匹配。
是否像实施必须的那样?
我将使用客户端的 id 作为公钥,但是生成随机数的私钥 sha256 的最佳方法是什么?
【问题讨论】:
这不是私钥/公钥密码术。在这样的系统中,客户端将加密整个数据,然后您将使用您的私钥对其进行解密。你永远不会把你的私钥给客户。
您正在做的是请求签名。你给一个“秘密”(你称之为“私钥”),然后他们用它来生成一个散列。然后您可以检查服务器上的哈希,因为您也知道秘密。
在这种系统中不会有公钥。您通常使用会话密钥或令牌来识别客户端,因此客户端需要首先进行身份验证(这意味着您需要一些身份验证方法)。本质上,您要实现的是 OAuth。也许看看图书馆,看看你是否可以直接使用它 - http://oauth.net/documentation/getting-started/
【讨论】:
检查amazon s3 为身份验证所做的工作可能是一个好的开始
基本上,他们正在做与您建议相同的事情,并且他们使用 RFC 2104HMAC-SHA1 进行散列。实施取决于您选择的语言。
【讨论】: