Belgelere göre , SecureRandom tarafından kullanılan farklı algoritmalar tercih sırasına göre:
- Çoğu * NIX sisteminde
- NativePRNG
- SHA1PRNG
- NativePRNGBlocking
- NativePRNGNonBlocking
- Windows sistemlerinde
- SHA1PRNG
- Windows PRNG
Linux'u sorduğunuzdan, Windows uygulamasını ve ayrıca kendiniz yüklemediğiniz sürece sadece Solaris'te bulunan SunPKCS11'i görmezden geliyorum - ve sonra bunu sormazsınız.
Aynı belgelere göre, bu algoritmaların kullandığı
SHA1PRNG
İlk tohumlama şu anda sistem özellikleri ve java.security entropi toplama cihazı kombinasyonu ile yapılmaktadır.
NativePRNG
nextBytes() kullanır /dev/urandom
generateSeed()kullanır/dev/random
NativePRNGB kilitleme
nextBytes() ve generateSeed()kullanım/dev/random
NativePRNGNonBlokalama
nextBytes() ve generateSeed()kullanım/dev/urandom
Bu, kullanırsanız SecureRandom random = new SecureRandom(), genellikle NativePRNG olan bir tane bulana kadar bu listeye iner. Ve bu, kendisini tohumladığı /dev/random(veya açıkça bir tohum oluşturursanız kullanır), daha sonra bir /dev/urandomsonraki bayt, ints, double, booleans, neyin var olduğunu almak için kullanır .
Yana /dev/random(o entropi havuzunda yeterli entropi belli olmadan blokları) engelliyor, bu performansı engelleyebilir.
Bunun bir çözümü yeterli entropi üretmek için bir şey kullanmaktır, /dev/urandombunun yerine başka bir çözüm kullanmaktır . Bunu tüm jvm için ayarlayabilirsiniz, ancak daha iyi bir çözüm SecureRandomkullanarak bu özel örneği için yapıyor SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking"). NativePRNGNonBlocking varsa bu yöntemin bir NoSuchAlgorithmException özel durumu atabileceğini unutmayın, bu nedenle varsayılana geri dönmeye hazır olun.
SecureRandom random;
try {
random = SecureRandom.getInstance("NativePRNGNonBlocking");
} catch (NoSuchAlgorithmException nsae) {
random = new SecureRandom();
}
Ayrıca diğer * nix sistemlerde /dev/urandomfarklı davranabileceğini unutmayın .
Mı /dev/urandomrastgele yeter?
Geleneksel bilgelik, sadece /dev/randomyeterince rasgele. Ancak, bazı sesler farklıdır. In "Kullanım SecureRandom Hakkı Yolu" ve "/ dev / urandom hakkındaki mitler" , o kadar ileri sürülmektedir /dev/urandom/sadece iyi gibidir.
Bilgi Güvenliği yığınındaki kullanıcılar bunu kabul eder . Temel olarak, sormanız gerekiyorsa, /dev/urandomamacınız için iyidir.