Für große Datenmengen müssen Sie verwenden /dev/urandom
. Das u
ist für "unbegrenzt", dh es stehen immer Daten zur Verfügung. Wenn Sie versuchen, viele Daten auszulesen /dev/random
, werden diese blockiert, sodass Ihr Programm eine Zeitlang nicht läuft.
Beides /dev/random
und /dev/urandom
liefern unvorhersehbare (zufällige) Daten. Die Daten von /dev/random
sind völlig unvorhersehbar (oder wirklich zufällig ) und eignen sich daher für langfristige kryptographische Schlüssel (bei denen ein Angreifer in der Zukunft die Vorteile umfangreicher Recherchen haben kann und schnellere Computer versuchen, den Algorithmus zu brechen verwendet, um die Daten zu generieren). Die Daten von /dev/urandom
basieren auf wirklich zufälligen Daten, können jedoch durch eine qualitativ hochwertige Pseudozufallsfunktion durchlaufen werden, um zusätzliche Daten zu erzeugen. Es ist immer noch für Dinge wie Verschlüsselungsschlüssel geeignet, solange Sie nicht sicher sein müssen, dass sie über Jahrzehnte nicht beschädigt werden, sondern auch für Massendaten verwendet werden können.
Der Linux-Kernel unterhält einen "Entropie-Pool" nicht vorhersagbarer Daten, wobei jedes Bit die gleiche Chance hat, wahr oder falsch (Eins oder Null) zu sein. Der Kernel baut diesen Entropiepool aus verschiedenen Eingaben auf, z. B. Hardwarequellen, Treiber, Benutzeraktionen und anderen Faktoren, die nicht zuverlässig vorhergesagt werden können. Diese Quellen benötigen jedoch Zeit, um Entropie zu akkumulieren, sodass der Entropiepool erschöpft werden kann, wenn er zu schnell verbraucht wird.
/dev/random
zieht direkt aus dem Entropiepool. Wenn der Pool erschöpft ist, werden durch das Lesen von /dev/random
Daten keine weiteren Daten zurückgegeben, bis der Pool ausreichend gefüllt ist, was einige Zeit in Anspruch nehmen kann. /dev/urandom
verwendet einen kryptografisch sicheren Pseudo-Zufallszahlengenerator (CSPRNG), der aus dem Entropie-Pool stammt. Es kann eine unendliche Menge an Ausgabe erzeugen, die Ausgabe kann jedoch nicht vorhergesagt werden, ohne den internen Zustand des CSPRNG zu kennen. Da der interne Zustand anfangs auf wirklich zufälligen Daten basiert und der verwendete CSPRNG-Algorithmus seinen internen Zustand nicht durch seine Ausgabe verliert, /dev/urandom
ist er dennoch eine gute Quelle für höchst zufällige Daten.
Um es zusammenzufassen, wenn Sie maximal zufällige Daten benötigen, verwenden Sie /dev/random
. Wenn Sie jedoch viele Daten benötigen, müssen Sie diese verwenden /dev/urandom
. Verwenden /dev/urandom
Sie im Allgemeinen die Verwendung, es sei denn, Sie benötigen die Daten, um für Jahrzehnte nicht von wirklich zufälligem Rauschen unterschieden zu werden.