8

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();

(海綿状の城は、Roberto Tyley によって作成された android の弾む城と同等です - https://github.com/rtyley )

プロバイダーとアルゴリズムを表示すると、Crypto version 1.0 SHA1PRNG が表示されます。

驚いたことに、コードの最初のプロバイダーとしてインストールされていても、プロバイダーは Spongycastle ではありません。お聞きしたいのですが、a) Spongy Castle (または Bouncy Castle) には SecureRandom が実装されていませんか。b) 「Crypto バージョン 1.0」とは正確には何ですか (つまり、Sun JCE プロバイダーですか?)

ありがとう...

ルビ

4

2 に答える 2

6

Bouncy Castle疑似乱数ジェネレーター (PRNG)のセットを提供します。PRNG には多くの名前があります。NIST は、それらを決定論的ランダム ビット ジェネレーター (DRBG) と呼んでいます。ただし、パッケージ内の Bouncy Castle の「軽量」API でのみ使用できますorg.bouncycastle.crypto.prng

ただし、Bouncy Castle は暗号化アルゴリズムのソフトウェアのみの実装です。これは、エントロピーのソースが含まれていないことを意味します。ソフトウェアアルゴリズム自体は決定論的であるため、エントロピーはソフトウェアだけでは生成できません。そのため、Bouncy Castle プロバイダーがそのプロバイダー (または Android の Spongy プロバイダー) にジェネレーターの一部を登録したとしても、プラットフォームの実装"BC"と同じエントロピー ソースに依存する必要があります。SecureRandom

エントロピー ソースがほとんどのパフォーマンスの問題の原因である可能性が高いため、乱数生成効率に関して Bouncy Castle の驚異を期待するべきではありません。

現在 (v1.54)、Bouncy Castle プロバイダーはSecureRandom実装をまったく登録していません。

于 2016-06-20T15:21:50.980 に答える
4

Androidで実行していると仮定します(これを明示的に述べていませんでした)。SecureRandomBouncy Castle は実装を提供しません。「Crypto」は、Apache Harmony (Android のコア Java コードのほとんどがこれに基づいている) JCE プロバイダーです。Android には Sun JCE コードはありません。ところで、「Crypto」プロバイダーは、SHA1PRNG (RNG)、SHA-1 (ハッシュ)、および SHA1withDSA (署名) 実装のみを提供します。それ以外はすべて、Bouncy Castle または OpenSSL ベースのプロバイダーによって提供されます。

SecureRandom質問: なぜBouncy/Spongy Castleの実装が必要だと思いますか?

于 2012-04-21T16:46:08.647 に答える