У BouncyCastle есть служба SecureRandom?

Я пытаюсь создать криптографически безопасные случайные числа с помощью Java и используя следующий раздел кода для создания объекта SecureRandom для просмотра его провайдера и алгоритма:

Provider prov=new org.spongycastle.jce.provider.BouncyCastleProvider(); Security.insertProviderAt(prov, 1); SecureRandom sr=new SecureRandom(); srProvider=sr.getProvider().toString(); srAlgorithm=sr.getAlgorithm(); 

(Губчатый замок – это надуманный эквивалент замка для андроида, сделанный Роберто Тилей – https://github.com/rtyley )

Когда я показываю провайдера и алгоритм, он показывает: Crypto version 1.0 SHA1PRNG

Меня удивляет то, что поставщик не является Spongycastle, даже если он установлен в качестве первого поставщика кода. Я хотел бы спросить вас: а) Не включен ли SecureRandom в Spongy Castle (или Bouncy Castle). B) Что такое «Crypto version 1.0» (я имею в виду, это поставщик Sun JCE или что?)

Благодаря…

Rubi

Предполагая, что вы работаете на Android (вы не указали это явно). Bouncy Castle не обеспечивает реализацию SecureRandom . «Crypto» – это Apache Harmony (на котором основывается основной код Java на основе Java) провайдера JCE. В Android нет кода Sun JCE. BTW, поставщик «Crypto» предоставляет только SHA1PRNG (RNG), SHA-1 (хеш) и SHA1 с помощью DSA (подпись). Все остальное предоставляется либо Bouncy Castle, либо поставщиком OpenSSL.

Вопрос: Почему, по вашему мнению, вам нужна реализация SecureRandom из Bouncy / Spongy Castle?

Bouncy Castle действительно предоставляет набор генераторов псевдослучайных чисел (PRNG). Есть много имен для PRNG; NIST называет их детерминированными генераторами случайных битов (DRBG). Однако они доступны только в «Легком» API Bouncy Castle, в пакете org.bouncycastle.crypto.prng .

Тем не менее, Bouncy Castle – это программная реализация криптографических алгоритмов. Это означает, что он не содержит источника энтропии . Энтропия не может генерироваться программным обеспечением, поскольку сами алгоритмы программного обеспечения детерминированы. Поэтому, даже если поставщик Bouncy Castle зарегистрирует некоторые из генераторов в своем провайдере "BC" (или Spongy provider for Android), тогда ему все равно придется полагаться на тот же источник энтропии, что и реализация платформы SecureRandom .

Поскольку источник энтропии, вероятно, является виновником большинства проблем с производительностью, вы не должны ожидать чудес в замке Bouncy относительно эффективности генерации случайных чисел.

В настоящее время (v1.54) поставщик Bouncy Castle не регистрирует никаких реализаций SecureRandom вообще, так что есть.