คุณช่วยอธิบายการประมาณค่าเอนโทรปีที่ใช้ใน random.c ได้ไหม


12

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

แก้ไข:ฉันพบกระดาษที่ระบุค่าประมาณแต่มันก็ไม่ได้ให้เหตุผลที่สมเหตุสมผล (แม้ว่ามันจะร่างเงื่อนไขที่ไม่เป็นทางการบางอย่างที่ตัวประมาณควรตรงตาม)

แหล่งข้อมูลอื่น ๆ ที่เกิดขึ้นในความคิดเห็น:


1
โปรดทราบว่าค่าของการประมาณค่าเอนโทรปีใน Linux /dev/randomนั้นอยู่บนรากฐานที่สั่นคลอน - ดูกลุ่มเอนโทรปีการให้อาหาร / dev / การสุ่ม? . ฉันส่ง Ping กับโทมัสด้วยความหวังว่าเขาจะตอบคำถามของคุณ
Gilles 'ดังนั้นหยุดความชั่วร้าย'

หากใครมีความสนใจในหัวข้อนี้การรักษาเกี่ยวกับเรื่องนี้ใน Wikipedia นั้นเป็นจุดเริ่มต้นที่ดีทีเดียว: en.wikipedia.org/wiki//dev/random
slm

1
@Lucas - ดูที่บทความนี้ด้วย: [การตีความของตัวประมาณค่าเอนโทรปีของ Linux] ( eprint.iacr.org/2012/487.pdf )
slm

@slm ที่น่าสนใจถึงแม้ว่าฉันไม่แน่ใจว่าถูกต้อง - ขั้นตอนการปรับฟังก์ชั่นขั้นต่ำโดยใช้ความซับซ้อนของ Kolmogorov เป็นก้าวกระโดดครั้งใหญ่ในการให้เหตุผลและไม่ชัดเจนสำหรับฉันว่าแนวคิดนี้ฟังดูแล้ว
ลูคัส

@Lucas - คิดว่าฉันจะผ่านมันไปฉันออกจากลีกของฉันด้วยคำถามนี้ 8-)
slm

คำตอบ:


5

delta2ไม่ได้ก่อนหน้านี้deltaแต่ความแตกต่างdeltaระหว่างสองค่าต่อเนื่องของ มันเป็นอนุพันธ์ชนิดหนึ่ง: ถ้าdeltaวัดความเร็วdelta2คือความเร่ง

แนวคิดที่ใช้งานง่ายที่อยู่เบื้องหลังการประมาณการนั้นคือการขัดจังหวะเกิดขึ้นในช่วงเวลาสุ่มมากหรือน้อยซึ่งถูกกำหนดโดยเหตุการณ์ที่ไม่สามารถคาดการณ์ได้จากโลกทางกายภาพ (เช่นการกดปุ่มหรือการมาถึงของแพ็กเก็ตเครือข่าย) ความล่าช้าที่นานขึ้นเหตุการณ์ที่คาดเดาไม่ได้จะเกี่ยวข้องมากขึ้น อย่างไรก็ตามมีระบบทางกายภาพที่ไฟขัดจังหวะในอัตราคงที่; delta2วัดเป็นกลไกการป้องกันซึ่งตรวจจับเหตุการณ์ที่เกิดขึ้นดังกล่าว (ถ้าขัดจังหวะเกิดขึ้นในช่วงเวลาที่คงที่จึงสามารถคาดเดาได้เด็ดทั้งหมดdeltaจะมีค่าเท่ากันจึงdelta2จะเป็นศูนย์)

ฉันพูดว่า "หยั่งรู้" และไม่มีอะไรจะพูดมากไปกว่านี้อีกแล้ว ในความเป็นจริงในโมเดล "เหตุการณ์ทางกายภาพแบบสุ่ม" การนับบิตนั้นผิด ถ้าเป็นเหตุการณ์ที่เกิดขึ้นกับฮาร์ดแวร์น่าจะเป็นหน้าสำหรับแต่ละหน่วยเวลาและคุณจะได้รับความล่าช้าแสดงมากกว่าnบิตแล้วผลงานของเอนโทรปีควรจะคิดเป็นn / 2บิตไม่nบิต แต่เรารู้ว่าในความเป็นจริงเหตุการณ์ทางกายภาพจะไม่เกิดขึ้นในช่วงเวลาสุ่ม delta2กลไกการยอมรับเป็นอย่างมาก

ดังนั้นในทางปฏิบัติ "ประมาณการเอนโทรปี" เป็นว่าที่: การประมาณการ ค่าความปลอดภัยของมันไม่ได้มาจากเหตุผลที่สมเหตุสมผลและมีเหตุผลทางคณิตศาสตร์ แต่มาจากแหล่งความปลอดภัยตามปกติ: ไม่มีใครดูเหมือนจะพบวิธีที่จะใช้มันในทางที่ผิด (ยัง)


หน้านี้เขียนโดยคนที่เบื่อกับตำนานเกี่ยวกับ/dev/randomและตัวประมาณค่าเอนโทรปีและฉันคิดว่ามันอธิบายสิ่งต่าง ๆ ได้ดีโดยมีรายละเอียดเพียงพอ เป็นสิ่งสำคัญที่จะต้องมีแนวคิดพื้นฐานที่ถูกต้องเมื่อต้องรับมือกับ RNG


อุ๊ปส์ฉันสะกดผิดฉันควรจะบอกว่าการเปลี่ยนแปลงในเดลตา ฉันต้องบอกว่าการประมาณการส่วนใหญ่มี "ที่ดีมีเหตุผลเหตุผลทางคณิตศาสตร์ที่แน่นอน" นั่นคือสิ่งที่แตกต่างจากพวกเขาคาดเดา - และถ้ามันทำงานที่ทุกคนควรจะมีบางเหตุผลอย่างเป็นทางการ เป็นเรื่องปกติที่จะไม่สนใจสิ่งเหล่านี้และเพียงใส่ใจในเรื่องความปลอดภัย แต่ก็ไม่เป็นความจริงสำหรับทุกคน ไม่เห็นด้วยกับสิ่งที่น่าสนใจไม่ใช่เรื่องของการได้รับ "แนวคิดพื้นฐานที่ถูกต้อง"
ลูคัส

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