XKC-XD
“Bitte beachten Sie, Zug fährt ein, heute auf Gleis Math.random()”
wildes Umherrennen
Heute auf Gleis 0.4123573891042751?
Instruktionen unklar, stecke mit dem Kopf in einer Säule fest.
Ich sehe du warst auch schon in Dortmund Hbf
Es geht auch schlimmer:
- Zug wird am richtigen Bahnsteig angekündigt.
- Zug mit der richtigen Nummer und dem richtigen Ziel fährt ein.
- Nachdem man eingestiegen ist, gibt es eine Durchsage, dass man doch bitte einen anderen Zug an einem anderen Gleis benutzen solle.
- Zug hat nun eine neue Nummer und ein neues Ziel.
- Zug, den man eigentlich hätte benutzen sollen, ist schon vor der Einfahrt des ersten Zugs abgefahren.
Dies ist mir aber bis jetzt nur einmal passiert :D
Ich hatte da nie Probleme.
Entweder hatte ich viel Glück oder du viel Pech.
Ja, andererseits ist es in anderen Ländern so, dass es bis zehn Minuten vor der Abfahrt völlig unklar ist, auf welchem Gleis der Zug überhaupt einfährt. Dann sitzt man irgendwo in der Vorhalle und wartet vor der Anzeige.
:-| Math.random();
B-) Crypto.getRandomValues()
O<(:o return 4;
Wenn ich mir die Ticketpreise so anschaue hat diese API wahrscheinlich ein ähnliches Preismodell wie die von Reddit.
Die Wagenreihung ist genau das Gegenteil vom Plan,
Sänk ju for trävveling wis Deutsche Bahn
Na toll! Jetzt ist der verdammte Ohrwurm zurück.
Meine Damen und Herren
Sollte beides nicht für Sicherheit verwendet werden!
Was sollte man für Sicherheit verwenden bzw. was ist so der aktuelle Standard um “wirklich zufällige” Zahlen zu bekommen?
Man sollte einen kryptographisch sicheren Zufallszahlengenerator (CSPRNG) verwenden. Z. B. SecureRandom in Java, secrets in Python oder Crypto in JavaScript. Ein CSPRNG weist u. a. folgende Eigenschaften auf:
- Nicht vorhersagbar, auch wenn bereits einige Zufallszahlen bekannt sind
- Vorhergehende Zufallszahlen können ebenfalls nicht bestimmt werden
- Erzeugt Zufallsfolgen mit statistisch gleichvielen Nullen und Einsen
Normale PRNGs erfüllen nur die dritte Eigenschaft. Sind also einige Zufallszahlen bekannt, könnte man vorherige und nachfolgende Zufallszahlen bestimmen.
Dazu dann noch Entropie aus physikalischen Quellen mit reinmischen denn man weiß nie ob die NSA den Algorithmus nicht schon geknackt hat.
Unter Linux ist das ganze sehr einfach:
/dev/random
. Das ist ein CPRNG (ChaCha20) mit direkt vom Kernel eingeschleuster Entropie und spuckt auch nichts aus bevor nicht genügend Entropie vorhanden ist.
Auf der anderen Seite: Wenn du die Frage “wo kriege ich kryptographisch sichere Zufallszahlen her” machst du schon was falsch denn du bist gerade dabei Krypto-Code zu implementieren ohne Kryptologe zu sein.
“wirkliche Zufallszahlen” (true randomness) ist etwas das man für cryptographische Sicherheit nur in sehr begrenzter Menge braucht. cryptographisch sichere randomness reicht aus, und die kann man aus einer kleinen Menge true randomness ableiten. grosse Mengen true randomness zu generieren ist aufwaendig, macht aber heute kaum einer mehr.
Das betriebssystem hat Zugriff auf eine ganze Reihe guter Entropie Quellen die kleine Mengen true randomness produzieren, unter anderem die rdrand Instruktion, die mit thermischem rauschen im Chip initialisiert wird.
Linux betreibt einen cryptographisch sicheren Zufallszahlengenerator (CSPRNG) auf den man entweder über den getrandom syscall, oder eins der beiden devices /dev/random und /dev/urandom zugreifen kann.
Cloudflare benutzt Lavalampen.
Aber mehr zu PR Zwecken. Ich frage mich bis heute ob die Lavalampen im Vergleich zum Rauschen des Bildsensors überhaupt einen Unterschied machen.
Der erste wahre Zufalsgenerator.