Beides /dev/random
und /dev/urandom
ein "Entropie-Pool". Wenn der Pool erschöpft ist, /dev/random
wartet er darauf, dass er wieder aufgefüllt wird. Dies erfordert eine Überwachung des Systemverhaltens (Tastatureingabe, Mausbewegung usw.), während Sie /dev/urandom
weiterhin pseudozufällige Daten erhalten. /dev/random
ist theoretisch von höherer Qualität, aber /dev/urandom
mit ziemlicher Sicherheit gut genug für Ihre Zwecke. (Aber es /dev/urandom
ist wahrscheinlich sogar langsamer als einige andere Methoden. Ein schnellerer, aber qualitativ schlechterer Generator ist wahrscheinlich gut genug, um Festplatten zu löschen. Es ist nicht klar, dass ein Angreifer einen Vorteil daraus ziehen würde, die zu erzeugende Sequenz zu kennen, oder dass Zufallszahlen für diesen Zweck besser sind als eine Folge wie 0, 1, 2, 3, 4, ....)
Zitieren der random(4)
Manpage:
Wenn Sie sich nicht sicher sind, ob Sie /dev/random
oder verwenden sollen
/dev/urandom
, möchten Sie wahrscheinlich letzteres verwenden. In der Regel /dev/urandom
sollte für alles außer langlebigen GPG / SSL / SSH-Schlüsseln verwendet werden.
UPDATE : Die Manpage `random (4) wurde aktualisiert, seit ich das geschrieben habe. Es heißt jetzt:
Die /dev/random
Schnittstelle wird als Legacy-Schnittstelle betrachtet und
/dev/urandom
ist in allen Anwendungsfällen bevorzugt und ausreichend, mit Ausnahme von Anwendungen, die während der frühen Startzeit Zufälligkeiten erfordern. für diese Anwendungen getrandom(2)
muss stattdessen verwendet werden, da es blockiert, bis der Entropiepool initialisiert wird.
Siehe auch " Mythen über / dev / urandom " von Thomas Hühn.
Aber /dev/urandom
, auch wenn es nicht blockiert wird, ist wahrscheinlich zu langsam sein , wenn Sie große Mengen an Daten generieren möchten. Nehmen Sie einige Messungen an Ihrem System vor, bevor Sie es versuchen.
BEARBEITEN: Das Folgende ist ein Exkurs über "wahre" Zufallszahlen im Vergleich zu Pseudo-Zufallszahlen. Wenn alles, was Sie interessiert, eine praktische Antwort auf die Frage ist, können Sie jetzt aufhören zu lesen.
Ich scheine Behauptungen (auch in anderen Antworten hier), /dev/random
die einen "wahren" Zufallszahlengenerator im Gegensatz zu einem Pseudozufallszahlengenerator (PRNG) implementieren. Beispielsweise macht der Wikipedia-Artikel einen solchen Anspruch geltend. Ich glaube nicht, dass das stimmt. Es gibt hier einige Diskussionen darüber , die sich auf Hardware-Zufallszahlengeneratoren beziehen, aber ich sehe keine Beweise dafür, dass /dev/random
normalerweise ein solches Gerät verwendet wird oder dass typische Computer sogar über ein solches Gerät verfügen. Sie unterscheiden sich von PRNGs wie der C- rand()
Funktion darin, dass sie nicht deterministisch sind, da sie Entropie aus praktisch unvorhersehbaren Quellen gewinnen.
Ich würde sagen, es gibt drei Klassen von Zufallszahlengeneratoren:
Deterministische PRNGs wie die C- rand()
Funktion, die einen Algorithmus verwenden, um wiederholbare Sequenzen zu generieren, die (mehr oder weniger) die statistischen Eigenschaften einer wirklich zufälligen Sequenz haben. Diese können für Spiele gut genug sein (vorausgesetzt, sie lassen sich auf eine gute Art und Weise aussondern) und sind für Anwendungen erforderlich, die Wiederholbarkeit erfordern, jedoch nicht für die Kryptografie geeignet sind.
Generatoren wie /dev/random
und /dev/urandom
, die Entropie aus einer praktisch unvorhersehbaren Quelle wie der E / A-Aktivität gewinnen (aus diesem Grund kann das Klopfen auf der Tastatur oder das Bewegen der Maus dazu führen /dev/random
, dass mehr Daten erzeugt werden). Es ist (für mich) nicht klar, ob diese der Definition eines PRNG entsprechen (ich habe Definitionen gesehen, die besagen, dass ein PRNG deterministisch ist), aber sie sind auch keine echten Zufallszahlengeneratoren.
Hardware-Zufallszahlengeneratoren , die selbst bei vollständiger Kenntnis ihres Ausgangszustands physikalisch unvorhersehbar sind und die zusätzlich mathematische Techniken verwenden, um die richtigen statistischen Eigenschaften sicherzustellen.