沿加密的AES密钥存储密码哈希的安全隐患

时间:2011-05-30 15:21:35

标签: hash cryptography aes cryptanalysis pkcs#5

我使用PKCS#5标准在输入中使用随机且唯一的盐和用户密码生成密钥。将此密钥视为“加密”密钥。

“加密”密钥用于加密随机AE​​S密钥。每个用户都有一个与其个人资料相关联的AES密钥。

因此,用户的个人资料将包含以下信息:

- >用于身份验证的密码哈希。

- >用于PKCS#5算法的盐。 (从PKCS#5 V2.0文档中,我们知道此信息不需要保护)。

- >加密的AES密钥随机生成并使用PKCS#5算法生成的“加密”密钥加密,并附带salt和用户密码

我问自己,在同一时间拥有密码的哈希,盐和加密的AES密钥是否有危险。我99.9%肯定这不是问题,但它能否促进攻击者拥有所有这些细节的工作?

1 个答案:

答案 0 :(得分:3)

密码哈希也需要使用salt,否则可能会发生字典攻击,而两个碰巧选择相同密码的用户将在数据库中存储相同的哈希密码。

我建议:只使用两次PKCS#5;一次生成散列密码(以明文形式存储),一次生成加密密钥(您没有)。

确保盐很大,随机且独立,然后密码哈希和加密密钥之间没有可检测的关系。毕竟,这就是盐的用途。

[更新,详细说明]

选择两种盐s1和s2。确保每个至少64位,随机且独立。

使用密码+ s1作为空字符串上PKCS#5 HMAC的输入。这是“哈希密码”。

使用密码+ s2作为PKCS#5加密方案的输入来加密实际数据。

将散列密码s1和s2以明文形式存储在数据库中。完成。