【发布时间】:2015-05-11 08:11:13
【问题描述】:
我正在考虑构建一个使用 HMAC 的 API 系统。服务器和客户端将有一个共享的秘密,客户端将签署请求,服务器将验证,如果一切顺利,则继续。这种系统的问题在于,秘密必须以可以检索的方式存储,例如数据库。如果有人要窃取机密,他们基本上拥有执行用户有权执行的任何操作所需的密钥。
我在想必须有一个更安全的替代方案。使用 RSA 有什么缺陷吗?
- 客户端拥有“公共”密钥而不是共享密钥。 (对于我的用例,公钥仍然必须保密。)
- 客户端将使用 SHA-1 或其他任何正常方式对消息进行哈希处理。
- 不是直接将哈希添加到消息中,而是通过它的公钥对哈希进行加密,然后与消息一起发送。
- 服务器拥有“私有”密钥(用于解密消息)但不知道“公共”密钥。 (这是使这种方法比普通方法更安全的部分。如果数据库被盗,则不会盗取可以冒充用户的密钥。)
- 服务器将解密哈希并正常验证消息。
这种方法有什么问题吗?是否有已知的实现或类似的实现?
【问题讨论】:
-
这个问题对于 Stack Overflow 来说有点离题。您是否考虑将其发布在security.stackexchange.com 或crypto.stackexchange.com? (显然检查他们的帮助中心,看看哪个更合适,如果有的话)。您将需要提供有关您的安全目标/威胁的更多信息,以便其他人可以分析您提出的解决方案是否满足这些目标。这个问题很可能以前已经得到妥善解决,所以我怀疑你应该发明自己的方案。
-
我投票决定将此问题作为离题结束,因为它是关于安全/密码学并且不包含编程问题。
-
@Duncan 是的,我的目标不是发明自己的方案,这就是为什么当我想到它时,我应该看看它有什么问题,或者是否有现有的实现。我考虑将其发布在 security.stackexchange.com 上,但我认为 Stack Overflow 也是一个不错的地方,因为这里还有许多其他类似的问题。我认为这对双方都非常重要。
-
我猜你的意思是“密钥对的一部分”而不是“公钥”或者“公钥加密系统的密钥”。
-
@eckes 是的,完全正确。我在这里说的是公钥/私钥,但对于我的用例,两者都会保密,但不会是共享的秘密。
标签: security encryption hash hmac hmacsha1