ตัวอย่างการเพาะ / dev / urandom จาก / dev / random บ่อยแค่ไหน?


15

นอกจากว่าฉันสับสนโดยสิ้นเชิงและไม่ทำเช่นนั้น

ฉันต้องการทราบว่า / dev / urandom จะได้รับเพิ่มขึ้นเอนโทรปีหรือไม่ถ้าฉันใช้ฮาร์ดแวร์ RNG และเสียบเอนโทรปีของมันลงใน / dev / random

ดังนั้นเพื่อใช้ถ้อยคำใหม่ถ้าฉันต้องเพิ่มเอนโทรปีของ / dev / random โดย X bits / วินาที (นั่นคือ / dev / random หลังจากฉีดให้คุณลอง X bits / วินาที) ซึ่งจะเพิ่มการถ่ายโอนเอนโทรปีไปยัง urandom หรือไม่


2
ในขณะที่ไม่เกี่ยวข้องกันมาก2uo.de/myths-about-urandomและblog.cloudflare.com/ (โดยเฉพาะกราฟที่blog.cloudflare.com/content/images/image01.png ) อาจเป็นประโยชน์สำหรับการอ่าน
1686

หากคุณมีฮาร์ดแวร์จริง RNG คุณสามารถใช้มันได้โดยตรง
Michael Hampton

คำตอบ:


25

มันไม่ถูกต้องจริงๆจะบอกว่าตัวอย่างจาก/dev/urandom /dev/randomแต่ทั้งสองพูลนั้นได้รับการสนับสนุนจากแหล่งข้อมูลเอนโทรปีเดียวกัน เมื่อการนับเอนโทรปีของพูลถึงศูนย์พวกเขาจะกลับมาจากพูลการป้อนข้อมูลที่ใช้ร่วมกัน ดังนั้นถ้าคุณให้เอนโทรปีของเคอร์เนลในทางใดทางหนึ่ง, มันสามารถใช้มันสำหรับอย่างใดอย่างหนึ่ง/dev/randomหรือ/dev/urandom, ขึ้นอยู่กับว่าได้รับการอ่าน

อย่างไรก็ตาม/dev/urandom ยังมีข้อ จำกัด ด้านอัตราในการที่สามารถขอให้ส่งข้อมูลอีกครั้งได้บ่อยครั้ง โดยค่าเริ่มต้นจะสามารถดำเนินการใหม่ทุก ๆ 60 วินาที

ไม่มีสิ่งใดที่เป็นเรื่องจริงในทางปฏิบัติเพราะตราบใดที่พูลนั้นเริ่มต้นด้วยอย่างน้อย 128 บิตหรือมากกว่านั้นของเอนโทรปีการทำนายผลลัพธ์ใด ๆ ไม่เพียง แต่ต้องเห็นผลลัพธ์ก่อนหน้านี้เท่านั้น แต่ยังทำลายอัลกอริทึมที่ใช้ด้วย ของ SHA-1 ( ซึ่งยังไม่เสียหาย )



4

ใน Linux ข้อมูลใด ๆ ที่เขียนไปยัง / dev / random หรือ / dev / urandom จะถูกคัดลอกไปยังพูลการบล็อก (แหล่งที่มาของการสุ่มสำหรับ / dev / random) และพูลที่ไม่บล็อก (แหล่งที่มาของการสุ่มสำหรับ / dev / urandom)

เพียงแค่ดูที่ฟังก์ชั่นrandom_write

แต่ข้อมูลที่เขียนไปยัง / dev / random จะไม่ถูกนับโดยตัวประมาณค่าเอนโทรปีภายใน (หลังจากทั้งหมดฝ่ายตรงข้ามในพื้นที่บางรายอาจพยายามเปลี่ยนเส้นทาง / dev / ศูนย์หรือแหล่งอื่น ๆ ที่ไม่มีการสุ่มสูงถึง / dev / Random) ดังนั้นหากคุณมีปัญหา ด้วยการปิดกั้น / dev / สุ่มเพียงแค่เขียนถึง / dev / สุ่มไม่ได้ช่วย

ใน Linux เขียนถึง / dev / random (หรือ / dev / urandom ไม่แตกต่างกัน) แต่อ่านเสมอจาก / dev / urandom (เมื่อมีการ seed - จริง ๆ แล้ววิธีที่ดีที่สุดคือการใช้การเรียกระบบใหม่getrandom )

ฉันไม่รู้ว่ามันทำงานอย่างไรใน Unices อื่น ๆ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.