【问题标题】:Secure HMAC shared secret by encrypting authorization hash with RSA通过使用 RSA 加密授权哈希来保护 HMAC 共享机密
【发布时间】:2015-05-11 08:11:13
【问题描述】:

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

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

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

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

【问题讨论】:

  • 这个问题对于 Stack Overflow 来说有点离题。您是否考虑将其发布在security.stackexchange.comcrypto.stackexchange.com? (显然检查他们的帮助中心,看看哪个更合适,如果有的话)。您将需要提供有关您的安全目标/威胁的更多信息,以便其他人可以分析您提出的解决方案是否满足这些目标。这个问题很可能以前已经得到妥善解决,所以我怀疑你应该发明自己的方案。
  • 我投票决定将此问题作为离题结束,因为它是关于安全/密码学并且不包含编程问题。
  • @Duncan 是的,我的目标不是发明自己的方案,这就是为什么当我想到它时,我应该看看它有什么问题,或者是否有现有的实现。我考虑将其发布在 security.stackexchange.com 上,但我认为 Stack Overflow 也是一个不错的地方,因为这里还有许多其他类似的问题。我认为这对双方都非常重要。
  • 我猜你的意思是“密钥对的一部分”而不是“公钥”或者“公钥加密系统的密钥”。
  • @eckes 是的,完全正确。我在这里说的是公钥/私钥,但对于我的用例,两者都会保密,但不会是共享的秘密。

标签: security encryption hash hmac hmacsha1


【解决方案1】:

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

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

RSA:通常人们选择固定的公钥,例如 0x010001。这样做是出于效率原因。如果你取一个足够大的、完全随机的e 并从中派生出d,那么在给定dN 的情况下,不可能计算pq OR @987654328 @ 和 N。实际上,那时它们几乎是平等的,私有和公共的标签不再有意义。所有这一切都依赖于 RSA 的 smmyetrical 属性。一定不要走进教科书的 RSA 问题。并且一定要问足够聪明的人,这只是我的想法。

【讨论】:

  • 0x010001 不是公钥,而是often used(公共)指数之一。
【解决方案2】:

如果你的加密系统建立在你需要的秘密的证明上,那么 - 保密:)

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

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

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 2022-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-17
    • 2012-01-29
    • 2011-12-17
    • 2011-02-02
    相关资源
    最近更新 更多