Skip to content

JEP 130: SHA-224 Message Digests | SHA-224 消息摘要

摘要

实现 SHA-224 消息摘要算法及相关算法。

目标

通过 SHA-2 系列消息摘要实现中的 SHA-224 变体,增强 JDK 现有的加密算法。确保与常用的第三方加密提供者或 JDK 中捆绑的提供者之间的互操作性。

动机

由于 SHA-1 消息摘要存在已知缺陷,越来越多的应用程序和协议正在采用 SHA-2 消息摘要。JDK 最初并未支持 SHA-224,因为其普及程度不如其他 SHA-2 变体(即 SHA-256、SHA-384 和 SHA-512)。近年来,一些标准(如 PKCS11)已经修订以支持 SHA-224,因此我们也应该支持它。

描述

SHA-224 的定义与 SHA-256(FIPS 180-3 第 6.2 节)完全相同,但有以下两个例外:

  1. 初始哈希值 H 应按第 5.3.2 节中的规定设置;即,在八个 32 位字 H0--H7 中:H0 = c1059ed8, H1 = 367cd507, H2 = 3070dd17, H3 = f70e5939, H4 = ffc00b31, H5 = 68581511, H6 = 64f98fa7, H7 = befa4fa4。

  2. 224 位消息摘要是通过截断最终哈希值 H(N) 的左起 224 位获得的。除了提供 SHA-224 消息摘要实现外,还应实现使用 SHA-224 的其他加密算法,以提供完整的解决方案。以下是加密算法及其对应提供者的列表:

    • SUN 提供者中的 SHA224 消息摘要
    • SunRsaSign 提供者中的 SHA224withRSA 签名
    • SunEC 提供者中的 SHA224withECDSA 签名
    • SunJCE 提供者中的 HmacSHA224 消息认证码(MAC)
    • SunJCE 提供者中的 OAEPwithSHA-224AndMGF1Padding 支持
    • SunPKCS11 提供者中的 SHA224 消息摘要(CKM_SHA224)、SHA224withRSA 签名(CKM_SHA224_RSA_PKCS)、HmacSHA224 消息认证码(CKM_SHA224_HMAC)

测试

已知答案测试:测试向量可用:

互操作性测试:当 JDK 中有多个加密提供者支持相同算法时,可以进行互操作性测试,例如 SUN 与 SunPKCS11 针对 SHA224,SunRsaSign 与 SunPKCS11 针对 SHA224withRSA 等。或者,SQE 可以开发产品测试,检查与第三方加密提供者(如 Bouncy Castle)的互操作性。

风险和假设

SunPKCS11 提供者不支持 PKCS11 标准定义的所有机制。例如,PKCS11 定义了密钥派生功能的机制,即给定一个密钥,可以推导出具有奇偶校验调整位的另一个密钥。SunPKCS11 提供者不支持使用消息摘要的任何密钥派生功能,即 CKM_[MD5/SHA1/SHA256/SHA384/SHA512]_KEY_DERIVATION 机制,因此省略了对 CKM_SHA224_KEY_DERIVATION 的支持。同样的情况也适用于 CKM_SHA224_RSA_PKCS_PSS 机制、CKG_MGF1_SHA224 函数、CKM_SHA224_HMAC_GENERAL 机制以及 SunRsaSign 提供者关于 RSA PSS 签名的支持。

影响

  • 文档:需要更新多个安全文档,以包含新支持的算法,如 JCA 标准算法名称文档以及各种提供者的参考指南。

  • 法律:需要更新出口管制文件支持的加密算法列表。