/dev/random
menggunakan 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 delta
dan 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:
- Wikipedia pada
/dev/random
dan/dev/urandom
- Sebuah makalah yang mencoba menjelaskannya (saya skeptis tentang itu, lihat komentar)
- Posting blog tentang
/dev/random
dengan komentar dari pria yang menulis kode di atas. - Jawaban secutity.SE tentang
/dev/random
kumpulan entropi.
/dev/random
adalah pada pondasi yang goyah - lihat Feeding / dev / kumpulan entropi acak? . Saya telah mengirim pesan kepada Thomas dengan harapan dia akan menjawab pertanyaan Anda.Jawaban:
delta2
bukan yang sebelumnyadelta
, tetapi perbedaan antara dua nilai berturut - turut daridelta
. Ini adalah semacam turunan: jikadelta
mengukur kecepatan,delta2
adalah 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
delta2
ukuran adalah mekanisme perlindungan yang mendeteksi kejadian tersebut (jika interupsi terjadi pada interval yang tetap, maka jelas diprediksi, semuadelta
akan memiliki nilai yang sama, makadelta2
akan 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
delta2
mekanisme 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/random
dan 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.sumber