如果由于$ H(\ text {K} \ mathbin \ || \ text {Message})$可能发生长度扩展攻击,则SHA-3中SHA-3中的更改阻止了这种情况的发生?

评论

SHA-3不是SHA-2的更新版本;它们是完全独立的算法。

#1 楼

在SHA-2和SHA-3之间,一切都发生了变化。

在“长度扩展攻击”的特定情况下:问题是SHA-2通过将数据拆分为基本块(64或64)来处理数据。 128个字节,具体取决于SHA-2变体),并为每个块产生一个与函数输出大小完全相同的输出。而且,完整消息的输出仅仅是处理(已填充)消息的所有块之后的当前输出。这意味着任何人都可以进行散列输出,并使用附加的块“继续”处理较长的消息。

在SHA-3中,使用了海绵状结构。关键点在于,在海绵中,内部状态要比哈希函数输出大得多。因此,您不能简单地通过使用哈希输出来“继续”处理消息,因为该输出仅包含内部状态的一小部分。

使用SHA-可以得到相同类型的保护。 2通过截断输出功能。例如,SHA-2系列的一个(相对较新的)成员称为“ SHA-512 / 256”,它是SHA-512(具有不同的常规IV),其输出被截断为256位。这种截断使其不受长度扩展攻击。

评论


$ \ begingroup $
请注意,在SHA-2家族中,SHA-224和SHA-384对长度扩展攻击的保护作用有限。但是它们与SHA-3不同,它不是很安全,SHA-3从一开始就设计为可抵抗长度扩展。
$ \ endgroup $
– Nayuki
18-09-26在0:50

$ \ begingroup $
我相信引入SHA-512 / 256的主要原因是在64位CPU上它比SHA-256更快。但是我通常会选择SHA384,它比SHA-512 / 256受到更广泛的支持。 SHA3​​84和SHA-512 / 256之间的唯一两个区别是不同的IV,并且被截短为不同的长度。
$ \ endgroup $
–卡巴斯德
18-09-26在10:02