Zufälligkeit bedeutet, dass der nächste Wert, den Sie erhalten, nicht von dem vorherigen Wert abhängig ist und dass Sie keine Möglichkeit haben, diesen vorherzusagen.
Dies ist für einen Computer eigentlich schwierig, da ein Computer eigentlich nur ein wirklich schneller Rechner ist - er kann also rechnen, er erhält jedoch immer die genaue Antwort. Mit Mathematik können Sie etwas, das der Zufälligkeit nahe kommt, als "Pseudo-Zufälligkeit" bezeichnet werden - aber es ist nicht hoch genug, um für die Kryptographie verwendet zu werden.
Linux sammelt also "Zufälligkeiten" in Pools aus verschiedenen Quellen (z. B. Timing zwischen Eingabeereignissen). Die "Menge" der Zufälligkeit in diesem Pool ist die Entropie. Weniger Entropie = weniger regelmäßige, sich wiederholende, vorhersagbare Muster - Sie möchten so viel Entropie wie möglich. Der Linux-Kernel "füllt" seinen Pool mit Entropie, wenn er zur Neige geht, aber er hängt von den Vorgängen im System ab, da er das Timing zwischen unvorhersehbaren Hardwareereignissen verwendet, um ihn zu generieren.
Wenn der Pool leer ist, /dev/random
wird blockiert, oder stoppen Daten heraus geben, bis der Kernel genug Entropie bekommt.
/dev/urandom
macht weiter - mit Pseudo-Zufalls-Techniken, um Zufallszahlen zu generieren.
Jetzt, da Sie die Grundlagen verstanden haben, können Sie immer urandom verwenden und hier ist der Grund .
Hier ist ein Auszug aus diesem Artikel, der erklärt, warum es keine Rolle spielt:
Nehmen wir jedoch an, Sie haben diese „echten“ Zufallszahlen erhalten. Was wirst du mit ihnen machen?
Sie drucken sie aus, rahmen sie ein und hängen sie an die Wand Ihres Wohnzimmers, um die Schönheit eines Quantenuniversums zu genießen. Das ist großartig und ich verstehe das sicher.
Warte was? Du verwendest sie? Für kryptographische Zwecke? Nun, das verdirbt alles, denn jetzt wird es etwas hässlich.
Ihre wahrhaft zufälligen, mit Quanteneffekt gesegneten Zufallszahlen werden in weniger respektable, in der Realität befallene Algorithmen eingesetzt.
Da fast alle von uns verwendeten kryptographischen Algorithmen der informationstheoretischen Sicherheit nicht standhalten. Sie können „nur“ rechnerische Sicherheit bieten. Die zwei Ausnahmen, die mir in den Sinn kommen, sind Shamirs Secret Sharing und das One-Time-Pad. Und obwohl der erste ein gültiger Kontrapunkt ist (wenn Sie ihn tatsächlich verwenden möchten), ist letzterer absolut unpraktisch.
Aber all diese Algorithmen, die Sie kennen, aes, rsa, Diffie-Hellman, elliptische Kurven und all die von Ihnen verwendeten Krypto-Pakete, OpenSSL, GnuTLS, Keyczar, die Krypto-API Ihres Betriebssystems, sind nur rechnerisch sicher.
Was ist der Unterschied? Während informationstheoretisch sichere Algorithmen sicher sind, können diese anderen Algorithmen nicht die Sicherheit eines Gegners mit unbegrenzter Rechenleistung garantieren, der alle Möglichkeiten für Schlüssel ausprobiert. Wir benutzen sie immer noch, weil dies alle Computer der Welt länger brauchen würde, als das Universum bisher existiert hat. Das ist das Maß an "Unsicherheit", über das wir hier sprechen.
Es sei denn, ein kluger Kerl bricht den Algorithmus selbst und verwendet viel weniger Rechenleistung. Sogar Rechenleistung heute erreichbar. Das ist der große Preis, von dem jeder Kryptoanalytiker träumt: Aes selbst brechen, rsa selbst brechen und so weiter.
Jetzt sind wir an einem Punkt, an dem Sie den inneren Bausteinen des Zufallszahlengenerators nicht vertrauen und auf „wahrer Zufall“ anstatt auf „Pseudo-Zufall“ bestehen. Aber dann verwenden Sie diese „wahren“ Zufallszahlen in Algorithmen, die Sie so verachten, dass Sie sie gar nicht in der Nähe Ihres Zufallszahlengenerators haben wollten!
Die Wahrheit ist, wenn moderne Hash-Algorithmen kaputt gehen oder wenn moderne Block-Chiffren gebrochen werden, spielt es keine Rolle, dass Sie aufgrund ihrer "Zufallszahlen" philosophisch unsicher sind. Sie haben nichts übrig, um sie sicher zu verwenden.
Verwenden Sie also diese rechnerisch sicheren Zufallszahlen für Ihre rechnerisch sicheren Algorithmen. Mit anderen Worten: Verwenden Sie / dev / urandom.