跳到主要内容

JEP 121:基于密码加密的更强算法

QWen Max 中英对照

概述

在 SunJCE 提供程序中提供更强的基于密码的加密(PBE)算法实现。

非目标

除了下面描述部分列出的算法外,PKCS#5 还为 PBES2 定义了多种其他加密方案,其中许多是遗留方案,即 DES-CBC-PAD、DES-EDE3-CBC-PAD、RC2-CBC-PAD 和 RC5-CBC-PAD。鉴于在较新的基于密码的加密技术(例如 PBES2)中使用这些遗留加密方案的需求不足,因此没有计划为它们提供支持。

尽管 PKCS#11 规范定义了一些基于密码的加密机制,但 SunPKCS11 提供程序目前并不支持其中任何一种。底层 PKCS11 库的支持也显得十分有限,例如,Solaris softtoken 实现仅支持 CKM_PBE_SHA1_RC4_128 和 CKM_PKCS5_PBKD2。因此,此 JEP(Java 改进提案)并未将 SunPKCS11 提供程序纳入其范围。

PKCS#5 v2.0 修正案 1:基于密码的加密 XML 模式定义了在 PKCS#5 v2.0 中规定的 PBE 算法的 XML 标识符,但这应该在 XML 代码中单独处理,而不是在 SunJCE 提供程序中处理。

动机

目前 SunJCE 提供程序支持的 PBE 算法仅涵盖 DESede 和 RC2(40 位)与 SHA1。为了保持竞争力,我们还应支持使用更强加密算法和消息摘要算法的 PBE 算法实现,例如 AES 加密算法和 SHA-2 系列消息摘要,以及 PKCS#12 指定的算法。

描述

PKCS#12 为其密码隐私模式指定了以下 PBE 算法:

  1. PBEwithSHA1AndRC4_128
  2. PBEwithSHA1AndRC4_40
  3. PBEwithSHA1AndDESede (3-key)
  4. PBEwithSHA1AndDESede (2-key)
  5. PBEwithSHA1AndRC2_128
  6. PBEwthSHA1AndRC2_40

我们目前只支持 3 和 6。要完全支持 PKCS12 密钥库,我们应该添加对所有其他项的支持。

还有人要求使用更强的加密和摘要方案(如 AES 和 SHA-2 系列摘要)来构建基于密码的加密算法。因此,我们应该按照 PKCS#5 中针对较新应用程序的建议,添加对 PBES2 和 PBMAC1(在 PKCS#5 v2.1 中定义)的支持。

SunJCE 提供程序将得到增强,以支持以下算法:

  • PBEwithSHA1AndRC4_128 加密算法
  • PBEwithSHA1AndRC4_40 加密算法
  • PBEwithSHA1AndDESede(2-key)加密算法
  • PBEwithSHA1AndRC2_128 加密算法

并且可能是使用算法名称模式 PBEWith<prf>And<encryption> 注册的 PBES2 加密算法的组合,其中

  • <prf>HmacSHA1HmacSHA224HmacSHA256HmacSHA384HmacSHA512 中的一种,且
  • <encryption> 是 AES(即,PKCS#5 v2.1 草案中的 AES-CBC-PAD,使用 CBC 模式和 PKCS5Padding 的 AES)。

最后,如果时间允许,支持一个或多个以下 PBMAC1 消息认证码算法:

  • PBEWithHmacSHA1 消息认证码
  • PBEWithHmacSHA224 消息认证码
  • PBEWithHmacSHA256 消息认证码
  • PBEWithHmacSHA384 消息认证码
  • PBEWithHmacSHA512 消息认证码

测试

PKCS#5 标准规范中没有提供测试向量;我们必须检查第三方供应商,并针对它们进行测试,以验证我们自己的实现。

影响

  • JCP:我们应该能够在不进行任何 API 更改的情况下支持新的 PBE 算法,然而,如果 PBMAC1 需要任何 API 更改,那么它们将被提议纳入 Umbrella JSR。
  • 文档:需要更新所有相关的安全白皮书、SunJCE 提供商文档以及参考指南,以包含新支持的 PBE 算法。