2015-09-01 1 views
9

Wie wir wissen, die Mersenne-Twister-is not crytographically secure:Gibt es eine C++ 11 CSPRNG?

Mersenne Twister ist nicht kryptographisch sicher. (MT basiert auf einer lineare Rekursion. Jede Pseudozufallszahlenfolge, die durch eine lineare Rekursion unsicher ist, da von ausreichend langen subsequencje der Ausgänge, kann man den Rest der Ausgänge vorherzusagen.)

Aber viele Quellen, wie Stephan T. Lavavej und sogar this website. Die Beratung ist fast immer (wörtlich), wie dies den Mersenne-Twister zu verwenden:

auto engine = mt19937{random_device{}()}; 

Sie kommen in verschiedenen Geschmacksrichtungen, wie mit std::seed_seq oder komplizierten Formen des std::tm Manipulation, aber das ist der einfachste Ansatz.

Obwohl std::random_deviceis not always reliable:

std::random_device kann im Sinne eines Implementierung definierten Pseudo-Zufallszahlen-Engine implementiert werden, wenn eine nicht-deterministische Quelle (zB ein Hardware-Gerät) nicht zur Verfügung die Implementierung. In diesem Fall kann jedes std::random_device Objekt die gleiche Nummernfolge erzeugen.

Die /dev/urandom vs /dev/random Debatte rages on.

Aber während die Standardbibliothek eine gute Sammlung von PRNGs bietet, scheint es keine CSPRNGs zu bieten. Ich bevorzuge es, mich an die Standardbibliothek zu halten, anstatt POSIX, Linux-only-Header usw. zu verwenden. Kann der Mersenne Twister manipuliert werden, um ihn kryptographisch sicher zu machen?

+0

Zum Downvoter, wie kann ich meine Frage verbessern? – user5287986

+0

Nicht downvoter (eigentlich upvoted), aber ich denke, Sie sollten die Links anklickbar machen. – dandan78

+11

* Kann der Mersenne Twister manipuliert werden, um ihn kryptografisch zu sichern? * Nr. –

Antwort

5

Visual Studio garantiert, dass random_device verschlüsselt sicher ist und nicht-deterministisch: https://msdn.microsoft.com/en-us/library/bb982250.aspx

Wenn Sie etwas schneller oder Cross-Plattform wollen, könnten Sie zum Beispiel den Einsatz GnuTLS: http://gnutls.org/manual/html_node/Random-number-generation.html Es bietet Zufallszahlen einstellbarer Qualität. GNUTLS_RND_RANDOM ist was du willst, denke ich.

Wie schon einige Leute gesagt haben, bitte vergessen Sie MT in kryptografischen Kontexten.