Encryption 在不降低密码安全性的情况下,使用密码生成两个不同的哈希

Encryption 在不降低密码安全性的情况下,使用密码生成两个不同的哈希,encryption,hash,cryptography,password-protection,Encryption,Hash,Cryptography,Password Protection,我正在设计一个web应用程序,它需要在数据库中以加密格式存储GPG密钥 我计划将用户密码存储在数据库中的bCrypt哈希中。我希望能够使用该bCrypt对用户进行身份验证,然后使用存储的bCrypt散列和密码的另一个散列的组合来加密和解密GPG密钥 我的问题是,我是否可以在不降低密码安全性的情况下执行此操作?我在想我可能可以使用类似HMAC-SHA256的静态字符串,使用密码和salt作为密钥 有没有比这更好的方法,我还没有想到 谢谢如果您总是要解密GPG密钥,那么您可以持有用密钥加密的已知值,

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

我计划将用户密码存储在数据库中的bCrypt哈希中。我希望能够使用该bCrypt对用户进行身份验证,然后使用存储的bCrypt散列和密码的另一个散列的组合来加密和解密GPG密钥

我的问题是,我是否可以在不降低密码安全性的情况下执行此操作?我在想我可能可以使用类似HMAC-SHA256的静态字符串,使用密码和salt作为密钥

有没有比这更好的方法,我还没有想到


谢谢

如果您总是要解密GPG密钥,那么您可以持有用密钥加密的已知值,并使用该值验证用户密码(即,如果输入了正确的用户密码,则解密的GPG密钥将将存储的数据解密为已知值)

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

考虑使用PBKDF2(从)。它将密码短语、salt和迭代计数作为输入。迭代计数指定密码短语应重复散列的次数;为此使用较大的数字(通常为1000到10000)有助于提高密码猜测攻击的难度。salt导致对同一密码短语的不同使用来创建不同的密钥

由于PBKDF2的设计,即使您知道由不同盐的相同密码短语生成的哈希,也很难猜测由一种盐生成的哈希


PBKDF2已经实现,并且在大多数加密库中都是现成的。例如,它在OpenSSL(header
evp.h
)中以
PKCS5\u PBKDF2\u HMAC\u SHA1
的形式提供。

EDIT:我没有理解您第一个问题的答案,第二个问题,请阅读。虽然每次用户尝试登录时尝试解密两个项目需要更多CPU负载,但这可能会起作用。