我正在学习Keccak Hash算法,我对容量位参数有点困惑。我试图了解如何在python3中实现Keccak时设置容量参数。
示例:尝试使用容量=0在Keccak中获取冲突,而不考虑散列大小(假设哈希大小至少为128位)。
发布于 2022-10-14 07:30:17
在容量为零的情况下,这里是带有任意前缀和单个附加块的第二次图像前攻击(我将删除填充)。当然,这也包括了弱得多的碰撞攻击。
当容量为零时,在吸收阶段,状态S_t演化为
其中S_t和P_t的长度(以位为单位)相同。输出纯粹是S_n的一个函数,所以如果我能够用相同的S_n创建两个消息,它们将具有相同的哈希值。
给定消息P_0\ldots P_{n-1},我可以计算S_0,\ldots,S_n。现在给定前缀P'_0\ldots P'_{n-2},我可以计算相应的S_0,S'_1,\dots,S'_{n-1}。我现在指定
所以
现在有两个具有相同S_n值的消息,因此具有相同的哈希输出。
更广泛地说,如果我能够在状态的“容量位”上创建一个冲突,那么我就可以通过简单地选择下一个明文块来碰撞完整的状态。然后,状态冲突将导致哈希冲突。
https://crypto.stackexchange.com/questions/102234
复制相似问题