ตามเอกสารประกอบอัลกอริทึมที่แตกต่างกันที่ใช้โดย SecureRandom คือตามลำดับของการตั้งค่า:
- บนระบบ * NIX ส่วนใหญ่
- NativePRNG
- SHA1PRNG
- NativePRNGBlocking
- NativePRNGNonBlocking
- บนระบบ Windows
- SHA1PRNG
- ใช้ Windows PRNG
เมื่อคุณถามเกี่ยวกับ Linux ฉันจะเพิกเฉยต่อการติดตั้ง Windows และ SunPKCS11 ซึ่งมีเฉพาะใน Solaris เท่านั้นเว้นแต่คุณจะติดตั้งด้วยตัวคุณเองแล้วคุณจะไม่ถามคำถามนี้
ตามเอกสารเดียวกันเหล่านั้นขั้นตอนวิธีการเหล่านี้ใช้คืออะไร
SHA1PRNG การ
เริ่มต้นเริ่มต้นทำได้ในขณะนี้ผ่านการรวมกันของคุณสมบัติของระบบและอุปกรณ์รวบรวมเอนโทรปีของ java.security
NativePRNG
nextBytes()ใช้การ/dev/urandom
generateSeed()ใช้งาน/dev/random
NativePRNGBlocking
nextBytes()และการgenerateSeed()ใช้งาน/dev/random
NativePRNGNon การล็อค
nextBytes()และการgenerateSeed()ใช้งาน/dev/urandom
ซึ่งหมายความว่าถ้าคุณใช้SecureRandom random = new SecureRandom()มันจะลงรายการนั้นจนกว่าจะพบรายการที่ใช้งานได้ซึ่งโดยทั่วไปจะเป็น NativePRNG และนั่นหมายความว่ามันเมล็ดตัวเองจาก/dev/random(หรือใช้ว่าถ้าคุณสร้างเมล็ดอย่างชัดเจน) จากนั้นใช้/dev/urandomสำหรับการรับไบต์ถัดไป, ints, double, booleans สิ่งที่มีคุณ
เนื่องจาก/dev/randomกำลังบล็อก (จะบล็อกจนกว่าจะมีเอนโทรปีเพียงพอในพูลเอนโทรปี) ซึ่งอาจขัดขวางประสิทธิภาพการทำงาน
วิธีแก้ปัญหาหนึ่งที่ใช้สิ่งที่ต้องการได้สร้างเอนโทรปีเพียงพอโซลูชั่นอื่นใช้/dev/urandomแทน ในขณะที่คุณสามารถตั้งค่าว่าสำหรับ JVM ทั้งเป็นทางออกที่ดีจะทำมันเช่นนี้เฉพาะโดยใช้SecureRandom SecureRandom random = SecureRandom.getInstance("NativePRNGNonBlocking")โปรดทราบว่าวิธีการที่สามารถโยน NoSuchAlgorithmException ถ้า NativePRNGNonBlocking ดังนั้นได้เตรียมที่จะย้อนกลับไปเริ่มต้น
SecureRandom random;
try {
random = SecureRandom.getInstance("NativePRNGNonBlocking");
} catch (NoSuchAlgorithmException nsae) {
random = new SecureRandom();
}
นอกจากนี้ทราบว่าในระบบระวัง * อื่น ๆอาจจะทำงานแตกต่างกัน/dev/urandom
คือ/dev/urandomสุ่มเพียงพอหรือไม่
ภูมิปัญญาดั้งเดิมมีเพียงว่ามัน/dev/randomสุ่มพอ อย่างไรก็ตามเสียงบางอย่างแตกต่างกัน ใน"วิธีที่ถูกต้องในการใช้ SecureRandom"และ"Myths about / dev / urandom"เป็นที่ถกเถียงกันอยู่ว่า/dev/urandom/ดี
ผู้ใช้มากกว่าในการรักษาความปลอดภัยข้อมูลสแต็คเห็นด้วยกับที่ โดยทั่วไปถ้าคุณต้องถาม/dev/urandomก็ดีสำหรับวัตถุประสงค์ของคุณ