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

JEP 273: DRBG-Based SecureRandom Implementations

Реализации SecureRandom на основе DRBG

ОтветственныйWeijun Wang
ТипFeature
ОбластьSE
СтатусClosed / Delivered
Выпуск9
Компонентsecurity-libs / java.security
Обсуждениеsecurity dash dev at openjdk dot java dot net
ТрудоёмкостьM
ДлительностьM
РецензентыBrian Goetz, Sean Mullan
ОдобренBrian Goetz
Создан2013/05/28 19:56
Обновлён2019/11/28 11:21
Задача8051408

Аннотация

Реализовать три механизма детерминированного генератора случайных битов (Deterministic Random Bit Generator, DRBG), описанные в NIST 800-90Ar1.

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

Предоставить API для источника энтропии (Source of Entropy Input, SEI) или реализовать одобренный SEI на всех платформах, где «одобренный» означает одобренный NIST или FIPS.

Мотивация

В JDK есть два вида реализаций SecureRandom. Первый зависит от платформы и основан на нативных вызовах или устройствах ОС: например, чтение /dev/{u}random в Unix, использование CryptoAPI в Windows и использование различных предварительно настроенных библиотек PKCS11. Последние выпуски Solaris, Linux и Windows уже поддерживают DRBG, но более старые выпуски и встраиваемые системы могут его не поддерживать. Второй вид — это реализация на чистом Java, которая использует более старую реализацию RNG на основе SHA1. Она не так надёжна, как алгоритмы одобренных механизмов DRBG.

Механизмы DRBG, разработанные и одобренные NIST (как в SP 800-90Ar1), используют современные алгоритмы, по надёжности не уступающие SHA-512 и AES-256. Каждый из этих механизмов можно настроить с разным уровнем стойкости и разными возможностями в соответствии с требованиями пользователя. В некоторых средах, особенно для правительства США, поддержка этих механизмов становится очень важной.

Описание

Согласно NIST SP 800-90, генератор случайных битов (RBG, 800-90C) состоит из источника энтропии (800-90B и 800-90C) и механизма DRBG (800-90Ar1). Источник энтропии предоставляет свежую случайность (энтропию) в качестве начального значения (seed) для механизма DRBG, который затем может непрерывно генерировать «случайные» последовательности битов.

API

  • Новые методы SecureRandom, соответствующие 800-90C. Они позволяют настраивать объект SecureRandom и задавать дополнительные входные данные при начальной инициализации, повторной инициализации и генерации случайных битов.

  • Новые методы в SecureRandomSpi для реализации перечисленных выше новых методов.

  • Новый интерфейс SecureRandomParameters, через который можно передавать дополнительные входные данные новым методам SecureRandom.

Эти новые API должны быть достаточно общими для любых разновидностей SecureRandom (не только DRBG) и могут быть добавлены в SecureRandom и SecureRandomSpi.

  • Новый класс DrbgParameters (и его внутренние классы), реализующий SecureRandomParameters, для использования в DRBG.

Реализация

  • Реализовать три механизма DRBG (Hash_DRBG, HMAC_DRBG, CTR_DRBG) из 800-90Ar1 (на всех платформах).

Побочные результаты

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