Spec-Zone.ru › OpenJDK 17

Класс DrbgParameters

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

Согласно NIST Special Publication 800-90A Revision 1, Recommendation for Random Number Generation Using Deterministic Random Bit Generators (800-90Ar1),

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

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

  • источник энтропии,
  • механизм DRBG (например, Hash_DRBG),
  • алгоритм DRBG (например, SHA-256 для Hash_DRBG и AES-256 для CTR_DRBG. Обратите внимание, что это не алгоритм, используемый в SecureRandom.getInstance(java.lang.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. Рекомендуется, чтобы реализация содержала конструктор с 1 аргументом конструктор, принимающий аргумент DrbgParameters.Instantiation. Если реализация выполнена таким образом, она может быть выбрана любым методом SecureRandom.getInstance(). Если она выбрана методом SecureRandom.getInstance() с параметром SecureRandomParameters, параметр передаётся в этот конструктор. Если она выбрана методом SecureRandom.getInstance() без параметра SecureRandomParameters, конструктор вызывается с аргументом null, и реализация должна выбрать свои собственные параметры. Её метод SecureRandom.getParameters() всегда должен возвращать не-null эффективное DrbgParameters.Instantiation значение, которое отражает, как на самом деле инициализирован DRBG. Вызывающий код может использовать эту информацию, чтобы определить, является ли объект SecureRandom DRBG и какие возможности он поддерживает. Обратите внимание, что возвращаемое значение необязательно равно DrbgParameters.Instantiation объекту, переданному в вызов SecureRandom.getInstance(). Например, запрашиваемая возможность может быть DrbgParameters.Capability.NONE, но эффективное значение может быть DrbgParameters.Capability.RESEED_ONLY, если реализация поддерживает переинициализацию. Реализация должна реализовать метод SecureRandomSpi.engineNextBytes(byte[], SecureRandomParameters), принимающий параметр DrbgParameters.NextBytes. Если результат SecureRandom.getParameters() имеет возможность равную 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 может автоматически переинициализироваться, если период seed больше максимального срока жизни seed, определённого механизмом 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, 2021, 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/17/docs/api/java.base/java/security/DrbgParameters.html

Spec-Zone.ru

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