Класс SecureRandom
- Все реализуемые интерфейсы:
-
Serializable,RandomGenerator
public class SecureRandom extends Random
Криптографически сильный генератор случайных чисел минимально соответствует статистическим тестам для генераторов случайных чисел, указанным в FIPS 140-2, Требования к безопасности для криптографических модулей, раздел 4.9.1. Кроме того, SecureRandom должен генерировать не детерминированный вывод. Поэтому любой материал семян, передаваемый объекту SecureRandom, должен быть непредсказуемым, и все последовательности SecureRandom вывода должны быть криптографически сильными, как описано в RFC 4086: Требования к случайности для безопасности.
Многие реализации SecureRandom имеют вид псевдослучайного генератора (PRNG, также известного как генератор детерминированных случайных битов или DRBG), что означает, что они используют детерминированный алгоритм для получения псевдослучайной последовательности из случайного семени. Другие реализации могут генерировать истинные случайные числа, а еще другие могут использовать комбинацию обоих методов.
Вызывающая сторона получает экземпляр SecureRandom через конструктор без аргументов или один из методов getInstance. Например:
SecureRandom r1 = new SecureRandom();
SecureRandom r2 = SecureRandom.getInstance("NativePRNG");
SecureRandom r3 = SecureRandom.getInstance("DRBG",
DrbgParameters.instantiation(128, RESEED_ONLY, null)); Третье утверждение выше возвращает объект SecureRandom определенного алгоритма, поддерживающего определенные параметры инициализации. Эффективные параметры инициализации реализации должны соответствовать этому минимальному запросу, но не обязательно быть одинаковыми. Например, даже если запрос не требует определенной функции, фактическая инициализация может предоставить эту функцию. Реализация может отложить инициализацию SecureRandom до фактического использования, но эффективные параметры инициализации должны быть определены сразу после создания и getParameters() должен всегда возвращать тот же результат без изменений.
Типичные вызывающие стороны SecureRandom вызывают следующие методы для получения случайных байтов:
SecureRandom random = new SecureRandom(); byte[] bytes = new byte[20]; random.nextBytes(bytes);
Вызывающие стороны также могут вызвать метод generateSeed(int) для генерации заданного количества байтов семян (например, для инициализации других генераторов случайных чисел):
byte[] seed = random.generateSeed(20);
Новый созданный объект PRNG SecureRandom не инициализирован (за исключением случаев, когда он создан с помощью SecureRandom(byte[])). Первый вызов nextBytes заставит его инициализироваться из специфичного для реализации источника энтропии. Эта самоинициализация не произойдет, если setSeed был вызван ранее.
Объект SecureRandom может быть повторно инициализирован в любое время путем вызова метода reseed или setSeed. Метод reseed считывает входные данные энтропии из источника энтропии для повторной инициализации. Метод setSeed требует, чтобы вызывающая сторона предоставила семена.
Обратите внимание, что reseed может не поддерживаться всеми реализациями SecureRandom.
Некоторые реализации SecureRandom могут принимать параметр SecureRandomParameters в своих методах nextBytes(byte[], SecureRandomParameters) и reseed(SecureRandomParameters) для дальнейшего управления поведением методов.
Примечание: В зависимости от реализации, методы generateSeed, reseed и nextBytes могут блокироваться при сборе энтропии, например, если источником энтропии является /dev/random в различных системах Unix.
Безопасность потоков
ОбъектыSecureRandom безопасны для использования несколькими потоками. - Требования к реализации:
- Поставщик сервисов
SecureRandomможет объявить о своей потокобезопасности, установив атрибут поставщика сервиса атрибут поставщика сервиса "ThreadSafe" в значение "true" при регистрации поставщика. В противном случае, этот класс будет вместо этого синхронизировать доступ к следующим методам реализацииSecureRandomSpi: - С:
- 1.1
- См. также:
Краткое описание вложенных классов
Вложенные классы/интерфейсы, объявленные в интерфейсе java.util.random.RandomGenerator
RandomGenerator.ArbitrarilyJumpableGenerator, RandomGenerator.JumpableGenerator, RandomGenerator.LeapableGenerator, RandomGenerator.SplittableGenerator, RandomGenerator.StreamableGenerator
Краткое описание конструкторов
| Модификатор | Конструктор | Описание |
|---|---|---|
| Создаёт генератор псевдослучайных чисел (RNG), реализующий стандартный алгоритм. |
||
| Создаёт генератор псевдослучайных чисел (RNG), реализующий стандартный алгоритм. |
||
protected |
Создаёт объект SecureRandom. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
byte[] |
generateSeed |
Возвращает заданное количество байтов семян, вычисленных с использованием алгоритма генерации семян, используемого этим классом для собственного посева. |
String |
getAlgorithm() |
Возвращает имя алгоритма, реализованного этим объектом SecureRandom. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанную SecureRandomParameters заявку. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанную SecureRandomParameters заявку. |
static SecureRandom |
getInstance |
Возвращает объект SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанную SecureRandomParameters заявку. |
static SecureRandom |
getInstanceStrong() |
Возвращает объект SecureRandom, выбранный с помощью алгоритмов/поставщиков, указанных в
securerandom.strongAlgorithms Security свойстве. |
SecureRandomParameters |
getParameters() |
Возвращает эффективные параметры SecureRandomParameters для этого экземпляра SecureRandom. |
final Provider |
getProvider() |
Возвращает поставщика этого объекта SecureRandom. |
static byte[] |
getSeed |
Возвращает заданное количество байтов семян, вычисленных с использованием алгоритма генерации семян, используемого этим классом для собственного посева. |
protected final int |
next |
Генерирует целое число, содержащее указанное пользователем количество псевдослучайных битов (выровненных вправо, с ведущими нулями). |
void |
nextBytes |
Генерирует заданное пользователем количество случайных байтов. |
void |
nextBytes |
Генерирует заданное пользователем количество случайных байтов с дополнительными параметрами. |
void |
reseed() |
Перезапускает этот объект SecureRandom с использованием входных данных энтропии, считываемых из его источника энтропии. |
void |
reseed |
Перезапускает этот объект SecureRandom с использованием входных данных энтропии, считываемых из его источника энтропии с дополнительными параметрами. |
void |
setSeed |
Перезапускает этот случайный объект с заданным семенем. |
void |
setSeed |
Перезапускает этот случайный объект, используя восемь байтов, содержащихся в данном long seed. |
String |
toString() |
Возвращает удобочитаемое строковое представление этого объекта SecureRandom. |
Методы, объявленные в классе java.util.Random
doubles, doubles, doubles, doubles, from, ints, ints, ints, ints, longs, longs, longs, longs, nextBoolean, nextDouble, nextFloat, nextGaussian, nextInt, nextInt, nextLong
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Методы, объявленные в интерфейсе java.util.random.RandomGenerator
isDeprecated, nextDouble, nextDouble, nextExponential, nextFloat, nextFloat, nextGaussian, nextInt, nextLong, nextLong
Подробное описание конструкторов
SecureRandom
public SecureRandom()
Этот конструктор проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, который поддерживает алгоритм SecureRandom (ГПСЧ). Если ни один из поставщиков не поддерживает алгоритм ГПСЧ, то возвращается реализация по умолчанию, специфичная для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в спецификации имён стандартных алгоритмов Java Security по спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ.
SecureRandom
public SecureRandom(byte[] seed)
SecureRandom инициализируется указанными байтами. Этот конструктор проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, который поддерживает алгоритм SecureRandom (ГПСЧ). Если ни один из поставщиков не поддерживает алгоритм ГПСЧ, то возвращается реализация по умолчанию, специфичная для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в спецификации имён стандартных алгоритмов Java Security по спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ.
- Параметры:
-
seed- начальное значение. - Исключения:
-
NullPointerException- еслиseedявляетсяnull
SecureRandom
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
SecureRandom. - Параметры:
-
secureRandomSpi- реализацияSecureRandom. -
provider- поставщик.
Подробное описание методов
getInstance
public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException
SecureRandom, который реализует указанный алгоритм генератора псевдослучайных чисел (ГПСЧ). Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, который поддерживает указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание реализации:
- Реализация JDK дополнительно использует свойство
jdk.security.provider.preferredSecurityдля определения предпочтительного порядка поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма ГПСЧ. См. разделSecureRandomв спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ. - Возвращаемое значение:
- новый объект
SecureRandom - Исключения:
-
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализациюProviderдля указанного алгоритма -
NullPointerException- еслиalgorithmявляетсяnull - С момента:
- 1.2
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
SecureRandom, который реализует указанный алгоритм генератора псевдослучайных чисел (ГПСЧ). Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm- имя алгоритма ГПСЧ. См. разделSecureRandomв спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ. -
provider- имя поставщика. - Возвращаемое значение:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если имя поставщика являетсяnullили пустым -
NoSuchAlgorithmException- если реализацияSecureRandomSpiдля указанного алгоритма недоступна от указанного поставщика -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException- еслиalgorithmявляетсяnull - С момента:
- 1.2
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
SecureRandom, который реализует указанный алгоритм генератора псевдослучайных чисел (ГПСЧ). Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от указанного поставщика. Обратите внимание, что указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm- имя алгоритма ГПСЧ. См. разделSecureRandomв спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ. -
provider- поставщик. - Возвращаемое значение:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если указанный поставщик являетсяnull -
NoSuchAlgorithmException- если реализацияSecureRandomSpiдля указанного алгоритма недоступна от указанного объектаProvider -
NullPointerException- еслиalgorithmявляетсяnull - С момента:
- 1.4
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params) throws NoSuchAlgorithmException
SecureRandom, который реализует указанный алгоритм генератора псевдослучайных чисел (ГПСЧ) и поддерживает указанный запрос SecureRandomParameters. Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi от первого поставщика, который поддерживает указанный алгоритм и указанный параметр SecureRandomParameters.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание реализации:
- Реализация JDK дополнительно использует свойство
jdk.security.provider.preferredдля определения предпочтительного порядка поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемого методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма ГПСЧ. См. разделSecureRandomв спецификации имён стандартных алгоритмов Java Security для получения информации о стандартных именах алгоритмов ГПСЧ. -
params- параметрSecureRandomParameters, который должен поддерживать вновь созданный объектSecureRandom. - Возвращаемое значение:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если указанный параметр являетсяnull -
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NullPointerException- еслиalgorithmявляетсяnull - С момента:
- 9
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi из указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Parameters:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParametersподдерживаемый вновь созданным объектомSecureRandom. -
provider- имя поставщика. - Returns:
- новый объект
SecureRandom - Throws:
-
IllegalArgumentException- если имя поставщикаnullили пустое, или paramsnull -
NoSuchAlgorithmException- если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException- еслиalgorithmnull - Since:
- 9
- See Also:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params, Provider provider) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Возвращается новый объект SecureRandom, инкапсулирующий реализацию SecureRandomSpi из указанного поставщика. Указанный поставщик не обязательно должен быть зарегистрирован в списке поставщиков.
- Parameters:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParametersподдерживаемый вновь созданным объектомSecureRandom. -
provider- поставщик. - Returns:
- новый объект
SecureRandom - Throws:
-
IllegalArgumentException- если указанный поставщик или paramsnull -
NoSuchAlgorithmException- если указанный поставщик не поддерживает реализациюSecureRandomSpiдля указанного алгоритма и параметров -
NullPointerException- еслиalgorithmnull - Since:
- 9
- See Also:
getProvider
public final Provider getProvider()
SecureRandom.- Returns:
- поставщик этого объекта
SecureRandom.
getAlgorithm
public String getAlgorithm()
SecureRandom.- Returns:
- имя алгоритма или
unknown, если имя алгоритма определить нельзя. - Since:
- 1.5
toString
public String toString()
SecureRandom.- Overrides:
-
toStringв классеObject - Returns:
- строковое представление
getParameters
public SecureRandomParameters getParameters()
SecureRandomParameters для этого экземпляра SecureRandom. Возвращаемое значение может отличаться от объекта SecureRandomParameters, переданного в метод getInstance, но оно не может изменяться в течение жизненного цикла этого объекта SecureRandom.
Вызывающий метод может использовать возвращаемое значение, чтобы узнать, какие функции поддерживает этот объект SecureRandom.
- Returns:
- эффективные параметры
SecureRandomParameters, илиnull, если параметры не использовались. - Since:
- 9
- See Also:
setSeed
public void setSeed(byte[] seed)
Генератор псевдослучайных чисел (PRNG) SecureRandom не будет автоматически задавать зерно, если setSeed вызван до любых вызовов nextBytes или reseed. Вызывающий метод должен убедиться, что аргумент seed содержит достаточную энтропию для безопасности этого объекта SecureRandom.
- Parameters:
-
seed- зерно. - Throws:
-
NullPointerException- еслиseednull - See Also:
setSeed
public void setSeed(long seed)
long seed. Зерно дополняет, а не заменяет, существующее зерно. Таким образом, повторяющиеся вызовы гарантированно не уменьшают случайность. Генератор псевдослучайных чисел (PRNG) SecureRandom не будет автоматически задавать зерно, если setSeed вызван до любых вызовов nextBytes или reseed. Вызывающий метод должен убедиться, что аргумент seed содержит достаточную энтропию для безопасности этого объекта SecureRandom.
Этот метод определен для совместимости с java.util.Random.
- Overrides:
-
setSeedв классеRandom - Parameters:
-
seed- зерно. - See Also:
nextBytes
public void nextBytes(byte[] bytes)
- Specified by:
-
nextBytesв интерфейсеRandomGenerator - Overrides:
-
nextBytesв классеRandom - Parameters:
-
bytes- массив, который будет заполнен случайными байтами. - Throws:
-
NullPointerException- еслиbytesnull
nextBytes
public void nextBytes(byte[] bytes, SecureRandomParameters params)
- Parameters:
-
bytes- массив, который будет заполнен случайными байтами -
params- дополнительные параметры - Throws:
-
NullPointerException- еслиbytesnull -
UnsupportedOperationException- если реализация подчинённого поставщика не переопределила этот метод -
IllegalArgumentException- еслиparamsnull, некорректен или не поддерживается этим объектомSecureRandom - Since:
- 9
next
protected final int next(int numBits)
java.util.Random, и служит источником случайных бит для всех методов, унаследованных от этого класса (например, nextInt, nextLong, и nextFloat).- Overrides:
-
nextв классеRandom - Parameters:
-
numBits- число псевдослучайных бит для генерации, где0 <= numBits <= 32. - Returns:
- целое число, содержащее указанное количество псевдослучайных бит (справа, с ведущими нулями).
getSeed
public static byte[] getSeed(int numBytes)
Этот метод включён только для обратной совместимости. Вызывающему методу рекомендуется использовать один из альтернативных методов getInstance для получения объекта SecureRandom, а затем вызвать метод generateSeed для получения байтов зерна из этого объекта.
- Parameters:
-
numBytes- количество байт зерна для генерации. - Returns:
- байты зерна.
- Throws:
-
IllegalArgumentException- еслиnumBytesотрицательное - See Also:
generateSeed
public byte[] generateSeed(int numBytes)
- Параметры:
-
numBytes- количество байтов семян для генерации. - Возвращает:
- байты семян.
- Выбрасывает:
-
IllegalArgumentException- еслиnumBytesотрицательно
getInstanceStrong
public static SecureRandom getInstanceStrong() throws NoSuchAlgorithmException
SecureRandom, выбранный с использованием алгоритмов/провайдеров, указанных в свойстве
securerandom.strongAlgorithms Security. В некоторых ситуациях требуются сильные случайные значения, например, при создании высокоценных/долгоживущих секретов, таких как ключи RSA public/private. Чтобы помочь приложениям в выборе подходящей реализации сильного SecureRandom, в дистрибутивах Java имеется список известных реализаций сильных SecureRandom в свойстве securerandom.strongAlgorithms Security.
Каждая реализация платформы Java обязана поддерживать по крайней мере одну реализацию сильного SecureRandom.
- Возвращает:
- реализацию сильного
SecureRandom, как указано в свойствеsecurerandom.strongAlgorithmsSecurity - Выбрасывает:
-
NoSuchAlgorithmException- если алгоритм недоступен - С тех пор:
- 1.8
- См. также:
reseed
public void reseed()
SecureRandom с входными данными энтропии, считанными из его источника энтропии.- Выбрасывает:
-
UnsupportedOperationException- если реализация базового провайдера не переопределила этот метод. - С тех пор:
- 9
reseed
public void reseed(SecureRandomParameters params)
SecureRandom с входными данными энтропии, считанными из его источника энтропии с дополнительными параметрами. Обратите внимание, что энтропия извлекается из источника энтропии. Хотя некоторые данные в params могут содержать энтропию, его основное использование заключается в предоставлении разнообразия.
- Параметры:
-
params- дополнительные параметры - Выбрасывает:
-
UnsupportedOperationException- если реализация базового провайдера не переопределила этот метод. -
IllegalArgumentException- еслиparamsявляетсяnull, некорректным или неподдерживаемым этимSecureRandom - С тех пор:
- 9
© 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/SecureRandom.html