这是解释h(k || m)失败的帖子,我理解。或生日袭击。请说明吗?

评论

常见哈希H?的MAC构造H(m || k)的相关攻击

#1 楼

生日攻击可与每个哈希函数一起使用。这是一个简单的概率问题(请参阅:生日问题)。但是,这仅意味着散列函数必须生成$ 2n $的输出才能实现$ n $的安全性。

$ H(m || k)$很明显是冲突的-假设$ H $本身具有抗碰撞性,因为$ H(m_1 || k)= H(m_2 || k)$意味着$ x = m_1 |的$ H(x)= H(y)$ | k $和$ y = m_2 || k $。需要。 Bellare在针对NMAC和HMAC的新证明中证明:没有冲突抵抗的安全性,只要$ H $是伪随机函数,HMAC就是安全的,它比抗碰撞能力弱得多。尽管曾经流行的哈希函数$ MD5 $和$ SHA $已被破坏,但$ HMAC_ {MD5} $和$ HMAC_ {SHA} $仍然被认为是安全的。

评论


$ \ begingroup $
好的。我又读了一次。基本上,如果假设哈希函数不再是加密安全的,那么我们将在某个时刻看到冲突。但是H(K || X)呢?如果使用MD5,不仅会遇到长度扩展攻击,还会遇到碰撞攻击,对吗?
$ \ endgroup $
– CppLearner
2012-12-17 6:17



$ \ begingroup $
@CppLearner对$ H(K || X)$进行秘密(简短)$ K $的碰撞攻击也将导致对$ HMAC_H(K',X)$进行类似$ K'的碰撞攻击$(仅将$ K $与ipad常量进行XOR)。目前,尚无已知方法可以执行此操作。
$ \ endgroup $
–PaŭloEbermann
2012年12月17日上午8:29

#2 楼

您描述的MAC算法在该论文中称为“秘密后缀方法”。请参阅以下论文,其中显示了如何攻击秘密后缀方法:关于两种MAC算法的安全性。巴特·普雷尼尔(Bart Preneel),保罗·范·范·肖尔(Paul C.van Oorschot)。 Eurocrypt'96,Springer LNCS第1070卷,第19-32页,1996年。

本文介绍了如何使用内部冲突攻击您描述的MAC算法。他们使用生日攻击来查找内部冲突,然后说明如何允许对后缀MAC进行攻击。至关重要的是,攻击的几乎所有工作量都可以完全在脱机状态下完成。

相反,HMAC和其他良好的MAC算法旨在使这些攻击的成本更高。是的,您可以对HMAC进行生日攻击,但这必须是在线攻击,并且该攻击需要大量选择的明文-这使得在实践中对HMAC的相应攻击更难进行。这就是为什么HMAC和其他现代MAC算法被认为比“秘密后缀方法”更可取的原因之一,也是为什么密码学家建议任何人都不应使用秘密后缀方法的原因。