您不必太在意,因为 SHA-224 的使用非常有限。
在这个问题中, CBroe指出了一个重要的评论:
该博客文章是关于当您的应用发出 API 请求时的 SSL 连接。这与您对应用程序中的数据所做的任何事情无关,它与传输层有关。
根据https://crypto.stackexchange.com/questions/15151/sha-224-purpose
回答者Ilmari Karonen
:
老实说,在实践中,使用 SHA-224 的理由很少(如果有的话)。
正如 fgrieu 所指出的,SHA-224 只是 SHA-256,具有不同的 IV 并丢弃了 32 个输出位。对于大多数目的,如果您想要一个多于 128 位但少于 256 位的散列,则只需使用 SHA-256 并将输出自己截断为所需的位长度,这与使用 SHA-224 一样简单且高效。正如您所观察到的,与 SHA-224 相比,SHA-256 也更有可能在不同的平台上可用,使其成为更好的可移植性选择。
那么,您为什么要使用 SHA-224?
一个明显的用例是,如果您需要实现一个指定使用 SHA-224 哈希的现有协议。虽然由于上述原因,这不是一个非常常见的选择,但我确信这样的协议确实存在。
此外,与截断的 SHA-256 相比,SHA-224 的一个次要优势是,由于 IV 不同,知道给定消息的 SHA-224 哈希并不能揭示有关其 SHA-256 哈希的任何有用信息,反之亦然。这实际上更像是一种“防白痴”功能。由于这两个哈希具有不同的名称,粗心的用户可能会认为他们的输出没有共同点,因此 NIST 更改了 IV 以确保确实如此。
但是,这并不是您通常应该依赖的东西。如果您确实需要计算同一输入字符串的多个不相关的哈希值,您可能想要的是一个像 HMAC 这样的键控 PRF,它可以使用任何常见的哈希函数(例如 SHA-256)来实例化。
正如您所提到的,带有 SP3 的 Windows XP 不支持 SHA-224 但它支持SHA-256:
还要检查:https ://security.stackexchange.com/questions/1751/what-are-the-realistic-and-most-secure-crypto-for-symmetric-asymmetric-hash
特别是:https ://stackoverflow.com/a/817121/3964066
并且:https ://security.stackexchange.com/a/1755
Thomas Pornin 的部分回答:
256 位曲线上的 ECDSA 已经实现了“牢不可破”的安全级别(即,与使用 128 位密钥的 AES 或针对冲突的 SHA-256 大致相同的级别)。注意素数域有椭圆曲线,二元域有曲线;哪种最有效取决于所涉及的硬件(对于类似大小的曲线,PC 会更喜欢素数字段上的曲线,但使用二进制字段更容易构建专用硬件;较新的 Intel 和 AMD 处理器上的 CLMUL 指令可能会改变)。
SHA-512 使用 64 位操作。这在 PC 上很快,而在智能卡上则不那么快。SHA-256 通常更适合小型硬件(包括家庭路由器或智能手机等 32 位架构)