Класс SecureRandom
- Все реализованные интерфейсы:
-
Serializable,RandomGenerator
public class SecureRandom extends Random
Криптографически сильный генератор случайных чисел минимально соответствует статистическим тестам на генераторы случайных чисел, указанным в FIPS 140-2, Требования к безопасности для криптографических модулей, раздел 4.9.1. Кроме того, SecureRandom должен генерировать недетерминированный вывод. Поэтому любой материал-семя, переданный объекту SecureRandom, должен быть непредсказуемым, и все выходные последовательности SecureRandom должны быть криптографически надёжными, как описано в RFC 4086: Требования к случайности для безопасности.
Многие реализации SecureRandom имеют вид псевдогенератора случайных чисел (ПГШ, также известного как генератор детерминированных случайных битов или ДГСБ), что означает, что они используют детерминированный алгоритм для получения псевдослучайной последовательности из случайного семени. Другие реализации могут генерировать истинные случайные числа, а другие могут использовать комбинацию обоих методов.
Вызывающий получает экземпляр 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);
Новый созданный объект ПГШ 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, выбранный с использованием алгоритмов/провайдеров, указанных в свойстве
securerandom.strongAlgorithms Security. |
static SecureRandom |
getInstanceStrong() |
Возвращает эффективные параметры SecureRandomParameters для этого экземпляра SecureRandom. |
SecureRandomParameters |
getParameters() |
Возвращает поставщика этого объекта SecureRandom. |
final Provider |
getProvider() |
Возвращает заданное количество байтов семян, вычисленных с использованием алгоритма генерации семян, используемого этим классом для инициализации. |
static byte[] |
getSeed |
Генерирует целое число, содержащее указанное пользователем количество псевдослучайных бит (выровнены по правому краю, с ведущими нулями). |
protected final int |
next |
Генерирует указанное пользователем количество случайных байтов. |
void |
nextBytes |
Генерирует указанное пользователем количество случайных байтов с дополнительными параметрами. |
void |
nextBytes |
Перезапускает этот объект SecureRandom с вводом энтропии, считанным из его источника энтропии. |
void |
reseed() |
Перезапускает этот объект SecureRandom с вводом энтропии, считанным из его источника энтропии, с дополнительными параметрами. |
void |
reseed |
Перезапускает этот случайный объект с заданным семенем. |
void |
setSeed |
Перезапускает этот случайный объект, используя восемь байтов, содержащихся в данном long seed. |
void |
setSeed |
Возвращает строковое представление этого объекта SecureRandom, понятное для человека. |
Методы, объявленные в классе java.util.Random
doubles, doubles, doubles, doubles, 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, encapsulating реализацию SecureRandomSpi из первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается значение по умолчанию, специфичное для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG.
SecureRandom
public SecureRandom(byte[] seed)
SecureRandom инициализируется заданными байтами. Этот конструктор проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращает новый объект SecureRandom, encapsulating реализацию SecureRandomSpi из первого поставщика, поддерживающего алгоритм SecureRandom (RNG). Если ни один из поставщиков не поддерживает алгоритм RNG, возвращается значение по умолчанию, специфичное для реализации.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
См. раздел SecureRandom в Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG.
- Параметры:
-
seed- seed.
SecureRandom
protected SecureRandom(SecureRandomSpi secureRandomSpi, Provider provider)
SecureRandom. - Параметры:
-
secureRandomSpi- реализацияSecureRandom. -
provider- поставщик.
Подробное описание методов
getInstance
public static SecureRandom getInstance(String algorithm) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращает новый объект SecureRandom, encapsulating реализацию SecureRandomSpi из первого поставщика, поддерживающего указанный алгоритм.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание реализации:
- Реализация JDK дополнительно использует свойство
jdk.security.provider.preferredSecurityдля определения порядка предпочтительных поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
NoSuchAlgorithmException- если ни один поставщик не поддерживает реализациюProviderдля указанного алгоритма -
NullPointerException- еслиalgorithmявляетсяnull - С:
- 1.2
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, String provider) throws NoSuchAlgorithmException, NoSuchProviderException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). Возвращает новый объект SecureRandom, encapsulating реализацию SecureRandomSpi от указанного поставщика. Указанный поставщик должен быть зарегистрирован в списке поставщиков безопасности.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
provider- имя поставщика. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если имя поставщикаnullили пустое -
NoSuchAlgorithmException- если реализацияSecureRandomSpiдля указанного алгоритма недоступна от указанного поставщика -
NoSuchProviderException- если указанный поставщик не зарегистрирован в списке поставщиков безопасности -
NullPointerException- еслиalgorithmявляетсяnull - С:
- 1.2
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, Provider provider) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG). Возвращает новый объект SecureRandom, encapsulating реализацию SecureRandomSpi из указанного объекта Provider. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке поставщиков.
- Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
provider- поставщик. - Возвращает:
- новый объект
SecureRandom - Исключения:
-
IllegalArgumentException- если указанный поставщикnull -
NoSuchAlgorithmException- если реализацияSecureRandomSpiдля указанного алгоритма недоступна от указанного объектаProvider -
NullPointerException- еслиalgorithmявляетсяnull - С:
- 1.4
- См. также:
getInstance
public static SecureRandom getInstance(String algorithm, SecureRandomParameters params) throws NoSuchAlgorithmException
SecureRandom, реализующий указанный алгоритм генератора псевдослучайных чисел (RNG) и поддерживающий указанный запрос SecureRandomParameters. Этот метод проходит по списку зарегистрированных поставщиков безопасности, начиная с наиболее предпочтительного. Возвращает новый объект SecureRandom, encapsulating реализацию SecureRandomSpi из первого поставщика, поддерживающего указанный алгоритм и указанные SecureRandomParameters.
Обратите внимание, что список зарегистрированных поставщиков можно получить с помощью метода Security.getProviders().
- Примечание реализации:
- Реализация JDK дополнительно использует свойство
jdk.security.provider.preferredдля определения порядка предпочтительных поставщиков для указанного алгоритма. Это может отличаться от порядка поставщиков, возвращаемых методомSecurity.getProviders(). - Параметры:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации Java Security Standard Algorithm Names для получения информации о стандартных именах алгоритмов RNG. -
params-SecureRandomParametersthe newly createdSecureRandomobject must support. - Возвращает:
- новый объект
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 для получения информации об именах стандартных алгоритмов 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 из указанного объекта Provider объекта. Обратите внимание, что указанный объект Provider не обязательно должен быть зарегистрирован в списке провайдеров.
- Parameters:
-
algorithm- имя алгоритма RNG. См. разделSecureRandomв Спецификации имен стандартных алгоритмов Java Security для получения информации об именах стандартных алгоритмов 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- значение-семя. - See Also:
setSeed
public void setSeed(long seed)
long seed. Значение-семя дополняет, а не заменяет, существующее значение-семя. Таким образом, повторяющиеся вызовы гарантируют, что случайность не уменьшается. Этот метод определён для совместимости с 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- массив, который будет заполнен случайными байтами.
nextBytes
public void nextBytes(byte[] bytes, SecureRandomParameters params)
- Parameters:
-
bytes- массив, который будет заполнен случайными байтами -
params- дополнительные параметры - Throws:
-
NullPointerException- еслиbytesравно null -
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)
- Parameters:
-
numBytes- количество байтов-семян для генерации. - Returns:
- байты-семя.
- Throws:
-
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, 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/SecureRandom.html