Класс 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. |
Методы, объявленные в классе Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait | Модификатор и тип | Метод | Описание |
|---|---|---|
protected Object |
clone() |
Создаёт и возвращает копию этого объекта. |
boolean |
equals |
Указывает, равен ли другой объект этому объекту. |
protected void |
finalize() |
Устарело, планируется удаление: этот элемент API может быть удалён в будущей версии. Финализация объявлена устаревшей и может быть удалена в одном из будущих выпусков. |
final Class |
getClass() |
Возвращает класс времени выполнения этого Object. |
int |
hashCode() |
Возвращает хеш-код этого объекта. |
final void |
notify() |
Пробуждает один поток, ожидающий на мониторе этого объекта. |
final void |
notifyAll() |
Пробуждает все потоки, ожидающие на мониторе этого объекта. |
String |
toString() |
Возвращает строковое представление объекта. |
final void |
wait() |
Приостанавливает текущий поток до его пробуждения, обычно вследствие вызова notify или interrupt. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного интервала времени. |
final void |
wait |
Приостанавливает текущий поток до его пробуждения, обычно вследствие вызова notify или interrupt, либо до истечения заданного интервала времени. |
Подробное описание методов
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.