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 节)完全相同,但有以下两个例外:
初始哈希值 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 消息认证码(MAC)
- 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 中有多个加密提供者支持相同算法时,可以进行互操作性测试,例如 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 标准算法名称文档以及各种提供者的参考指南。
法律:需要更新出口管制文件支持的加密算法列表。