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/urandom
sonraki 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/urandom
bunun yerine başka bir çözüm kullanmaktır . Bunu tüm jvm için ayarlayabilirsiniz, ancak daha iyi bir çözüm SecureRandom
kullanarak 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/urandom
farklı davranabileceğini unutmayın .
Mı /dev/urandom
rastgele yeter?
Geleneksel bilgelik, sadece /dev/random
yeterince 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/urandom
amacınız için iyidir.