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