问题描述
|
我正在使用PKCS#5标准,使用随机且唯一的盐和输入的用户密码生成密钥。将此密钥视为\“ encryption \”密钥。
\“ encryption \”密钥用于加密随机AES密钥。每个用户都有与其个人资料相关联的AES密钥。
因此,用户的个人资料将包含以下信息:
->密码哈希以进行身份验证。
-> PKCS#5算法中使用的盐。 (从PKCS#5 V2.0文档中,我们知道此信息不需要保护)。
->随机生成的加密AES密钥,并使用PKCS#5算法生成的\“ encryption \”密钥以及盐和用户密码进行加密
我当时在问自己,在同一时间拥有密码的哈希,盐和加密的AES密钥是否危险。我有99.9%的肯定这不是问题,但是它可以帮助攻击者掌握所有这些细节吗?
解决方法
密码哈希还需要使用salt,否则可能会发生字典攻击,并且碰巧选择相同密码的两个用户将在数据库中存储相同的哈希密码。
我建议:两次使用PKCS#5;一次生成哈希密码(以明文形式存储),一次生成加密密钥(不以加密形式)。
确保盐大,随机且独立,然后密码哈希和加密密钥之间就不会存在可检测的关系。毕竟,这就是盐的目的。
[更新,详细说明]
选择两个盐s1和s2。确保每个至少为64位,随机且独立。
使用密码+ s1作为空字符串上PKCS#5 HMAC的输入。这是“哈希密码”。
使用密码+ s2作为PKCS#5加密方案的输入来加密实际数据。
将哈希密码s1和s2以明文形式存储在数据库中。做完了