Есть ли у 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 версия 1.0 SHA1PRNG
Что меня удивляет, так это то, что провайдер не Spongycastle, даже если он установлен как первый провайдер в коде. Я хотел бы спросить вас: а) Не реализован ли SecureRandom в Spongy Castle (или Bouncy Castle). б) Что именно представляет собой "Crypto version 1.0" (я имею в виду провайдера Sun JCE или что?)
Спасибо...
Rubi
2 ответа
Предполагая, что вы работаете на Android (вы не указали это явно). Надувной замок не обеспечивает SecureRandom
реализация. Crypto - это поставщик JCE Apache Harmony (на котором основана основная часть Java-кода Android). В Android нет кода Sun JCE. Кстати, провайдер Crypto предоставляет только реализации SHA1PRNG (RNG), SHA-1 (хэш) и SHA1withDSA (подпись). Все остальное предоставляется либо 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 для Android), то он все равно должен полагаться на тот же источник энтропии, что и платформа SecureRandom
реализация.
Поскольку источник энтропии, вероятно, является причиной большинства проблем с производительностью, не следует ожидать чудес Bouncy Castle в отношении эффективности генерации случайных чисел.
В настоящее время (v1.54) поставщик Bouncy Castle не регистрирует ни одного SecureRandom
реализации вообще, так что есть.