Класс DrbgParameters
public class DrbgParameters extends Object
Согласно 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 |
Генерирует объект DrbgParameters.Instantiation. |
static DrbgParameters.NextBytes |
nextBytes |
Генерирует объект DrbgParameters.NextBytes. |
static DrbgParameters.Reseed |
reseed |
Генерирует объект DrbgParameters.Reseed. |
Подробное описание методов
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