/dev/random
Verwendet die Zeitabläufe von Kernel-Interrupts, um den Entropiepool zu erweitern. Der Entropiebetrag im Pool wird in einer Variablen namens verfolgt entropy_count
.
Hier ist der relevante Codeausschnitt von random.c
. Es repräsentiert die Zeit (in Sekunden) zwischen den letzten beiden Unterbrechungen in Variable delta
und den Unterschieden in Deltas als 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;
Es sieht so aus, als ob die Schätzung der hinzugefügten Entropie im Wesentlichen der Grundwert (nicht Ceil aufgrund der anfänglichen Bitverschiebung vor der Schleife) des Logarithmus zur Basis 2 von Delta ist. Das ergibt einen intuitiven Sinn, obwohl ich nicht sicher bin, welche Annahmen erforderlich wären, um dies formal korrekt zu machen.
Meine erste Frage lautet also: "Was ist die Begründung für diese Schätzung?"
Meine zweite Frage betrifft delta = MIN(delta, delta2) ...
. Was macht das? Warum das Minimum dieses Deltas und das letzte nehmen? Ich weiß nicht, was damit erreicht werden soll - vielleicht verbessert es die Schätzung, vielleicht ist es nur konservativer.
Bearbeiten: Ich habe ein Dokument gefunden , in dem die Schätzung angegeben ist, das jedoch kein begründetes Argument enthält (obwohl es einige informelle Bedingungen enthält, die der Schätzer erfüllen sollte).
Andere Ressourcen, die in den Kommentaren erwähnt wurden:
- Wikipedia auf
/dev/random
und/dev/urandom
- Ein Papier, das versucht, es zu erklären (ich bin skeptisch, siehe Kommentare)
- Ein Blogeintrag
/dev/random
mit Kommentaren von dem Typ, der den obigen Code geschrieben hat. - Eine secutity.SE-Antwort zum
/dev/random
Entropiepool.
/dev/random
auf einem verwackelten Fundament liegt - siehe Feeding / dev / random entropy pool? . Ich habe Thomas angerufen, in der Hoffnung, dass er Ihre Frage beantwortet.