2016-10-27 5 views
1

ファイル暗号化にN回呼び出される方法があります。この方法で が、これは私が塩を作成する方法である:Java SecureRandom.getInstanceとnextBytesを/ dev/randomで複数回ブロックすることはブロックされますか?

public void method(...){ 
     ... 
     byte[] salt = new byte[8]; 
     SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG", 
      "SUN"); 
     secureRandom.nextBytes(salt); 
     ... 
} 

私はあなたがにnextBytesを呼び出したときSecureRandomオブジェクトが播種されていることを読んで、唯一の/ dev /ランダム以来、あなたがにnextBytesを呼び出して、非常に最初のタイムをブロックします。クラスの変数seedGeneratorは静的です(https://www.cigital.com/blog/securerandom-implementation/)。

SecureRandom.getInstance(String algorithm、String provider)のJavaDocsには、次のように書かれています。 返されるSecureRandomオブジェクトは、シードされていません。返されたオブジェクトをシードするには、setSeedメソッドを呼び出します。 setSeedが呼び出されていない場合、nextBytesを最初に呼び出すと、SecureRandomオブジェクトが強制的にシードされます。 setSeedが以前に呼び出された場合、この自己シードは発生しません。

私はSecureRandomインスタンスの作成とnextBytesの呼び出しを続けていると私のコードは/ dev/randomにブロックされますか?

ありがとうございます!

答えて

0

/dev/randomの最初の呼び出しは、十分なエントロピーが利用できるようになるまでブロックすることがあります。つまり、手動でシードしないと、nextBytes()の最初の呼び出しがブロックされる可能性があります。 /dev/randomの最初の読み込みが成功すると、/dev/randomの次の読み込みが失敗するようになるため、SecureRandomの実装が何であっても、エントロピーが取得されてもそれが消えないため、後続の呼び出しはブロックされません。エントロピーの欠如)。

関連する問題