ทั้งคู่/dev/random
และ/dev/urandom
ใช้ "เอนโทรปีพูล" เมื่อพูลหมด/dev/random
รอให้เติมใหม่ซึ่งต้องมีพฤติกรรมของระบบการตรวจสอบ (อินพุตคีย์บอร์ด, การเคลื่อนไหวของเมาส์ ฯลฯ ) ในขณะที่/dev/urandom
จะให้ข้อมูลสุ่มหลอกคุณ /dev/random
มีคุณภาพสูงกว่าในทางทฤษฎี แต่/dev/urandom
เกือบจะดีพอสำหรับวัตถุประสงค์ของคุณ (แต่/dev/urandom
อาจจะช้ากว่าวิธีอื่น ๆ เร็วกว่า แต่คุณภาพต่ำกว่าเครื่องกำเนิดไฟฟ้าอาจดีพอสำหรับการลบฮาร์ดไดรฟ์ไม่ชัดเจนว่าผู้โจมตีจะได้รับประโยชน์จากการรู้ลำดับที่จะเกิดขึ้นหรือ ตัวเลขสุ่มนั้นดีกว่าสำหรับจุดประสงค์นี้มากกว่าลำดับเช่น 0, 1, 2, 3, 4, .... )
การอ้างถึงrandom(4)
หน้าคน:
หากคุณไม่แน่ใจเกี่ยวกับว่าคุณควรใช้/dev/random
หรือ
/dev/urandom
ไม่คุณอาจต้องการใช้อันหลัง ตามกฎทั่วไป/dev/urandom
ควรใช้สำหรับทุกสิ่งยกเว้นคีย์ GPG / SSL / SSH ที่มีอายุการใช้งานยาวนาน
UPDATE : หน้า `แบบสุ่ม (4) คนได้รับการปรับปรุงตั้งแต่ฉันเขียนมา ตอนนี้พูดว่า:
/dev/random
อินเตอร์เฟซที่ถือเป็นมรดกอินเตอร์เฟซและ
/dev/urandom
เป็นที่ต้องการและเพียงพอในกรณีการใช้งานทั้งหมดที่มีข้อยกเว้นของการใช้งานที่ต้องการสุ่มในช่วงเวลาบูตต้น; สำหรับแอปพลิเคชันเหล่านี้getrandom(2)
จะต้องใช้แทนเพราะจะบล็อกจนกว่าจะเริ่มต้นพูลเอนโทรปี
ดูเพิ่มเติมได้ที่ " Myths about / dev / urandom " โดย Thomas Hühn
แต่/dev/urandom
แม้ว่ามันจะไม่ปิดกั้น แต่ก็มีแนวโน้มที่จะช้าเกินไปหากคุณต้องการสร้างข้อมูลจำนวนมาก ทำการวัดบนระบบของคุณก่อนที่จะลอง
แก้ไข:ต่อไปนี้เป็นการพูดนอกเรื่องเกี่ยวกับตัวเลขสุ่ม "จริง" กับตัวเลขสุ่มหลอก หากสิ่งที่คุณสนใจคือคำตอบที่ใช้งานได้จริงคุณสามารถหยุดอ่านได้ทันที
ฉันดูเหมือนอ้างว่า (รวมถึงคำตอบอื่น ๆ ที่นี่) ซึ่ง/dev/random
ใช้ตัวสร้างตัวเลขสุ่ม "จริง" ซึ่งตรงข้ามกับตัวสร้างตัวเลขสุ่มหลอก (PRNG) ตัวอย่างเช่นบทความ Wikipediaทำให้การเรียกร้องดังกล่าว ฉันไม่เชื่อว่าถูกต้อง มีการพูดถึงที่นี่ซึ่งอ้างถึงตัวสร้างหมายเลขสุ่มฮาร์ดแวร์ แต่ฉันไม่เห็นหลักฐานว่า/dev/random
โดยปกติแล้วจะใช้อุปกรณ์ดังกล่าวหรือคอมพิวเตอร์ทั่วไปที่มีอุปกรณ์ดังกล่าว พวกเขาแตกต่างจาก PRNG เช่นrand()
ฟังก์ชั่นC เนื่องจากพวกเขาไม่ได้กำหนดค่าเนื่องจากพวกเขาเก็บเกี่ยวเอนโทรปีจากแหล่งที่ไม่สามารถคาดเดาได้จริง
ฉันจะบอกว่ามีตัวสร้างตัวเลข "สุ่ม" สามคลาส:
กำหนด PRNGs เช่นrand()
ฟังก์ชั่นของ C ซึ่งใช้อัลกอริทึมในการสร้างลำดับซ้ำที่มีคุณสมบัติทางสถิติของ (มากหรือน้อย) คุณสมบัติทางสถิติของลำดับสุ่มอย่างแท้จริง สิ่งเหล่านี้อาจดีพอสำหรับเกม (ให้วิธีการเพาะที่ดี) และจำเป็นสำหรับแอปพลิเคชันที่ต้องมีการทำซ้ำ แต่ไม่เหมาะสำหรับการเข้ารหัส
เครื่องปั่นไฟชอบ/dev/random
และ/dev/urandom
เก็บเกี่ยวเอนโทรปีจากแหล่งที่คาดเดาไม่ได้เช่นกิจกรรม I / O (นี่คือเหตุผลที่การห้ำหั่นบนแป้นพิมพ์หรือการเลื่อนเมาส์อาจทำให้เกิด/dev/random
ข้อมูลมากขึ้น) มันไม่ชัดเจน (สำหรับฉัน) ว่าสิ่งเหล่านี้เป็นไปตามคำจำกัดความของ PRNG หรือไม่ (ฉันเคยเห็นคำจำกัดความที่บอกว่า PRNG นั้นเป็นสิ่งที่กำหนด) แต่ก็ไม่ได้เป็นเครื่องกำเนิดตัวเลขสุ่ม
ตัวสร้างหมายเลขสุ่มฮาร์ดแวร์ที่คาดเดาไม่ได้ทางร่างกายแม้จะมีความรู้ที่สมบูรณ์เกี่ยวกับสถานะเริ่มต้นและยังใช้เทคนิคทางคณิตศาสตร์เพื่อให้แน่ใจว่าคุณสมบัติทางสถิติที่ถูกต้อง