当我学习PBKDF2时,我发现大多数文章都说PBKDF2使用HMAC作为PRF。为什么是HMAC?我可以使用其他伪随机函数吗?对于PBKDF2来说,HMAC比任何其他功能都安全吗?
发布于 2020-09-25 09:44:03
<#>TL;DR:密码的位值是“奇怪地”分布的,哈希函数(因此HMAC)通常被认为能更好地处理它们。
为什么是HMAC?
据推测,最初的想法是改进以前的设计,这些设计都非常偏重于杂乱。人们希望以某种方式使用哈希函数来处理密码。但是PBKDF2的设计者可能认为使用PRF是明智的(从而减少了对底层函数的假设),HMAC是将散列转换为PRF的标准方法。而且,他们也可能喜欢不用跳过圈来定义处理任意长度密码的方法的想法。
我可以使用其他伪随机函数吗?
所以,如果您的密码是一个一致随机的位序列,那么是的,您绝对可以使用其他PRF,并从PBKDF2中获取一个PRF。然而,密码一般不会停留在这种模式下。在这种情况下,通常会使用哈希函数将高熵非均匀值映射为高熵一致值。
当然,上述论点提出了一个问题:“KMAC和其他基于散列的PRF怎么办?”它们应该工作得很好,因为它们倾向于继承其基础散列函数的安全优势。然而,请注意,一些这样的结构(而不是KMAC)在可变长度键方面有弱点。你的盐的长度。
至于实际使用KMAC (以及这个Keccak / SHA-3),这是一个困难的情况。原则上是可行的。但是,您通常希望使用函数进行密码推导,在这种情况下,最优的ASIC将强制执行,它本质上将是hasher的正常CPU (或者只是稍微好一点)。然而,在我们得到专门的Keccak扩展之前,专用的Keccak电路很可能比软件实现要快得多,这使得PBKDF2-KMAC成为比例如Argon2更低劣的选择。
https://crypto.stackexchange.com/questions/84160
复制相似问题