Schneller Pseudozufallszahlengenerator für die Kryptographie in C

8

Ich habe den folgenden Code verwendet, um eine Sequenz von Pseudozufallszahlen zu generieren, die für kryptografische Zwecke verwendet wurde, aber dann habe ich irgendwo gelesen, dass sie nicht sehr sicher ist. Kann jemand mir C Implementierung eines besseren Generators geben - das Hauptziel ist, dass diese Methode schnell ist. Zum Beispiel habe ich etwas recherchiert und bin auf die Blum Blum Shub -Methode gestoßen, welche die Leistung total ruinieren würde, wenn man Pow (N) macht. Berechnungen.

PS. Und bitte zitieren Sie keine Wikipedia-Artikel ohne C / C ++ - Code. Ich suche nach C oder C ++ Codebeispiel von dem, was ich unten zeige.

%Vor%     
c00000fd 19.08.2013, 21:52
quelle

4 Antworten

14

ISAAC ( Ссылка ) ist wahrscheinlich einer der schnellsten kryptographisch sicheren PRNGs (Code vor Ort). Ein anderer Ansatz besteht darin, eine Blockchiffre im Zählermodus zu verwenden. Etwas wie TwoFish, das ziemlich schnell und frei verfügbar ist, wäre effektiv.

Wenn Sie nicht viele Zahlen benötigen, verfügen alle modernen Betriebssysteme über integrierte RNGs, die für die kryptografische Verwendung geeignet sind, obwohl sie normalerweise nicht viele Zahlen erzeugen können, da sie auf der Akkumulation von Entropie aus Quellen wie Eingabezeiten beruhen. Unix-ähnliche Systeme (Linux, OSX) haben / dev / random, Windows hat CryptGenRandom. Auch wenn diese für Ihre Bedürfnisse nicht geeignet sind, sollten Sie sie wahrscheinlich verwenden, um die PRNG zu säen, die Sie verwenden.

    
Lee Daniel Crocker 20.08.2013, 00:07
quelle
5

Sehen Sie sich den Zufallszahlengenerator in der OpenSSL-Bibliothek an (oder verwenden Sie ihn).

Der schwierige Teil mit einem sicheren Zufallszahlengenerator ist das Seeding. Wenn Sie Windows verwenden, sollten Sie rand_s () verwenden. Unter Linux schauen Sie sich / dev / urand an.

Einige Seeding-Methoden leiden nicht sehr bald nach einem Neustart. Sie können eine Datei mit zufälligen Bytes erstellen. Verwenden Sie die Datei und die OS-Methode zum Seeding. Verwenden Sie regelmäßig Ihren Zufallsgenerator, um eine neue Datei zu schreiben.

    
brian beuning 20.08.2013 01:20
quelle
1

Krempeln Sie nicht Ihre eigene Kryptographie. Verwenden Sie stattdessen eine zertifizierte Bibliothek.

Versuchen Sie für Geschwindigkeit, eine Bibliothek zu verwenden, die auf der GPU ausgeführt werden kann, die viel mehr Rechenleistung hat.

    
Demi 20.08.2013 02:37
quelle
-4

Ich würde den Mersenne-Twister empfehlen, den ich immer wieder benutzt habe.

Der C-Code ist hier .

Wenn Sie C ++ 11 verwenden, haben Sie Mersenne Twister als Teil der Bibliothek selbst. Mersenne Twister ist derzeit einer der besten Algorithmen überhaupt.

Hier ist, wie ich in C ++ 11 als eine Funktion implementieren würde. Es ist sehr einfach. Die mt19937 ist in Mersenne Twister in C ++ 11 gebaut.

%Vor%     
atmaere 19.08.2013 22:01
quelle

Tags und Links