Sha*_*awn 0 security encryption passwords storage aes
我理解密码的盐渍哈希是如何工作的,但我假设我还需要存储salt,username,KEY和encryptedpassword.我认为总的来说我只需要了解如何实现它,例如如何存储它,然后再如何重新生成密码.此外,如果有人能解释为什么使用这个盐渍值更好,一个人不能用每个单词前面的盐进行字典攻击吗?
谢谢,
目前还不清楚你要做什么:验证提供的密码是否正确(与系统登录一样); 或实现密钥从密码派生的数据加密.
如果是后者(称为基于密码的加密),则应使用密钥派生函数,例如PBKDF2.密钥派生函数接受salt和提供的用户密码,并生成可与AES等密码一起使用的密钥.
要加密,您将提示输入密码,生成随机盐,并使用KDF派生密钥.然后,您可以在合适的分组密码模式下使用带有AES的密钥来加密数据,并仅存储salt和加密数据(以及密码模式所需的任何IV).
要解密,您将提示输入密码,从文件中加载salt,然后重新导出密钥.然后,您将使用该密钥来解密文件.
salt的目的是防止预计算优化应用于字典攻击.一旦盐已知,确实可以执行暴力字典攻击,但KDF设计得足够慢以使其在不进行预计算的情况下不可行.