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.
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:
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.