Класс DrbgParameters
- java.lang.Object
-
- java.security.DrbgParameters
public 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(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() должен всегда возвращать непустой эффективный объект 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 может автоматически пересчитываться, если период семян больше максимального срока жизни семян, определенного механизмом 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)напрямую считывает из этого системного источника энтропии по умолчанию.Эта реализация прошла все тесты, включенные в версию Набор тестовых векторов DRBG от 20151104.
- С:
- 9
Вложенные классы
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class | DrbgParameters.Capability | Возможности пересчета и устойчивости к предсказанию DRBG. |
static class | DrbgParameters.Instantiation | Параметры DRBG для инициализации. |
static class | DrbgParameters.NextBytes | Параметры DRBG для генерации случайных битов. |
static class | DrbgParameters.Reseed | Параметры DRBG для пересчета. |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
static DrbgParameters.Instantiation | instantiation(int strength,
DrbgParameters.Capability capability,
byte[] personalizationString) | Генерирует объект |
static DrbgParameters.NextBytes | nextBytes(int strength,
boolean predictionResistance,
byte[] additionalInput) | Генерирует объект |
static DrbgParameters.Reseed | reseed(boolean predictionResistance,
byte[] additionalInput) | Генерирует объект |
Методы, объявленные в классе 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, 2020, 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/11/docs/api/java.base/java/security/DrbgParameters.html