0

我正在设计一个需要在数据库中以加密格式存储 GPG 密钥的 Web 应用程序。

我打算将用户的密码存储在数据库中的 bCrypt 哈希中。我想要做的是使用该 bCrypt 来验证用户,然后使用存储的 bCrypt 哈希和密码的另一个哈希的组合来加密和解密 GPG 密钥。

我的问题是我是否可以在不降低密码安全性的情况下做到这一点?我在想我可以使用密码和盐作为密钥的静态字符串的 HMAC-SHA256 之类的东西。

有没有更好的方法来做到这一点,我还没有想到?

谢谢

4

2 回答 2

2

考虑使用 PBKDF2(来自PKCS #5)。它将密码短语、盐和迭代计数作为输入。迭代计数指定密码应该重复散列多少次;为此使用大量数字(1000 到 10000 很常见)有助于使密码猜测攻击更加困难。盐会导致相同密码的不同用途来创建不同的密钥。

由于 PBKDF2 的设计,即使您知道由不同盐的相同密码生成的散列,也很难猜测使用一种盐生成的散列。

PBKDF2 已经在大多数加密库中实现并且开箱即用。例如,它PKCS5_PBKDF2_HMAC_SHA1在 OpenSSL (header evp.h) 中可用。

于 2010-05-13T23:07:40.377 回答
0

如果您总是要解密 GPG 密钥,那么您可以保存一个用该密钥加密的已知值并使用它来验证用户密码(即,如果输入了正确的用户密码,那么解密的 GPG 密钥将解密存储的数据到已知值)。

使用标准密钥派生算法从您的密码生成您的密钥,您的加密库应该包含一个。

于 2010-04-21T20:16:08.567 回答