Spec-Zone.ru › OpenJDK 27

Класс DrbgParameters

java.lang.Object
java.security.DrbgParameters
public final class DrbgParameters extends Object
Этот класс задаёт параметры, используемые DRBG (детерминированным генератором случайных битов).

Согласно специальной публикации 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
Внешние спецификации
  • Рекомендация по генерации случайных чисел с использованием детерминированных генераторов случайных битов
  • Стандартные имена алгоритмов безопасности Java

Краткое описание вложенных классов

Модификатор и тип Класс Описание
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(int strength, DrbgParameters.Capability capability, byte[] personalizationString)
Создаёт объект DrbgParameters.Instantiation.
static DrbgParameters.NextBytes nextBytes(int strength, boolean predictionResistance, byte[] additionalInput)
Создаёт объект DrbgParameters.NextBytes.
static DrbgParameters.Reseed reseed(boolean predictionResistance, byte[] additionalInput)
Создаёт объект DrbgParameters.Reseed.

Методы, объявленные в классе Object

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и примеры работающего кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её дочерних компаний в США и других странах.
Авторское право © 1993, 2026, Oracle и/или её дочерние компании, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API