通过使用RSA加密授权哈希来保护HMAC共享密钥

时间:2015-03-10 00:51:39

标签: security encryption hash hmac hmacsha1

我正在考虑构建一个使用HMAC的API系统。服务器和客户端将具有共享密钥,客户端将签署请求,服务器将验证,并且如果一切正常则继续。这种系统的问题在于秘密必须以可以检索的方式存储,例如数据库。如果有人要窃取这个秘密,那么他们就拥有了基本上需要做任何用户被授权做的事情的钥匙。

我在想,必须有更安全的选择。使用RSA有什么缺陷吗?

  1. 客户端具有“公共”密钥而不是共享密钥。 (对于我的用例,公钥仍然必须保密。)
  2. 客户端将使用SHA-1或其他正常情况对消息进行散列。
  3. 哈希不是直接在邮件中添加哈希值,而是通过公钥加密,然后与邮件一起发送。
  4. 服务器具有“私有”密钥(用于解密消息),但不知道“公共”密钥。 (这是使其比普通方法更安全的部分。如果数据库被盗,没有可以冒充用户的密钥被窃取。)
  5. 服务器将解密哈希并正常验证邮件。
  6. 这种方法有什么问题吗?是否已知这种或类似的实现?

2 个答案:

答案 0 :(得分:1)

这取决于您选择的非对称密码系统:

(EC)Diffie-Hellman:它不起作用。 Publickey通过生成器直接从私钥导出,例如, [d] G = Q

RSA:通常人们选择固定公钥,如0x010001。这是出于效率原因而完成的。如果您从中获取足够大,完全随机的e并从中导出d,则无法计算pq给定d和{{1} } Ne。实际上他们是非常平等的,私人和公众的标签不再有意义。所有这些都依赖于RSA的smmyetrical属性。一定不要进入教科书RSA问题。并且一定要问足够聪明的人,这只是我的想法。

答案 1 :(得分:1)

如果你的加密系统基于你需要的秘密证据,那么 - 保守秘密:)

但是,是的,如果您不需要对称身份验证的速度,那么您可以使用不对称签名。通常,它使用签名哈希,但您也可以使用签名的hmac。

术语通常是,您使用密钥进行签名并使用公钥进行验证(即使签名操作看起来像加密)。