Класс 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)

Генерирует объект 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, 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

Spec-Zone .ru
спецификации, руководства, описания, API