Bisakah Anda menjelaskan estimasi entropi yang digunakan dalam random.c

12

/dev/randommenggunakan timing interupts kernel untuk ditambahkan ke kumpulan entropi. Jumlah entropi di kumpulan dilacak dalam variabel bernama entropy_count.

Berikut cuplikan kode yang relevan dari random.c. Ini mewakili waktu (dalam jiffies saya pikir) antara dua interupsi terakhir dalam variabel deltadan perbedaan dalam delta sebagai 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;

Sepertinya estimasi entropi yang ditambahkan pada dasarnya adalah lantai (bukan langit-langit karena bithift awal sebelum loop) dari basis 2 logaritma delta. Ini masuk akal secara intuitif, meskipun saya tidak yakin asumsi apa yang diperlukan untuk membuat ini benar secara formal.

Jadi, pertanyaan pertama saya adalah "apa alasan di balik perkiraan ini?"

Pertanyaan kedua saya adalah tentang delta = MIN(delta, delta2) .... Apa fungsinya? Mengapa mengambil minimum dari delta ini dan yang terakhir? Saya tidak tahu apa yang harus dicapai ini - mungkin itu membuat perkiraan lebih baik, mungkin lebih konservatif.

Sunting: Saya telah menemukan sebuah makalah yang menentukan perkiraan , tetapi tidak benar-benar memberikan argumen yang masuk akal untuk itu (meskipun tidak menguraikan beberapa kondisi informal yang harus dipenuhi oleh penaksir).

Sumber daya lain yang muncul di komentar:

Lucas
sumber
1
Perhatikan bahwa nilai estimasi entropi di Linux /dev/randomadalah pada pondasi yang goyah - lihat Feeding / dev / kumpulan entropi acak? . Saya telah mengirim pesan kepada Thomas dengan harapan dia akan menjawab pertanyaan Anda.
Gilles 'SANGAT berhenti menjadi jahat'
Jika ada yang tertarik dengan topik ini, pengobatannya di Wikipedia adalah titik awal yang cukup bagus: en.wikipedia.org/wiki//dev/random
slm
1
@Lucas - lihat makalah ini juga: [Interpretasi dari penduga entropi Linux] ( eprint.iacr.org/2012/487.pdf )
slm
@slm Menarik, meskipun saya tidak yakin itu benar - langkah membenarkan fungsi minimum menggunakan kompleksitas Kolmogorov adalah lompatan besar dalam penalaran dan tidak jelas bagi saya bahwa ini secara konseptual terdengar.
Lucas
@Lucas - Pikir saya akan meneruskannya, saya keluar dari liga saya dengan ini Q - 8)
slm

Jawaban:

5

delta2bukan yang sebelumnya delta, tetapi perbedaan antara dua nilai berturut - turut dari delta. Ini adalah semacam turunan: jika deltamengukur kecepatan, delta2adalah akselerasi.

Gagasan intuitif di balik perkiraan itu adalah bahwa interupsi terjadi pada interval yang kurang lebih acak, yang ditentukan oleh peristiwa yang tidak dapat diprediksi dari dunia fisik (misalnya pukulan kunci atau kedatangan paket jaringan). Semakin lama penundaan, semakin banyak kejadian tak terduga yang terlibat. Namun, ada sistem fisik yang memadamkan api pada tingkat yang tetap; yang delta2ukuran adalah mekanisme perlindungan yang mendeteksi kejadian tersebut (jika interupsi terjadi pada interval yang tetap, maka jelas diprediksi, semua deltaakan memiliki nilai yang sama, maka delta2akan menjadi nol).

Saya mengatakan "intuitif" dan tidak banyak lagi yang bisa dikatakan. Bahkan, dalam model "kejadian fisik acak", menghitung bit itu salah; jika suatu peristiwa perangkat keras terjadi dengan probabilitas p untuk setiap unit waktu, dan Anda mendapatkan keterlambatan yang diekspresikan atas n bit, maka kontribusi entropi harus diperhitungkan sebagai n / 2 bit, bukan n bit. Tetapi kita tahu bahwa pada kenyataannya peristiwa fisik tidak terjadi pada saat yang tepat secara acak; yang delta2mekanisme mengakui sebanyak.

Jadi dalam praktiknya, "perkiraan entropi" persis seperti itu: perkiraan . Nilai keamanannya tidak datang dari alasan yang masuk akal, tepat secara matematis, tetapi dari sumber keamanan yang biasa: tidak ada yang menemukan cara untuk melanggarnya (belum).


Halaman ini ditulis oleh seseorang yang muak dengan mitos tentang /dev/randomdan penaksir entropinya, dan saya pikir itu menjelaskan semuanya dengan baik, dengan cukup detail. Penting untuk mendapatkan beberapa ide dasar yang benar ketika berhadapan dengan RNG.

Thomas Pornin
sumber
Ooops, saya salah bicara, saya seharusnya mengatakan perubahan dalam delta. Saya harus mengatakan bahwa sebagian besar perkiraan memang memiliki "alasan yang masuk akal, pembenaran matematis yang tepat", itulah yang membedakan mereka dari tebakan - dan jika berfungsi sama sekali itu harus memiliki beberapa justifikasi formal. Tidak masalah untuk tidak peduli tentang hal-hal ini dan hanya peduli pada pragmatik keamanan, tetapi ini tidak berlaku untuk semua orang. Tidak menyetujui apa yang menarik bukanlah masalah mendapatkan "ide-ide dasar yang benar".
Lucas
Saya tidak mengatakan bahwa kesalahan Anda dalam hal ini merupakan perkiraan praktis untuk tujuan yang dirancang.
Lucas