Spec-Zone.ru › OpenJDK 24

Класс DrbgParameters

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

Согласно NIST Special Publication 800-90A Revision 1, Рекомендации по генерации случайных чисел с использованием детерминированных генераторов случайных бит (800-90Ar1),

DRBG основан на механизме DRBG, как указано в данной рекомендации, и включает источник случайности. Механизм DRBG использует алгоритм (т. е. алгоритм DRBG), который генерирует последовательность бит из начального значения, определяемого семеном, определяемым по выводу источника случайности.

Спецификация 800-90Ar1 допускает различные варианты реализации DRBG, такие как:

  • источник энтропии,
  • механизм DRBG (например, Hash_DRBG),
  • алгоритм DRBG (например, SHA-256 для Hash_DRBG и AES-256 для CTR_DRBG. Обратите внимание, что это не алгоритм, используемый в SecureRandom.getInstance(java.lang.String), который мы будем называть ниже алгоритмом SecureRandom),
  • необязательные функции, включая устойчивость к предсказаниям и поддержку переинициализации,
  • максимальная степень защиты.

Эти варианты устанавливаются в каждой реализации и не управляются напрямую SecureRandom API. Обратитесь к документации поставщика DRBG, чтобы найти подходящую реализацию для ситуации.

С другой стороны, спецификация 800-90Ar1 предоставляет некоторые настраиваемые параметры, такие как:

  • требуемая степень защиты,
  • необходимость устойчивости к предсказаниям,
  • строка персонализации и дополнительный ввод.

Экземпляр DRBG может быть создан с параметрами из объекта DrbgParameters.Instantiation и другой информацией (например, номером, который не управляется данным 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. Рекомендуется, чтобы реализация содержала конструктор с 1 аргументом конструктор, принимающий аргумент 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(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.

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

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание методов

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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/security/DrbgParameters.html

Spec-Zone.ru

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