Herzlich Willkommen beim SLG-Clan
E-mail/Nickname
Password
sLg-Clan - News - JavaScript - Vorsicht vor Math.random()
netcup Kinguin - Bei jedem Spiel sparen
Partner
Sponsoren

JavaScript - Vorsicht vor Math.random()
26.11.2015 um 18:00 Uhr - Pow3rBust3r
Der Zufallszahlengenerator Math.random() in der JavaScript-Engine V8 liefert nicht ganz so zufällige Zahlen, wie es wünschenswert wäre. Er ist unter anderem im Browser Chrome im Einsatz.
 
Zufallszahlen zu erzeugen ist eine hohe Kunst. Im zweiten Band seines Buchs The Art of Computer Programming zitiert Informatik-Papst Donald E. Knuth John von Neumann mit den Worten "Any one who considers arithmetical methods of producing random digits is, of course, in a state of sin."
 
Rauschen in Safari, erzeugt mit Math.random()                                                         Rauschen in Chrome mit Struktur, kein                                                                                                                                                          gutes Zeichen für einen Zufallsgenerator
 
Maschinen, die eine endliche Menge von Zuständen annehmen können, können prinzipbedingt immer nur Pseudo-Zufallszahlen erzeugen. Hinzu kommt, dass man bei der Programmierung von (Pseudo-)Zufallsgeneratoren allerlei falsch machen kann. Und wie sich jetzt wieder einmal zeigt, ist man auch beim Aufruf von System-Funktionen nicht auf der sicheren Seite.
 
In seinem Blog-Beitrag TIFU by using Math.random() [Anm. d. Red.: TIFU steht für Today I Fucked Up, heute habe ich Mist gebaut] warnt Mike Malone vor dem Gebrauch der JavaScript-Funktion Math.random(). In der JavaScript-Engine V8, die unter anderem im Browser Chrome im Einsatz ist, verwendet Math.random() den Algorithmus MWC1616. MWC steht für Multiply With Carry, eine Klasse von Pseudo-Zufallsalgorithmen, die der amerikanische Mathematiker George Marsaglia erfunden hat. MWC1616 kombiniert aber zwei solcher Generatoren – in ungeschickter Weise, wie sich jetzt herausgestellt hat. Das führt dazu, dass sich mit dieser Funktion erzeugte "zufällige" Identifier wesentlich schneller wiederholen, als man denkt.
 
"Many random number generators in use when this chapter was first written were not very good. People have traditionally tended to avoid learning about such subroutines; old methods that were comparatively unsatisfactory have been passed down blindly from one programmer to another, until the users have no understanding of the original limitations."
Donald E. Knuth, The Art of Computer Programming, Volume 2, Seminumerical Algorithms, Third Edition
 
Details sind im oben zitierten Blog-Beitrag nachzulesen, aber Malone hat das Problem auch schön veranschaulicht. Unter der Adresse http://bl.ocks.org/mmalone/bf59aa2e44c44dde78ac kann man eine Seite mit JavaScript-Code aufrufen, die Rauschen produzieren sollte. Tut man dies mit Chrome, kann man deutliche Muster erkennen, während dieselbe Seite etwa in Safari oder Firefox wirklich nach zufälligem Rauschen aussieht.

 

Link: heise.de

Bitte Login benutzen, um Kommentare zu schreiben.