/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.