Hash 沿加密AES密钥存储密码散列的安全含义

Hash 沿加密AES密钥存储密码散列的安全含义,hash,cryptography,aes,cryptanalysis,pkcs#5,Hash,Cryptography,Aes,Cryptanalysis,Pkcs#5,我正在使用PKCS#5标准生成一个密钥,该密钥使用随机且唯一的salt和输入中的用户密码。将此密钥视为“加密”密钥。 “加密”密钥用于加密随机AES密钥。每个用户都有一个与其配置文件关联的AES密钥 因此,用户档案将包含以下信息: -->用于身份验证的密码哈希 -->PKCS#5算法中使用的盐。(从PKCS#5 V2.0文档中,我们知道此信息不需要保护) -->加密的AES密钥是随机生成的,并使用PKCS#5算法生成的“加密”密钥以及salt和用户密码进行加密 我在问自己,同时拥有密码散列、sa

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

“加密”密钥用于加密随机AES密钥。每个用户都有一个与其配置文件关联的AES密钥

因此,用户档案将包含以下信息:

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

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

-->加密的AES密钥是随机生成的,并使用PKCS#5算法生成的“加密”密钥以及salt和用户密码进行加密


我在问自己,同时拥有密码散列、salt和加密的AES密钥是否危险。我99.9%确信这不是一个问题,但它能帮助攻击者掌握所有这些细节吗?

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

我建议:只需使用PKCS#5两次;一次生成哈希密码(存储在clear中),一次生成加密密钥(不生成)

确保salt是大的、随机的和独立的,这样密码散列和加密密钥之间就不会有可检测的关系。毕竟,这就是盐的作用

[更新,详细说明一下]

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

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

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


将散列密码s1和s2存储在数据库的clear中。完成。

您最好在询问密码哈希是否也有盐腌?