Theo de Raadt beschwert sich auf der Open-BSD-Mailingliste, dass die standardisierten Funktionen “srand()”, “srandom()” und “srand48()”, welche die Grundlage für “rand()” und Co. bieten, keine echten Zufallszahlen als Seeds erzeugen.
Die Erwartungen der meisten Entwickler sei, dass “srand()” zufällige Seeds erzeuge, die “rand()” dann verwendet. Einige Programme verwenden die Seeds auch mehrfach. Die drei Subsystem-APIs “srand()”, “srandom()” und “srand48()” würden aber laut de Raadt deterministische und keine zufälligen Seeds erzeugen. Sie seien unter anderem Teil der Standards C89, POSIX und XPG42 und brächten Entwickler dazu, unsichere Programme zu schreiben.
De Raadt hat 8800 Projekt untersucht und in 1221 die Funktionen “rand()” und “random()” gefunden, die auf “srand()” aufsetzen, von denen aber nur 41 die Seed wiederverwenden möchten. Alle anderen seien bestrebt, gute Zufallszahlen zu erzeugen.
Das Problem will de Raadt nun für 96 Prozent aller Fälle einfach lössen, indem er “srand()” so ändert, dass es die Funktion “arc4random()” verwendet, die starke Zufallszahlen erzeugt. Zugleich möchte er “srand_deterministic(seed)” für Fälle einführen, die keinen starken Zufall benötigen. Das entsprechende Diff ist Teil seines Mailinglisten-Beitrags.





