遇到KDF1和KDF​​2的实现仍然很常见。基本上,这些是KDF,它们仅从密钥种子和计数器派生多个密钥:

$ K_i = \ operatorname {KDF}(K_ {master},i)= \ operatorname {H}(K_ { master} | c)$

在此函数中,$ | $表示串联,而$ c $是$ i $的编码值(使用无符号大尾数表示法的4个字节)。 KDF1和2仅在$ i $的起始值方面有所不同。

KDF的问题在于散列不一定是PRF。实际上,我只看到部署了MD5,SHA-1或SHA-256。

是否有任何特定的攻击媒介可用于此构造?是否有任何实际/紧迫的需求要转换为HKDF或NIST SP 800-108认可的哈希算法,或者纯粹出于理论上的考虑? 2以其最不复杂的形式,仅使用单个输出块并带有空的$ OtherInfo $。

评论

希望$ c $是带符号的还是无符号的都没关系,当然是:P。也许KDF的安全性可以直接映射到哈希与HMAC比较中?

只要被散列的消息具有恒定的长度(或至少没有前缀),这就应该起作用。其他长度的扩展名可能会咬你。

@CodesInChaos是的,我想了很多。否则,HMAC不需要其他通行证。但是大多数(如果不是全部)时间输入只是一个密钥种子或实际密钥,因此长度扩展通常不适用,至少在我看来...

#1 楼

据我所知(这可能是有限的;我并不声称拥有对KDF攻击的百科全书知识),目前尚无针对KDF1或KDF2的实际攻击(在ISO- 18033-2)使用安全哈希函数实例化。

关于这些KDF与基于HMAC的KDF(例如HKDF)的相对安全性,值得注意的是,HMAC安全证明基于基础哈希的压缩功能本身就是PRF。因此,当与标准HMAC安全证明适用的任何散列函数一起使用时,似乎KDF1 / KDF2也应被证明是安全的,至少主密钥长度等于(或填充为)输入块大小。哈希。