JEP 130: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 节)完全相同,但有以下两个例外:
- 初始哈希值 H 应按照第 5.3.2 节的规定进行设置;即在八个 32 位字 H0--H7 中:H0 = c1059ed8,H1 = 367cd507,H2 = 3070dd17,H3 = f70e5939,H4 = ffc00b31,H5 = 68581511,H6 = 64f98fa7,H7 = befa4fa4。
- 224 位的消息摘要通过截取最终哈希值 H(N) 的最左边 224 位获得:除了提供 SHA-224 消息摘要实现外,使用 SHA-224 的其他加密算法也应被实现以提供完整的解决方案。以下是加密算法及其对应提供者的列表:
- SUN 提供者中的 SHA224 消息摘要
- SunRsaSign 提供者中的 SHA224withRSA 签名
- SunEC 提供者中的 SHA224withECDSA 签名
- SunJCE 提供者中的 HmacSHA224 消息认证码
- SunJCE 提供者中的 OAEPwithSHA-224AndMGF1Padding 支持
- SunPKCS11 提供者中的 SHA224 消息摘要 (CKM_SHA224),SHA224withRSA 签名 (CKM_SHA224_RSA_PKCS),HmacSHA224 消息认证码 (CKM_SHA224_HMAC)
测试
已知答案测试:测试向量可用:
- SHA224: http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/SHA224.pdf
- HmacSHA224: http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/HMAC_SHA224.pdf
(注:此内容无需翻译,因为它是网址链接和算法名称。)
互操作性测试:当多个 JDK 加密服务提供程序支持相同的算法时可以执行此测试,例如,对于 SHA-224 算法的 SUN 与 SunPKCS11,或对于 SHA-224withRSA 算法的 SunRsaSign 与 SunPKCS11 等。或者,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 机制以及关于 RSA PSS 签名的 SunRsaSign 提供程序来说,情况也是如此。
影响
- 文档:若干安全文档将需要使用新支持的算法进行更新,例如 JCA 标准算法名称文档以及各种提供者的参考指南。
- 法务:需要更新出口控制文件中支持的加密算法列表。