2013-11-14 5 views
26

Ich verwende /dev/urandom, um Zufallsdaten für meine Programme zu generieren. Ich habe gelernt, dass /dev/random leer sein kann, da es im Gegensatz zu /dev/urandom SHA nicht verwendet, wenn nicht genügend Bytes generiert werden. /dev/random verwendet "Kernel-Entropie-Pool". Anscheinend beruht es auf Tastatur-Timings, Mausbewegungen und IDE-Timings.Wie funktioniert der Kernel Entropy Pool?

Aber wie funktioniert das wirklich?
Und wäre es nicht möglich, den Entropie-Pool zu "füttern", was die Ausgabe von/dev/randomy vorhersagbar macht?

+0

Imho sollten Sie eines der Tags ersetzen, um zu erwähnen, dass diese Frage für Linux spezifisch ist; Wie auch immer, über den zweiten Teil - nein, nur root kann das, normale Benutzer können nur neue Daten mischen, was harmlos ist. – loreb

Antwort

20

Was Sie sagen, ist genau richtig, ja theoretisch ist es möglich, Entropie in /dev/random zu füttern, aber Sie müssten eine Menge der Kernel "Noise" Quellen steuern, um es signifikant zu sein. Sie können die Quelle für random.c betrachten, um zu sehen, wo /dev/random Rauschen von aufnimmt. Wenn Sie eine signifikante Anzahl der Rauschquellen kontrollieren, können Sie im Grunde abschätzen, was die anderen zum Entropie-Pool beitragen.

Da /dev/urandom ein Hash chain aus /dev/random gesetzt ist, dann könnte man eigentlich die nächsten Zahlen vorhersagen, wenn man den Seed kennt. Wenn Sie genug Kontrolle über den Entropie-Pool haben, dann können Sie aus der Ausgabe von /dev/urandom diesen Samen erraten, der es Ihnen ermöglichen würde, alle nächsten Zahlen von /dev/urandom vorherzusagen, aber nur, wenn Sie /dev/random erschöpft halten, sonst wird /dev/urandom sein neu eingestellt.

Das gesagt, ich habe niemanden tatsächlich gesehen, nicht einmal in einer kontrollierten Umgebung. Natürlich ist das keine Garantie, aber ich würde mir keine Sorgen machen.

Also würde ich eher /dev/urandom verwenden und garantieren, dass mein Programm nicht blockiert, während für Entropie warten, anstatt /dev/random der Verwendung und fragt den Benutzer dumme Dinge zu tun, wie Sie die Maus bewegen oder auf der Tastatur schlagen.

Ich denke, Sie sollten lesen On entropy and randomness von LWN, hoffentlich wird es beruhigen Sie Ihre Sorgen :-).

Sollten Sie sich noch Sorgen machen, dann besorgen Sie sich eine HRNG.

bearbeiten Hier ist eine kleine Notiz auf Entropie:

Ich denke, das Konzept der Entropie im Allgemeinen schwer zu fassen. Es gibt einen Artikel mit mehr Informationen über Wikipedia. Aber in diesem Fall kann man Entropie als Zufälligkeit lesen.

Also wie ich es sehe, ist, dass Sie eine große Tasche mit farbigen Kugeln haben, je höher die Entropie in dieser Tasche, desto schwieriger ist es, die nächste aus der Tasche gezogene Farbe vorherzusagen.

In diesem Kontext ist Ihr Entropie-Pool nur eine Menge zufälliger Bytes, von denen keiner aus dem vorherigen oder einem anderen abgeleitet werden kann. Was bedeutet, dass Sie eine hohe Entropie haben.

+0

Vielen Dank für diese wirklich gute Antwort. Als nicht-Englisch-Muttersprachler ist das Wort "Entropie" für mich schwer zu bekommen. Ich stelle mir den Entropie-Pool als ein Speicher-Array vor, das, wenn es mit 8/16 Bits gefüllt ist, das entsprechende Symbol druckt, habe ich recht? – Antoninarto

+0

Ich habe eine kleine Notiz über Entropie hinzugefügt. Hoffentlich macht dies die Dinge für dich etwas klarer. – jbr

2

Ich schätze die Tiefe von jbr's Antwort.

Hinzufügen einen praktischen Update für alle derzeit auf einem ipsec pki Befehl starrt oder etwas ähnliche Blockierung auf leeren Entropiepool:

ich gerade installiert RNG-Tools in einem anderen Fenster und mein pki Befehl abgeschlossen.

apt-get install rng-tools 
0

Ich bin in der Mitte ein Papier bei factorable des Lesens und machte Kenntnis von dem Abschnitt, wo es heißt:

„Für Bibliothek Entwickler. Standard der sicherste Konfiguration Beide OpenSSL und Dropbear Standard /dev/urandom statt zu verwenden /dev/random und Dropbear defaults eine weniger sichere DSA Signatur Zufälligkeit mit Technik, obwohl eine sicherere Technik als Option zur Verfügung steht. "

Die Autoren den Kompromiss einer Anwendung hängen, während für Entropie warten /dev/random zu bauen eine bessere Sicherheit zu bekommen im Vergleich zu schnell, aber weniger sicher, resultieren aus /dev/urandom.

+0

Könnte es sein, dass es in deinem letzten Satz irgendeinen Fehler gibt, weil es zweimal '/ dev/random' gibt. –

+0

Guter Fang, Kevin. Das zweite Vorkommen sollte/dev/urandom sein. /dev/urandom liefert Ergebnisse sofort unabhängig von der Ebene Entropie vorhanden. /dev/random wird warten/hängen für ein geeignetes Entropie-Niveau, bevor Ergebnisse zur Verfügung gestellt werden. – Mike

+0

Da sie nicht daran gehindert werden, aus der Entropie herauszulaufen, könnten Sie theoretisch die Entropie nicht "aufsaugen", indem Sie sie selbst (ohne root) verwenden und viel weniger Entropie (oder nichts außer pseudo) für kryptografische Programme übrig lassen? –