Jörg Schütter wrote:
#!/usr/bin/perl
srand time; [...] for ($i = 0; $i < 8; $i++) { print @code[int(rand $len)]; }
Wenn man "wirklich sichere" Paßworte will, ist diese Konstruktion auch mit Vorsicht zu genießen, da die rand-Funktion in Perl (ebenso wie z.B. auch random() in C, $RANDOM in der bash u.v.a.) keine wirklich zufälligen Werte liefert. Vielmehr generieren diese Funktionen Pseudo-Zuffallszahlenfolgen, die ausgehend von einem Ausgangswert Zahlen berechnen, die zwar "zufällig aussehen", tatsächlich aber vorhersehbar sind. Dazu kommt, daß sich die damit erzeugten Zahlenfolgen früher oder später wiederholen, so daß die Anzahl der möglichen so generierten Paßworte begrenzt ist (wenn auch vielleicht auf ein paar Milliarden, aber das ist schon *deutlich* weniger als alle möglichen achtstelligen Paßworte). Die Wahl der aktuellen Zeit bei der Initialisierung macht es einem Angreifer (mit Kenntnis der Methode) noch einmal viel einfacher, und zwar um so mehr, je genauer er den Zeitpunkt der Paßwortgenerierung eingrenzen kann. Einige Hinweise zur Sicherheit gibt's auch in `perldoc -f srand`. Natürlich bedeuten solche Schwächen nicht in jeder Umgebung automatisch eine reale Gefahr. Aber man sollte grundsätzlich an Stellen, wo's um Sicherheit geht, zusehen, daß man möglichst "kryptographisch sichere" Zufallszahlen verwendet. Dafür bietet sich, falls vorhanden, z.B. /dev/random (und für diesen Zweck sollte auch /dev/urandom völlig ausreichen) als Quelle an. Siehe `man 4 random`. Das nur mal so als Hinweis und zum drüber nachdenken. Also deshalb nicht gleich in Panik ausbrechen -- meist sind Paßwörter wohl noch anderen, größeren Risiken (aka unvorsichtige Benutzer) ausgesetzt ;-) Trotzdem die Empfehlung: Wenn schon Zufall, dann richtig. 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/