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



我正在考虑构建一个使用 HMAC 的 API 系统。 服务器和客户端将有一个共享密钥,客户端将对请求进行签名,服务器将进行验证,如果一切正常,则继续。 这种系统的问题在于,密钥必须以可以检索的方式存储,例如数据库。 如果有人窃取了机密,他们拥有执行用户有权执行的基本上任何操作所需的密钥。

我在想,一定有更安全的替代方案。 使用 RSA 有什么缺陷吗?

  1. 客户端具有"公共"密钥,而不是共享密钥。 (对于我的用例,公钥仍然必须保密。
  2. 客户端将使用 SHA-1 或任何正常方式对消息进行哈希处理。
  3. 哈希不是直接添加到消息中,而是通过其公钥进行加密,然后与消息一起发送。
  4. 服务器具有"私钥"(用于解密消息),但不知道"公钥"。 (这是使它比正常方法更安全的部分。 如果数据库被盗,则不会窃取可以模拟用户的密钥。
  5. 服务器将解密哈希并正常验证消息。

这种方法有什么问题吗? 是否有已知的实现或类似的东西?

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

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

RSA:通常人们会选择像0x010001这样的固定公钥。这样做是出于效率原因。如果你取一个足够大的、完全随机的e并从中得出d,就不可能计算pq给定dNeN。实际上,它们几乎是平等的,私人和公共标签不再有意义。所有这些都依赖于 RSA 的 smmyetrical 属性。确保不要走进教科书 RSA 问题。一定要问足够聪明的人,这只是我的想法。

如果你的加密系统基于拥有你需要的秘密的证明,那么 - 保持秘密:)

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

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

最新更新