Können Sie die in random.c verwendete Entropieschätzung erklären?

12

/dev/randomVerwendet 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 deltaund 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:

Lucas
quelle
1
Beachten Sie, dass der Wert der Entropieschätzung in Linux /dev/randomauf einem verwackelten Fundament liegt - siehe Feeding / dev / random entropy pool? . Ich habe Thomas angerufen, in der Hoffnung, dass er Ihre Frage beantwortet.
Gilles 'SO - hör auf böse zu sein'
Wenn sich jemand für dieses Thema interessiert, ist die Behandlung in Wikipedia ein ziemlich guter Ausgangspunkt: en.wikipedia.org/wiki//dev/random
slm
1
@Lucas - werfen Sie auch einen Blick auf dieses Papier: [Eine Interpretation des Linux Entropy
Estimator
@slm Interessant, obwohl ich nicht sicher bin, ob es richtig ist - der Schritt, die minimale Funktion mithilfe der Kolmogorov-Komplexität zu rechtfertigen, ist ein großer Schritt in der Argumentation und es ist mir nicht klar, dass dies konzeptionell richtig ist.
Lucas
@Lucas - Dachte, ich würde es weitergeben, ich bin aus meiner Liga mit diesem Q 8-)
slm

Antworten:

5

delta2ist nicht der vorherige delta, sondern der Unterschied zwischen zwei aufeinanderfolgenden Werten von delta. Es ist eine Art Ableitung: Wenn man deltadie Geschwindigkeit misst, delta2ist das die Beschleunigung.

Die intuitive Idee hinter dieser Schätzung ist, dass Interrupts in mehr oder weniger zufälligen Intervallen auftreten, die durch unvorhersehbare Ereignisse aus der physischen Welt (z. B. Tastenanschläge oder Eintreffen von Netzwerkpaketen) bestimmt werden. Je länger die Verzögerung ist, desto unvorhersehbarer sind die Ereignisse. Es gibt jedoch physische Systeme, die einen Brand mit einer festgelegten Rate auslösen. Die delta2Maßnahme ist ein Schutzmechanismus, der solche Vorkommnisse erkennt (wenn Interrupts in festen Intervallen auftreten und somit eindeutig vorhersehbar sind, haben alle deltaden gleichen Wert und sind daher delta2Null).

Ich sagte "intuitiv" und es gibt nicht viel mehr zu sagen. Tatsächlich ist das Zählen der Bits im Modell "zufällige physikalische Ereignisse" falsch; Wenn ein Hardwareereignis mit der Wahrscheinlichkeit p für jede Zeiteinheit auftritt und Sie eine Verzögerung erhalten, die über n Bits ausgedrückt wird, sollte der Entropiebeitrag als n / 2 Bits und nicht als n Bits berücksichtigt werden . Wir wissen jedoch, dass die physischen Ereignisse in Wirklichkeit nicht zu genau zufälligen Zeitpunkten stattfinden. Der delta2Mechanismus gibt so viel zu.

In der Praxis ist die "Entropieschätzung" genau das: eine Schätzung . Sein Sicherheitswert beruht nicht auf einer gut begründeten, mathematisch genauen Begründung, sondern auf der üblichen Sicherheitsquelle: Niemand scheint (noch) einen Weg gefunden zu haben, ihn zu missbrauchen.


Diese Seite wurde von jemandem geschrieben, der die Mythen /dev/randomund den Entropieschätzer satt hat , und ich denke, sie erklärt die Dinge gut und mit genügend Details. Beim Umgang mit RNG ist es wichtig, einige grundlegende Ideen richtig zu machen.

Thomas Pornin
quelle
Hoppla, ich habe einen Fehler gemacht, ich hätte sagen sollen, dass sich die Deltas geändert haben. Ich muss sagen , dass die meisten Schätzungen einen haben „gut begründete, mathematisch exakte Rechtfertigung“, das ist , was sie von Vermutungen unterscheidet - und wenn es funktioniert überhaupt sollte es haben einige formale Begründung. Es ist völlig in Ordnung, sich nicht um diese Dinge und nur um die Pragmatik der Sicherheit zu kümmern, aber das gilt nicht für alle. Nicht zu vereinbaren, was interessant ist, bedeutet nicht, "grundlegende Ideen richtig" zu machen.
Lucas
Ich sage nicht, dass Ihr Unrecht darin eine praktische Schätzung für die Zwecke ist, für die es entworfen wurde.
Lucas