用于生成对称加密密钥的HKDF或PBKDF2?(Python加密)

用于生成对称加密密钥的HKDF或PBKDF2?(Python加密),python,encryption,Python,Encryption,我有一个为用户加密一些文本的应用程序 现在,用户输入一个纯文本密码,然后我运行一个从该密码派生一个密钥。将密钥转换为URL安全的base64编码的32字节密钥后,我使用它作为运行对称加密(使用)的密钥来加密用户的文本 我读过HKDF,读到“先提取后扩展”的范例对这种场景很有用。但我也读过文档,其中指出HKDF不适合用于密码存储。所以我想知道我是否应该在这个场景中使用a 我没有存储纯文本密码,也没有存储从中派生的密钥,这就是为什么我认为HKDF是可以的。我想确保我做的事情是安全的,并且可以从更有经

我有一个为用户加密一些文本的应用程序

现在,用户输入一个纯文本密码,然后我运行一个从该密码派生一个密钥。将密钥转换为URL安全的base64编码的32字节密钥后,我使用它作为运行对称加密(使用)的密钥来加密用户的文本

我读过HKDF,读到“先提取后扩展”的范例对这种场景很有用。但我也读过文档,其中指出HKDF不适合用于密码存储。所以我想知道我是否应该在这个场景中使用a

我没有存储纯文本密码,也没有存储从中派生的密钥,这就是为什么我认为HKDF是可以的。我想确保我做的事情是安全的,并且可以从更有经验的人那里得到任何帮助

谢谢

更新


我刚刚看到这篇有用的帖子,这让我相信我应该使用PBKDF2。如果可能的话,您仍然希望得到一些确认。

您应该使用PBKDF2而不是HKDF,原因有一个:密钥拉伸,它“拉伸”了从密码生成密钥所需的时间,而HKDF没有提供。HKDF速度快,PBKDF2速度慢。越慢越好,因为当攻击者尝试一百万个不同的密码时,您希望攻击者放弃,因为这需要太长时间。请在此处阅读此答案以了解更多详细信息:。

此问题似乎与主题无关,因为它与编程或开发无关。请参见帮助中心中的。也许或者会是一个更好的提问的地方。我认为HMAC在某些条件下可能提供更好的性能。例如,如果我使用
streched=Hash(SHA1,“password”)
,那么攻击者可以通过转向谷歌很快得到答案。只需搜索“c8fed00eb2e87f1cee8e90ebbe870c190ac3848c”。如果我使用的是
streched=HMAC(SHA1,key,“password”)
,那么谷歌无法返回答案,除非它知道密钥。我很确定这是因为HMAC是PRF,而散列不是。@jwwPBKDF2和HKDF通常都依赖HMAC。