/dev/randomใช้การกำหนดเวลาของเคอร์เนล interupts เพื่อเพิ่มไปยังกลุ่มเอนโทรปี entropy_countปริมาณของเอนโทรปีในสระว่ายน้ำที่มีการติดตามในชื่อตัวแปร
random.cนี่คือข้อมูลที่เกี่ยวข้องของรหัสจาก เพราะมันหมายถึงเวลา (jiffies ฉันคิด) ระหว่างสอง interupts สุดท้ายในตัวแปรและความแตกต่างในสันดอนเป็นdeltadelta2
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 กับโทมัสด้วยความหวังว่าเขาจะตอบคำถามของคุณ