2011-12-31 7 views
1

javaでSecureRandomを使用してランダムな整数を生成したいとします。安全なランダムをJavaでシードする

private SecureRandom myRandom = new SecureRandom(); 
private int myInt = 10; 
int myResults; 
myResults = myRandom.nextInt(myInt); 

私は、シーディングとは、乱数ジェネレータの開始点を指定することを意味します。 Shoud私はランダム化を確実にするために、繰り返しごとに乱数ジェネレータを再シードしましたか?

答えて

3

いいえ.SecureRandomは、初めてシードを提供しない場合にはシードを生成し、擬似ランダムジェネレータを使用している場合は、その後の乱数は予測できません。

実際には、再시드しようとすると、生成された乱数のセキュリティが低下する可能性があります。新しいシードをどこかから取得しなければならない可能性がありますSecureRandomの実装と同じようにランダム性があります)。

あなたは乱数の数のためのSecureRandomを使用している場合https://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/によると、あなたが定期的にそれを再シードする必要があり、そう

どちらか定期的に既存にjava.security.SecureRandom インスタンスを捨てます新しいものを作成します。これにより、新しいシードである を持つ新しいインスタンスが生成されます。

java.security.SecureRandom.setSeed(java.security.SecureRandom.generateSeed(int))を呼び出して、定期的にPRNGシードに新しいランダムな素材を追加します。

は、すべての呼び出しの後にそれを再シードします。 SecureRandomのAPIは、Java 8で明らかにされる予定である

注こと:http://openjdk.java.net/jeps/123

+0

この答えは単純に間違っています。再シーディングは、場合によってはより安全です。 https://www.cigital.com/justice-league-blog/2009/08/14/proper-use-of-javas-securerandom/ – Jacob

+0

@ジャカブ入力のおかげで...私は私の答えを更新しました – artbristol

+0

記事引用はhttps://www.synopsys.com/blogs/software-security/proper-use-of-javas-securerandom/に移動しました –

関連する問題