跳到主要内容

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

概括

在 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 impl 仅支持 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. PBE 与 SHA1 和 RC4_128
  2. PBE 与 SHA1 和 RC4_40
  3. PBEwithSHA1AndDESede(3 键)
  4. PBEwithSHA1AndDESede(2-密钥)
  5. PBE 与 SHA1 和 RC2_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密码

或许还有使用算法名称模式注册的 PBES2 密码算法的组合,PBEWith<prf>And<encryption>其中

  • <prf>``HmacSHA1是、HmacSHA224HmacSHA256HmacSHA384、 或HmacSHA512、之一

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

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

  • PBEWithHmacSHA1苹果
  • PBEWithHmacSHA224苹果
  • PBEWithHmacSHA256苹果
  • PBEWithHmacSHA384苹果
  • PBEWithHmacSHA512苹果

测试

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

影响

  • JCP:我们应该能够在不更改任何 API 的情况下支持新的 PBE 算法,但是,如果 PBMAC1 需要任何 API 更改,那么将针对 Umbrella JSR 提出这些更改。

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