Класс DrbgParameters
public final class DrbgParameters extends Object
Согласно документу специальной публикации NIST 800-90A, редакция 1, «Рекомендация по генерации случайных чисел с использованием детерминированных генераторов случайных битов» (800-90Ar1),
DRBG основан на механизме DRBG, определённом в этой Рекомендации, и включает источник случайности. Механизм DRBG использует алгоритм (то есть алгоритм DRBG), который формирует последовательность битов из начального значения, определяемого начальным числом, которое, в свою очередь, определяется выходными данными источника случайности.
Спецификация 800-90Ar1 допускает различные варианты реализации DRBG, например:
- источник энтропии,
- механизм DRBG (например, Hash_DRBG),
- алгоритм DRBG (например, SHA-256 для Hash_DRBG и AES-256 для CTR_DRBG. Обратите внимание, что это не алгоритм, используемый в
SecureRandom.getInstance(String), который далее будет называться алгоритмом SecureRandom), - дополнительные функции, включая устойчивость к предсказанию и поддержку повторного засевания,
- максимальная криптостойкость.
Эти варианты задаются в каждой реализации и не управляются напрямую через API SecureRandom. Ознакомьтесь с документацией поставщика DRBG, чтобы найти подходящую реализацию для конкретной ситуации.
При этом спецификация 800-90Ar1 предусматривает некоторые настраиваемые параметры, например:
- требуемая криптостойкость,
- необходимость устойчивости к предсказанию,
- строка персонализации и дополнительные входные данные.
Экземпляр DRBG можно создать с параметрами объекта DrbgParameters.Instantiation и другими данными (например, nonce, который не управляется этим API). Это соответствует Instantiate_function, определённому в NIST SP 800-90Ar1.
Для повторного засева экземпляра DRBG можно использовать параметры объекта DrbgParameters.Reseed. Это соответствует Reseed_function, определённому в NIST SP 800-90Ar1. Вызов SecureRandom.reseed() эквивалентен вызову SecureRandom.reseed(SecureRandomParameters) с фактическим флагом устойчивости к предсказанию, заданным при создании экземпляра (возвращается методом SecureRandom.getParameters()), и без дополнительных входных данных.
Экземпляр DRBG генерирует данные с дополнительными параметрами из объекта DrbgParameters.NextBytes. Это соответствует Generate_function, определённому в NIST SP 800-90Ar1. Вызов SecureRandom.nextBytes(byte[]) эквивалентен вызову SecureRandom.nextBytes(byte[], SecureRandomParameters) с фактической криптостойкостью и флагом устойчивости к предсказанию, заданными при создании экземпляра (возвращаются методом SecureRandom.getParameters()), и без дополнительных входных данных.
DRBG следует реализовывать как подкласс SecureRandomSpi. Рекомендуется, чтобы реализация содержала конструктор с одним аргументом — конструктор, принимающий аргумент типа DrbgParameters.Instantiation. В этом случае эту реализацию можно выбрать любым методом SecureRandom.getInstance(). Если она выбрана методом SecureRandom.getInstance() с параметром SecureRandomParameters, этот параметр передаётся конструктору. Если она выбрана методом SecureRandom.getInstance() без параметра SecureRandomParameters, конструктор вызывается с аргументом null, и реализация должна самостоятельно выбрать параметры. Метод SecureRandom.getParameters() всегда должен возвращать ненулевой объект фактических параметров DrbgParameters.Instantiation, отражающий реальную конфигурацию экземпляра DRBG. Вызывающий код может использовать эту информацию, чтобы определить, является ли объект SecureRandom экземпляром DRBG и какие функции он поддерживает. Обратите внимание, что возвращаемое значение не обязательно совпадает с объектом DrbgParameters.Instantiation, переданным при вызове SecureRandom.getInstance(). Например, запрошенная возможность может быть DrbgParameters.Capability.NONE, а фактическое значение — DrbgParameters.Capability.RESEED_ONLY, если реализация поддерживает повторный засев. Реализация должна реализовать метод SecureRandomSpi.engineNextBytes(byte[], SecureRandomParameters), принимающий параметр DrbgParameters.NextBytes. Если у метода SecureRandom.getParameters() возможность capability не равна NONE, реализация должна реализовать SecureRandomSpi.engineReseed(SecureRandomParameters), принимающий параметр DrbgParameters.Reseed.
Если же реализация DRBG не содержит конструктора с аргументом типа DrbgParameters.Instantiation (что не рекомендуется), её можно выбрать только методом SecureRandom.getInstance() без параметра SecureRandomParameters, но нельзя будет выбрать при вызове метода getInstance с параметром SecureRandomParameters. В этом случае метод SecureRandom.getParameters() должен возвращать null, а реализациям не требуется реализовывать ни SecureRandomSpi.engineNextBytes(byte[], SecureRandomParameters), ни SecureRandomSpi.engineReseed(SecureRandomParameters).
DRBG может выполнять повторный засев автоматически, если период использования начального числа превышает максимальный срок его действия, определённый механизмом DRBG.
Реализация DRBG должна поддерживать сериализацию и десериализацию, сохраняя конфигурацию и фактические параметры. Однако внутреннее состояние не должно сериализоваться, а десериализованный объект необходимо создать заново.
Примеры:
SecureRandom drbg;
byte[] buffer = new byte[32];
// Any DRBG is OK
drbg = SecureRandom.getInstance("DRBG");
drbg.nextBytes(buffer);
SecureRandomParameters params = drbg.getParameters();
if (params instanceof DrbgParameters.Instantiation) {
DrbgParameters.Instantiation ins = (DrbgParameters.Instantiation) params;
if (ins.getCapability().supportsReseeding()) {
drbg.reseed();
}
}
// The following call requests a weak DRBG instance. It is only
// guaranteed to support 112 bits of security strength.
drbg = SecureRandom.getInstance("DRBG",
DrbgParameters.instantiation(112, NONE, null));
// Both the next two calls will likely fail, because drbg could be
// instantiated with a smaller strength with no prediction resistance
// support.
drbg.nextBytes(buffer,
DrbgParameters.nextBytes(256, false, "more".getBytes()));
drbg.nextBytes(buffer,
DrbgParameters.nextBytes(112, true, "more".getBytes()));
// The following call requests a strong DRBG instance, with a
// personalization string. If it successfully returns an instance,
// that instance is guaranteed to support 256 bits of security strength
// with prediction resistance available.
drbg = SecureRandom.getInstance("DRBG", DrbgParameters.instantiation(
256, PR_AND_RESEED, "hello".getBytes()));
// Prediction resistance is not requested in this single call,
// but an additional input is used.
drbg.nextBytes(buffer,
DrbgParameters.nextBytes(-1, false, "more".getBytes()));
// Same for this call.
drbg.reseed(DrbgParameters.reseed(false, "extra".getBytes()));
- Требования к реализации:
- По соглашению поставщик должен использовать для основной реализации DRBG стандартное имя алгоритма
SecureRandom"DRBG". - Примечание по реализации:
- Следующие примечания относятся к реализации "DRBG" в поставщике SUN эталонной реализации JDK.
Эта реализация поддерживает механизмы Hash_DRBG и HMAC_DRBG с алгоритмами DRBG SHA-224, SHA-512/224, SHA-256, SHA-512/256, SHA-384 и SHA-512, а также CTR_DRBG (с функцией выработки ключа и без неё) с алгоритмами DRBG AES-128, AES-192 и AES-256.
Имя механизма и имя алгоритма DRBG определяются свойством безопасности
securerandom.drbg.config. По умолчанию используется Hash_DRBG с SHA-256.Для каждой комбинации можно запросить криптостойкость от 112 бит до максимального поддерживаемого значения. Поддерживаются повторный засев и устойчивость к предсказанию.
Строка персонализации поддерживается классом
DrbgParameters.Instantiation, а дополнительные входные данные — классамиDrbgParameters.NextBytesиDrbgParameters.Reseed.Если экземпляр DRBG создаётся без явного указания объекта
DrbgParameters.Instantiation, эта реализация использует параметры по умолчанию: запрашиваемую криптостойкость 128 бит, отсутствие запроса на устойчивость к предсказанию и отсутствие строки персонализации. Эти параметры создания экземпляра по умолчанию также можно настроить с помощью свойства безопасностиsecurerandom.drbg.config.Эта реализация получает свежую энтропию из системного источника энтропии по умолчанию, определяемого свойством безопасности
securerandom.source.Вызов
SecureRandom.generateSeed(int)выполняет непосредственное чтение из системного источника энтропии по умолчанию. - Начиная с версии:
- 9
- Внешние спецификации
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static enum |
DrbgParameters.Capability |
Возможности DRBG по повторному засеву и устойчивости к предсказанию. |
static final class |
DrbgParameters.Instantiation |
Параметры создания экземпляра DRBG. |
static final class |
DrbgParameters.NextBytes |
Параметры генерации случайных битов DRBG. |
static final class |
DrbgParameters.Reseed |
Параметры повторного засева DRBG. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
static DrbgParameters.Instantiation |
instantiation |
Создаёт объект DrbgParameters.Instantiation. |
static DrbgParameters.NextBytes |
nextBytes |
Создаёт объект DrbgParameters.NextBytes. |
static DrbgParameters.Reseed |
reseed |
Создаёт объект DrbgParameters.Reseed. |
Подробное описание методов
instantiation
public static DrbgParameters.Instantiation instantiation(int strength, DrbgParameters.Capability capability, byte[] personalizationString)
DrbgParameters.Instantiation.- Параметры:
-
strength— криптостойкость в битах; значение -1 задаёт криптостойкость по умолчанию при использовании вgetInstance. -
capability— возможность -
personalizationString— строка персонализации в виде массива байтов; может бытьnull. Содержимое этого массива байтов будет скопировано. - Возвращает:
- новый объект
Instantiation - Выбрасывает:
-
NullPointerException— еслиcapabilityравноnull -
IllegalArgumentException— еслиstrengthменьше -1
nextBytes
public static DrbgParameters.NextBytes nextBytes(int strength, boolean predictionResistance, byte[] additionalInput)
DrbgParameters.NextBytes.- Параметры:
-
strength— запрашиваемая криптостойкость в битах. Если задано значение -1, будет использоваться фактическая криптостойкость. -
predictionResistance— запрос на устойчивость к предсказанию -
additionalInput— дополнительные входные данные; может бытьnull. Содержимое этого массива байтов будет скопировано. - Возвращает:
- новый объект
NextBytes - Выбрасывает:
-
IllegalArgumentException— еслиstrengthменьше -1
reseed
public static DrbgParameters.Reseed reseed(boolean predictionResistance, byte[] additionalInput)
DrbgParameters.Reseed.- Параметры:
-
predictionResistance— запрос на устойчивость к предсказанию -
additionalInput— дополнительные входные данные; может бытьnull. Содержимое этого массива байтов будет скопировано. - Возвращает:
- новый объект
Reseed
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/security/DrbgParameters.html