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 (на всех платформах).
Побочные результаты
-
Алгоритмы безопасного хэширования SHA-512/224 и SHA-512/256, описанные в FIPS 180-4.
-
Связанные с ними алгоритмы HmacSHA512/224 и HmacSHA512/256.
Тестирование
-
Реализации DRBG должны проходить тестовые векторы CAVP.
-
Тестовые векторы SHA-512/224 и SHA-512/256.
-
Неофициальный тестовый вектор для HmacSHA512/224 и HmacSHA512/256.