我使用PKCS#5标准来生成一个密钥,该密钥使用一个随机且唯一的盐,并在输入中输入用户的密码。将此密钥视为“加密”密钥。
“加密”密钥用于加密随机的AES密钥。每个用户都有一个与其配置文件相关联的AES密钥。
因此,用户的配置文件将包含以下信息:
-->用于身份验证的口令散列。
--> PKCS#5算法中使用的盐。(从PKCS#5 V2.0文档中,我们知道此信息不需要保护)。
-->随机生成的加密的AES密钥,并使用PKCS#5算法生成的加密密钥与盐和用户密码进行加密
我在问自己,同时拥有密码的哈希、盐和加密的AES密钥是否危险。我99.9%确定这不是问题,但它能帮助攻击者掌握所有这些细节吗?
发布于 2011-05-31 07:36:36
密码散列还需要使用盐,否则可能会发生字典攻击,并且碰巧选择相同密码的两个用户将在数据库中存储相同的散列密码。
我建议这样做:只需使用PKCS#5两次;一次用于生成散列密码(以明文形式存储),另一次用于生成加密密钥(实际上并不是这样)。
确保盐是大的、随机的和独立的,然后密码散列和加密密钥之间就不会有可检测的关系。毕竟,这就是盐的用途。
更新,详细说明一下
挑选两种盐s1和s2。确保每一个都是至少64位的、随机的和独立的。
在空字符串上使用密码+ s1作为PKCS#5 HMAC的输入。这是“散列密码”。
使用密码+ s2作为PKCS#5加密方案的输入,对实际数据进行加密。
将散列密码、s1和s2以明文形式存储在数据库中。好了。
https://stackoverflow.com/questions/6178077
复制相似问题