Jörg Schütter wrote:
Was macht den den Unterschied zwischen dem Perl-Befehl rand und /dev/random aus?
rand in Perl erzeugt Pseudozufallszahlen, d.h., aus einem Ausgangswert wird eine möglichst zufällig aussehende Zahlenfolge nach einer festen Regel deterministisch berechnet. Also liefert z.B. das Kommando perl -e ' srand 1; for ($i = 0; $i < 20; $i++) { printf "%2d ", rand 100; } print "\n";' (wichtig: das srand mit festem Argument) bei jedem Aufruf die gleiche "Zuffalls"zahlenfolge. Das ist gar nicht schlecht, denn für viele Zwecke kann es _gerade_ sinnvoll sein, immer wieder die gleiche pseudozufällige Zahlenfolge reproduzieren zu können. Nur ist es eben kein echter Zufall und damit für kryptographische Zwecke u.ä. ungeeignet. Dagegen steckt hinter /dev/random ein Gerätetreiber, der versucht, möglichst zufällige und nicht vorhersagbare / reproduzierbare Zahlenfolgen zu produzieren.
rand nutzt als Startwert eine "zufallszahl, z.B. die Zeit.
Oder auch irgendwas anderes, z.B. auch Daten aus /dev/urandom (siehe `perldoc -f srand`).
Woher bekommt aber /dev/random seine Daten?
Der Gerätetreiber dahinter sammelt im Kernel fleißig Daten über alle möglichen Systemaktivitäten, die sich schwer vorhersagen lassen, etwa Zeitabstände zwischen bestimmten Ereignissen u.a. Diese Daten werden kräftig durchgemischt und daraus zufällige Byte-Folgen generiert, die man aus /dev/random lesen kann. Zusätzlich wird noch geschätzt, wie viel Entropie (das heißt ungefähr so viel wie Informationsgehalt) tatsächlich in den gesammelten Werten steckt, und auch nur entsprechend viel Zufallszahlen geliefert. Wenn nicht genug Entropie da ist, muß der Leser warten, bis wieder genug passiert ist. Diese Beschränkung fehlt bei /dev/urandom, d.h., dort kann man auch mehr lesen, als an geschätzter Entropie vorhanden ist -- die Werte nehmen dann zunehmend den Charakter von Pseudozufallszahlen an. Für manche Zwecke kann das trotzdem ausreichend sein, und dafür muß man eben nicht warten. Kurz: /dev/random liefert Zufallszahlen sehr hoher Qualität, und für sowas wie Paßwortgenerierung sollte in der Regel auch /dev/urandom genügen. Infos zu diesen Devices gibt's z.B. in `man 4 random`. Eilert -- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Eilert Brinkmann -- Universitaet Bremen -- FB 3, Informatik eilert@informatik.uni-bremen.de - eilert@tzi.org - eilert@linuxfreak.com http://www.informatik.uni-bremen.de/~eilert/
On 2001.03.01 17:45:21 +0100 Eilert Brinkmann wrote:
Jörg Schütter wrote:
Was macht den den Unterschied zwischen dem Perl-Befehl rand und /dev/random aus?
rand in Perl erzeugt Pseudozufallszahlen, d.h., aus einem Ausgangswert wird eine möglichst zufällig aussehende Zahlenfolge nach einer festen Regel deterministisch berechnet. Also liefert z.B. das Kommando
perl -e ' srand 1; for ($i = 0; $i < 20; $i++) { printf "%2d ", rand 100; } print "\n";'
[...]
Dagegen steckt hinter /dev/random ein Gerätetreiber, der versucht, möglichst zufällige und nicht vorhersagbare / reproduzierbare Zahlenfolgen zu produzieren.
rand nutzt als Startwert eine "zufallszahl, z.B. die Zeit.
Oder auch irgendwas anderes, z.B. auch Daten aus /dev/urandom (siehe `perldoc -f srand`).
Woher bekommt aber /dev/random seine Daten?
Der Gerätetreiber dahinter sammelt im Kernel fleißig Daten über alle möglichen Systemaktivitäten, die sich schwer vorhersagen lassen, etwa Zeitabstände zwischen bestimmten Ereignissen u.a. Diese Daten werden kräftig durchgemischt und daraus zufällige Byte-Folgen generiert, die man aus /dev/random lesen kann.
Erinnert mich an die Konfigurationsdatei für OpenSsh auf Unix-Maschinen ohne /dev/random [...] Gruß Jörg -- Dipl.-Ing. Jörg Schütter joerg.schuetter@gmx.de
participants (2)
-
Eilert Brinkmann
-
Jörg Schütter