我有一个应用程序,我为用户加密一些文本。
截至目前,用户输入纯文本密码,然后运行HKDF algorithm via the Cryptography package以从该密码派生密钥。将密钥转换为URL安全的base64编码的32字节密钥后,我将其用作运行对称加密的密钥(使用Fernet module)来加密用户的文本。
我读过HKDF,并读到“extract-then-expand”范例使它对这种情况有用。但我也阅读了文件,其中说明HKDF不利于密码存储。所以我想知道我是否应该在这种情况下使用PBKDF2 algorithm呢?
我不是存储纯文本密码,也不存储我从中获取的密钥,这就是为什么我认为HKDF会好的。我想确保我安全地做事,并且可以使用更有经验的人的任何帮助。
谢谢!
更新
我刚刚看到这篇有用的帖子https://security.stackexchange.com/questions/38303/hkdf-and-key-stretching,这让我相信我应该使用PBKDF2。尽管如此,仍然希望得到一些确认。
答案 0 :(得分:4)
你应该使用PBKDF2而不是HKDF有一个重要原因:键拉伸,"拉伸"从密码生成密钥所需的时间以及HKDF未提供的密钥。 HKDF很快,PBKDF2很慢。当攻击者尝试使用一百万个不同的密码时,速度越慢越好 - 您希望攻击者放弃,因为它需要太长时间。请在此处阅读此答案以获取更多详细信息:https://security.stackexchange.com/questions/38303/hkdf-and-key-stretching。