/dev/random
ใช้การกำหนดเวลาของเคอร์เนล interupts เพื่อเพิ่มไปยังกลุ่มเอนโทรปี entropy_count
ปริมาณของเอนโทรปีในสระว่ายน้ำที่มีการติดตามในชื่อตัวแปร
random.c
นี่คือข้อมูลที่เกี่ยวข้องของรหัสจาก เพราะมันหมายถึงเวลา (jiffies ฉันคิด) ระหว่างสอง interupts สุดท้ายในตัวแปรและความแตกต่างในสันดอนเป็นdelta
delta2
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
ดูเหมือนว่าการประมาณค่าของเอนโทรปีที่เพิ่มเข้ามานั้นเป็นพื้น (ไม่ใช่เพดานเพราะบิตเริ่มต้นก่อนห่วง) ของฐาน 2 ลอการิทึมของเดลต้า สิ่งนี้ทำให้เกิดความรู้สึกเป็นสัญชาตญาณแม้ว่าฉันจะไม่แน่ใจว่าจำเป็นต้องใช้สมมติฐานใดบ้างเพื่อทำให้ถูกต้องอย่างเป็นทางการ
ดังนั้นคำถามแรกของฉันคือ"อะไรคือเหตุผลที่อยู่เบื้องหลังการประมาณการนี้"
delta = MIN(delta, delta2) ...
คำถามที่สองของฉันเป็นเรื่องเกี่ยวกับ สิ่งนี้ทำอะไร เหตุใดจึงใช้เดลต้าขั้นต่ำนี้และอันสุดท้าย ฉันไม่รู้ว่านี่ควรจะทำอะไร - บางทีมันอาจทำให้การประมาณการดีขึ้นหรืออาจจะอนุรักษ์มากกว่าเดิม
แก้ไข:ฉันพบกระดาษที่ระบุค่าประมาณแต่มันก็ไม่ได้ให้เหตุผลที่สมเหตุสมผล (แม้ว่ามันจะร่างเงื่อนไขที่ไม่เป็นทางการบางอย่างที่ตัวประมาณควรตรงตาม)
แหล่งข้อมูลอื่น ๆ ที่เกิดขึ้นในความคิดเห็น:
- Wikipedia ใน
/dev/random
และ/dev/urandom
- กระดาษที่พยายามอธิบาย (ฉันไม่แน่ใจเกี่ยวกับมันดูความคิดเห็น)
- บล็อกโพสต์เกี่ยว
/dev/random
กับความคิดเห็นจากคนที่เขียนโค้ดข้างต้น - secutity.SE ตอบเกี่ยวกับกลุ่ม
/dev/random
เอนโทรปี
/dev/random
นั้นอยู่บนรากฐานที่สั่นคลอน - ดูกลุ่มเอนโทรปีการให้อาหาร / dev / การสุ่ม? . ฉันส่ง Ping กับโทมัสด้วยความหวังว่าเขาจะตอบคำถามของคุณ