【发布时间】:2011-05-27 10:12:57
【问题描述】:
我有一个使用 HMAC 来验证签名请求的 Web 服务。在这种情况下,我的服务的每个调用者都有一个密钥(密码)。用户当然会获得该密钥,但我还需要将密钥存储在我的数据库中,以便我的服务可以验证每个传入请求的签名。
所以在这种情况下,我确实需要将密码以我可以检索和使用的形式存储在数据库中。我不能使用仅在数据库中存储密码的加盐哈希的最佳做法。
我可以加密密钥,但我需要将加密密钥存储在某个地方。对于安全的 RESTful Web 服务来说,这是一个相当常见的场景,因此亚马逊 (AWS) 和微软 (Azure) 等公司必须处理这个问题。
在这种情况下有哪些最佳做法?
【问题讨论】:
-
存储加密密钥有什么问题?
-
我最近写了一篇关于基本密码存储的博文:blog.brokenbytes.info/2010/12/passwords-beating-the-dead-horse
-
我关于存储加密密钥的评论只是为了解决我需要以某种方式保护加密密钥的事实。有点像鸡蛋的东西。我想不出任何其他方法来处理它,所以问题就变成了如何保护加密密钥。
-
是否可以使用用户密码的哈希来签署请求?然后,您可以只使用存储在数据库中的哈希值,并更符合最佳实践。
-
这是可能的,但我不认为它有多大成就。在这种情况下,密码实际上只是一个随机的字节流。如果我散列它然后使用散列来签署请求,我仍然需要存储散列。如果受到损害,将允许某人伪造请求。它只是不能避免我需要访问调用者用来签署请求的相同字节数组的问题。
标签: database security passwords