/dev/random
entropi havuzuna eklemek için çekirdek aralıklarının zamanlamalarını kullanır. Havuzdaki entropi miktarı adlı bir değişkende izlenir entropy_count
.
İşte ilgili kod snippet'i random.c
. Değişken son iki kesinti delta
ile deltalar arasındaki farklar arasındaki süreyi (sanırım jifflerde) temsil eder 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;
Eklenen entropinin tahmini esas olarak tabanın 2 logaritmasının deltasının tabanıdır (döngüden önceki bit değişimi nedeniyle tavan değil). Bu sezgisel bir anlam ifade ediyor, ancak bunu resmi olarak doğru hale getirmek için hangi varsayımların gerekli olacağından emin değilim.
Yani, ilk sorum "bu tahminin ardındaki sebep nedir?"
İkinci sorum şu delta = MIN(delta, delta2) ...
. Bu ne yapar? Neden bu deltanın minimumunu ve sonuncuyu almalıyım? Bunun neyi başarması gerektiğini bilmiyorum - belki de tahmini daha iyi, belki daha muhafazakar yapar.
Düzenleme: Tahmin belirten bir kağıt buldum , ama gerçekten bunun için gerekçeli bir argüman vermiyor (gerçi tahmin edicinin karşılaması gereken bazı gayri resmi koşulları özetliyor olsa da).
Yorumlarda ortaya çıkan diğer kaynaklar:
- Wikipedia
/dev/random
ve/dev/urandom
- Açıklamaya çalışan bir makale (Bu konuda şüpheliyim, yorumlara bakın)
/dev/random
Yukarıdaki kodu yazan adamın yorumlarıyla ilgili bir blog yazısı ./dev/random
Entropi havuzu hakkında bir cevap .
/dev/random
titrek bir temel üzerinde olduğuna dikkat edin - Feeding / dev / random entropy pool? . Thomas'a sorunuzu cevaplayacağı ümidiyle ping attım.