如果输入是块长度的倍数,为什么在结尾需要填充块?我了解到,如果没有添加一个虚拟块,那么它是不具有抗碰撞能力的,但我想了解为什么会这样。
假设MD输出Zb而不是H(Zb=L)。为什么这种特殊的结构不具有抗碰撞能力的原因何在?
发布于 2018-03-17 08:17:20
假设我们有一个消息$m$,它的长度不是块长度的倍数,而我们的散列方案通过在其上附加填充$p_m$,将其转化为块长度的倍数。也就是说,$$\textsf{Pad}(m) =m \,x \,p_m,$$,其中$m \,$m\,p_m$的长度是块大小的倍数。
现在,如果长度为块大小的倍数的消息根本没有填充,那么考虑一下如果故意尝试散列修改后的消息$m‘=m \、\\、p_m$会发生什么。由于$m'$的长度是块大小的倍数,所以我们将有$$\textsf{Pad}(m') =m \,p_m = \textsf{Pad}(m).$$
由于最后的哈希值是从填充消息中计算出来的,这意味着$m$和$m'$将具有相同的哈希值。
https://crypto.stackexchange.com/questions/56557
复制相似问题