Java 8的新功能之一是SHA-224消息摘要。

具有224位长的哈希的用例是什么?

#1 楼

SHA-224是自2004年FIPS 180-3 FIPS 180-2变更通知1以来的FIPS 180的一部分,旨在与文档中定义的第二种安全强度{80,112,128,192,256}相匹配NIST特别出版物800-57 –密钥管理建议–第1部分:概述(修订版3)。之所以保留该安全强度,是因为它与3DES的评估安全强度相匹配(请参阅NIST特殊出版物800-131A –过渡:过渡使用密码算法和密钥长度的建议)。该动机在RFC 3874中进行了报告。

SHA-224的定义是通过以下两种方式稍微修改了FIPS 180-2的SHA-256:从256位到224位的输出,因此通过蛮力找到碰撞的预期成本约为2112对压缩函数的评估,请参见生日问题;
不同的初始化值,以便了解消息的SHA-224哈希不会显示该消息的SHA-256哈希(反之亦然)。

作为附带的好处,SHA-224的输出为28个字节,而不是SHA的32个字节-256,在某些情况下非常有用,包括大量的哈希值(在另一个答案中正确指出)或映射到某些特定大小的椭圆曲线组。但是,如果将其用于任何FIPS认可的用法中,我会错过它,并欢迎该信息。

更新:阐明为什么224位是正确的大小以匹配评估的3DES安全强度: SP 800-131A说:“三键三重DES被评估为具有112位的安全强度”,我认为是指Stefan Lucks的攻击:攻击三重加密(在FSE 1998的程序中),或者可能是在更合意的聚会中Ralph C. Merkle和Martin E. Hellman的中间攻击:关于多重加密的安全性(1981,Communications
(第24卷第7号)。我们需要将其倍数增加112,以获得相等强度的散列所需的位宽,包括针对非常实际的攻击,请参阅Paul C. van Oorschot和Michael J. Wiener:密码分析应用程序的并行冲突搜索(1999年,密码学杂志12 (1),1-28)。

评论


$ \ begingroup $
因此,简而言之,这不是一个任意数字;它恰好是3DES密钥长度的一半。谢谢!
$ \ endgroup $
–user9070
2014年3月21日在15:25

$ \ begingroup $
@TruthSerum:不! 3DES密钥的一半长度为96或84位,具体取决于是否计算奇偶校验。假设内存不受限制,它更像是224在最著名的3DES攻击中操作数的估计的以2为底的对数的两倍。
$ \ endgroup $
–fgrieu♦
2014年3月21日15:33



$ \ begingroup $
FIPS 180的SHA-224在某种程度上支持特定的FIPS 186 ECDSA曲线(P-224)和DSA域参数大小(L = 2048,N = 224)。但是,NIST P-224曲线早于FIPS 180-2变更通知1,因此,一些系统已将其与其他SHA系列哈希一起使用。
$ \ endgroup $
–user4982
2014年3月21日19:55

#2 楼

它满足112位碰撞和原像抵抗的安全性要求,但比SHA-256短32位。或系统中需要担心的签名,这多余的4个字节加起来。系统,但是如果您每天收到数十亿封电子邮件,就不要浪费空间。每个服务器每年这4个字节总计达几个TB

评论


$ \ begingroup $
另外,(尽管不确定是否专门为此设计),SHA-224不易受到长度扩展攻击的影响,否则默克尔-达格德结构会固有这种攻击。
$ \ endgroup $
– ntoskrnl
2014年3月21日在11:58

$ \ begingroup $
@ntkskml:我皱眉并不脆弱:尝试对长度扩展攻击进行明显修改的对手成功尝试$ n $的成功几率是$ n / 2 ^ {32} $。
$ \ endgroup $
–fgrieu♦
2014年3月21日在18:52



#3 楼

老实说,实际上,几乎没有理由使用SHA-224。远。在大多数情况下,如果您想要的杂凑具有超过128位但少于256位,则仅使用SHA-256并将自己截断输出到所需的位长就更简单,并且与使用SHA-224一样有效。如您所见,SHA-256也比SHA-224更可能在不同平台上使用,这使其成为可移植性的更好选择。

您为什么要使用SHA-224,然后

最明显的用例是,如果您需要实现一个指定使用SHA-224哈希值的现有协议,则可以使用。尽管由于上述原因,这不是一个很常见的选择,但我确信确实存在这样的协议。

此外,SHA-224与截断的SHA-256相比的次要优势是,由于对于不同的IV,知道给定消息的SHA-224哈希并不会揭示有关其SHA-256哈希的任何有用信息,反之亦然。这实际上更像是“防白痴”功能;由于两个哈希的名称不同,所以粗心的用户可能会认为它们的输出没有共同之处,因此NIST更改了IV以确保确实如此。您通常应该依靠。如果确实需要计算同一输入字符串的多个不相关的哈希,则可能需要的是像HMAC这样的键控PRF,可以使用任何常见的哈希函数(例如SHA-256)实例化。

评论


$ \ begingroup $
到目前为止,我发现您的答案最有见地。 SHA-224显然主要用于DSS(ECDSA,DSA,RSA)。但是对于所有这些用途,SHA-256至少是一样好。 SHA-224还可以提供更多的选择,以增加混乱。
$ \ endgroup $
–user4982
2014年3月22日在7:29