Skip to content

JEP 121: Stronger Algorithms for Password-Based Encryption | 基于密码的加密的更强算法

摘要

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

非目标

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

尽管 PKCS#11 规范为基于密码的加密定义了一些机制,但 SunPKCS11 提供者目前不支持其中任何一项。来自底层 PKCS11 库的支持也似乎很少,例如,Solaris 软令牌实现仅支持 CKM_PBE_SHA1_RC4_128 和 CKM_PKCS5_PBKD2。因此,此 JEP 不包括 SunPKCS11 提供者在其范围内。

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

动机

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

描述

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

  1. PBEwithSHA1AndRC4_128
  2. PBEwithSHA1AndRC4_40
  3. PBEwithSHA1AndDESede(3 密钥)
  4. PBEwithSHA1AndDESede(2 密钥)
  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 密钥)密码
  • PBEwithSHA1AndRC2_128 密码

以及可能使用算法名称模式 PBEWith<prf>And<encryption> 注册的 PBES2 密码算法的组合,其中

  • <prf>HmacSHA1HmacSHA224HmacSHA256HmacSHA384HmacSHA512 之一,

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

最后,如果时间允许,将支持以下一个或多个 PBMAC1 mac 算法:

  • PBEWithHmacSHA1 mac
  • PBEWithHmacSHA224 mac
  • PBEWithHmacSHA256 mac
  • PBEWithHmacSHA384 mac
  • PBEWithHmacSHA512 mac

测试

PKCS#5 标准规范中未提供测试向量;我们需要检查第三方提供者并针对它们进行测试,以验证我们自己的实现。

影响

  • JCP:我们应该能够支持新的 PBE 算法而无需进行任何 API 更改,但如果 PBMAC1 需要任何 API 更改,则这些更改将针对 JSR 伞项目提出。

  • 文档:需要更新所有相关的安全白皮书、SunJCE 提供者文档和参考指南,以包括新支持的 PBE 算法。