openjdk.ruOpenJDK на русском

JEP 287: SHA-3 Hash Algorithms

Хеш-алгоритмы SHA-3

ОтветственныйValerie Peng
ТипFeature
ОбластьImplementation
СтатусClosed / Delivered
Выпуск9
Компонентsecurity-libs / java.security
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьS
ДлительностьM
РецензентыSean Mullan
ОдобренBrian Goetz
Создан2014/11/08 00:35
Обновлён2017/03/06 11:35
Задача8064399

Аннотация

Реализовать криптографические хеш-функции SHA-3 (только для входных данных, кратных байту), определённые в NIST FIPS 202.

Что не является целью

Этот JEP не будет реализовывать функции с расширяемым выходом (extendable-output functions, XOF) SHAKE128 и SHAKE256, поскольку они не утверждены в качестве хеш-функций. Последний черновик PKCS11 v2.40 не содержит поддержки SHA-3. Поэтому провайдер «SunPKCS11» не меняется. Кроме того, этот JEP не будет реализовывать алгоритмы на основе SHA-3 для других криптографических функций, таких как подписи, MAC и шифры, поскольку стандартов для них пока нет. Они будут рассмотрены в последующих улучшениях и/или JEP.

Мотивация

SHA-2 был опубликован более 10 лет назад, и, хотя ни одной значимой атаки на SHA-2 продемонстрировано не было, NIST счёл необходимым иметь отличающуюся от него криптографическую хеш-функцию в качестве альтернативы SHA-2. SHA-3, работа над которым заняла девять лет, — первый криптографический хеш-алгоритм, разработанный NIST с помощью открытого конкурса и процесса проверки. FIPS 202 «SHA-3 Standard: Permutation-Based Hash and Extendable-Output Functions» был окончательно утверждён как стандарт в августе 2015 года. Поставщики криптографических решений, такие как BouncyCastle, начали поддерживать SHA-3, когда FIPS 202 был ещё черновиком. Solaris тоже будет поддерживать SHA-3 в предстоящем выпуске Solaris 12.0. Поскольку хеш-функции широко используются в приложениях безопасности, а другие поставщики уже добавляют реализации SHA-3, важно обеспечить поддержку SHA-3 в JDK.

Описание

FIPS 202 определяет четыре новые хеш-функции: SHA3-224, SHA3-256, SHA3-384 и SHA3-512. Их можно реализовать как новые алгоритмы API java.security.MessageDigest под стандартными именами «SHA3-224», «SHA3-256», «SHA3-384» и «SHA3-512». Новые API не нужны, так как никаких параметров не требуется.

Ниже приведён список провайдеров и соответствующих улучшений алгоритмов:

  • Провайдер «SUN»: SHA3-224, SHA3-256, SHA3-384 и SHA3-512
  • Провайдер «OracleUcrypto»: дайджесты SHA-3, поддерживаемые Solaris 12.0

Тестирование

Реализация должна проходить соответствующие тесты с известными ответами, предоставленные NIST, для которых размер входных данных кратен 8 битам, а также существующие регрессионные и модульные тесты.