Skip to content

JEP 287: SHA-3 Hash Algorithms | SHA-3 哈希算法

摘要

实现 NIST FIPS 202 中指定的 SHA-3 密码哈希函数(仅限 BYTE)。

非目标

本 JEP 不会实现 SHAKE128 和 SHAKE256 可扩展输出函数(XOFs),因为它们未被批准为哈希函数。最新的 PKCS11 v2.40 草案不包含 SHA-3 支持。因此,“SunPKCS11”提供程序没有变化。此外,本 JEP 不会为其他加密功能(例如签名、MAC 和密码)实现基于 SHA-3 的算法,因为它们尚无标准。这些将在随后的增强功能和 / 或 JEP 中介绍。

动机

SHA-2 发表已有 10 多年,尽管对 SHA-2 没有显示出重大攻击,但 NIST 认为需要与 SHA-2 不同的密码哈希函数作为替代品。经过 9 年的努力,SHA-3 是 NIST 使用公开竞赛和审查流程开发的第一个密码哈希算法。FIPS 202《SHA-3 标准:基于置换的哈希和可扩展输出函数》于 2015 年 8 月最终确定为标准。诸如 BouncyCastle 之类的加密供应商在 FIPS 202 还是草案时就开始支持 SHA-3。Solaris 还将在即将发布的 Solaris 12.0 中支持 SHA-3。由于哈希函数在安全应用中被广泛使用,并且其他供应商已经在添加 SHA-3 实现,因此在 JDK 中提供对 SHA-3 的支持非常重要。

描述

FIPS 202 定义了四种新的哈希函数:SHA3-224、SHA3-256、SHA3-384 和 SHA3-512。这些可以作为 java.security.MessageDigest API 的新算法实现,标准名称为 "SHA3-224"、"SHA3-256"、"SHA3-384" 和 "SHA3-512"。不需要新的 API,因为没有必需的参数。

以下是提供程序和相应算法增强的列表:

  • "SUN" 提供程序:SHA3-224、SHA3-256、SHA3-384 和 SHA3-512
  • "OracleUcrypto" 提供程序:Solaris 12.0 支持的 SHA-3 摘要

测试

实现必须通过 NIST 提供的相关 已知答案测试,其中输入大小是 8 位的倍数,以及现有的回归和单元测试。