2016-11-29 14 views
0

SecureRandomの特定の起動が「良い」かどうかを確認するために多くの質問がありますが、私は経験則を見つけることができませんでした。"良い" SecureRandomを作成する最良の方法は何ですか?

"良い"ランダムなSecureRandomを作成する最良の方法は何ですか?

// Fast 
// Is it a good random? 
SecureRandom secureRandom = new SecureRandom()? 

// Freezes for a few seconds after being used several times - until getting a random enough seed. 
// See http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom#comment68934647_137212 
// Is it a good random? 
SecureRandom secureRandom = new SecureRandom(SecureRandom.getSeed(20))? 

// Freezes for a very long time. Waited minutes and still no return :(
SecureRandom secureRandom = new SecureRandom.getInstanceStrong()? 

Other? 

答えて

0

特別な要件がない限り、それらはすべて十分です。 getSeed()ため

DOCは言う:

この方法が唯一の後方互換性のために含まれています。呼び出し元 は、代替getInstanceメソッドの1つを使用して SecureRandomオブジェクトを取得し、generateSeedメソッドを に呼び出して、そのオブジェクトからシードバイトを取得することをお勧めします。

もちろん、指示に正確に従うかもしれませんが、私はあなたの他の例の上にポイントがあるのか​​分かりません。

私はどこを覚えていませんが、アルゴリズムを明示的に指定することをお勧めします。だから私は通常やるdo

SecureRandom.getInstance("SHA1PRNG") 

SHA1アルゴリズムのために; PRNGは擬似乱数ジェネレータのためのものです。 SHA1は一般的な暗号化目的で着用されていますが、暗号鍵として使用する場合にも乱数が有効であると言われています。

関連する問題