在安全性方面,使用SHA-256算法与使用SHA-512算法输出的任意256位有什么区别吗?
类似地,使用SHA-224和使用SHA-256输出的任意224位的安全性差别是什么?
发布于 2020-11-08 16:43:26
其他的答案没有提到长度扩展攻击在梅尔克-达格路建筑上。长度扩展给出了一个哈希值h;
攻击者可以生成一个扩展为;
这可以通过将\operatorname{SHA-256}函数的初始值更改为h和散列扩展来执行。
这一攻击首次出现在2009年9月28日的“Flickr签名锻造 over MD5”上。这要归功于\operatorname{MD5}(\text{SECRET}\mathbin\|\text{message})开头的秘密
任何选择的256位的截断版本的\operatorname{SHA-512/256},正如另一个答案所指出的那样,预期与\operatorname{SHA-256}具有相同的预图像、二次预映像和碰撞电阻。但是,\operatorname{SHA-512/256}的截断(任何选择的位或作为标准)使其能够抵抗长度扩展攻击,因为攻击者必须预测截断的256位才能扩展哈希。由于\operatorname{SHA-512/256}是为64位CPU设计的,所以如所指应该使用\operatorname{SHA-512/256}而不是\operatorname{SHA-256}。
总之,如果我们考虑长度扩展攻击,\operatorname{SHA-512/256}是一个更好的选择。
注意:长度扩展攻击不需要执行secret_key
。没有它它就能工作。与H(key\mathbin\|\text{message})签名不同,我们更喜欢没有长度扩展攻击且有安全证明和KMAC的HMAC。在这种情况下,基于SHA3的KMAC在设计上是安全的,可以抵抗长扩展攻击,并且它的构造和证明要比HMAC容易得多。
https://crypto.stackexchange.com/questions/3153
复制相似问题