Spec-Zone.ru › OpenJDK 21

Класс 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 и другой информацией (например, 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. Рекомендуется, чтобы реализация содержала конструктор с 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, 2023, 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/21/docs/api/java.base/java/security/DrbgParameters.html

Spec-Zone.ru

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