Sorry, ich bin zu spät zu dieser Diskussion (was Ist es jetzt 3 1/2 Jahre alt?), aber ich habe ein neues Interesse an der PRN-Generation und alternativen Quellen der Entropie. Linux-Kernel-Entwickler Rusty Russell hatte kürzlich eine Diskussion über seine blog über alternative Quellen der Entropie (anders als /dev/urandom
).
Aber ich bin nicht ganz so beeindruckt von seinen Entscheidungen; Die MAC-Adresse einer NIC ändert sich nie (obwohl sie von allen anderen eindeutig ist), und PID scheint zu klein für eine mögliche Stichprobengröße zu sein.
Ich habe mit einem Mersenne Twister (auf meiner Linux-Box) versucht, die mit dem folgenden Algorithmus gesetzt ist. Ich bitte für jede Kommentare/Feedback, wenn jemand bereit ist und interessiert:
- Erstellen Sie ein Array-Puffer von 64 Bits + 256 Bits * Anzahl der
/proc
unten Dateien.
- Setzen Sie den Wert des Zeitstempelzählers (TSC) in die ersten 64 Bits dieses Puffers.
Für jede der folgenden /proc
Dateien, berechnen die SHA256 Summe:
- Erstellen Sie einen SHA256-Hash dieses gesamten Puffers. HINWEIS: Ich könnte (und sollte wahrscheinlich) eine andere Hash-Funktion verwenden, die völlig unabhängig von den SHA-Funktionen ist - diese Technik wurde als "Schutz" gegen schwache Hash-Funktionen vorgeschlagen.
Jetzt habe ich 256 Bits HOFFENTLICH random (genug) Entropie Daten meine Mersenne-Twister-Saatgut. Ich benütze das Obige, um den Anfang des MT-Arrays (624 32-Bit-Ganzzahlen) zu füllen, und initialisiere dann den Rest dieses Arrays mit dem MT-Autorcode. Auch könnte ich verwenden eine andere Hash-Funktion (z. B. SHA384, SHA512), aber ich würde eine andere Größe Array-Puffer (natürlich) benötigen.
Der ursprüngliche Mersenne-Twister-Code erforderte einen einzelnen 32-Bit-Seed, aber ich finde, das ist schrecklich unpassend. "Nur" 2^32-1 verschiedene MTs auf der Suche nach einem Bruch des Krypto zu laufen, liegt in der heutigen Zeit nicht jenseits der praktischen Möglichkeiten.
Ich würde gerne jemandes Feedback dazu lesen. Kritik ist mehr als willkommen. Ich werde meine Verwendung der /proc
Dateien wie oben verteidigen, weil sie ständig ändern (besonders die /proc/self/*
Dateien, und die TSC liefert immer einen anderen Wert (Nanosekunde [oder besser] Auflösung, IIRC). Ich habe Diehard tests auf diese ausgeführt (mehrere hundert Milliarden Bits in Höhe von), und es scheint, mit Bravour zu übergeben. Aber das ist wahrscheinlich mehr Beweis für die Solidität des Mersenne-Twister als PRNG als, wie ich es bin Impfen.
Natürlich sind diese nicht total undurchdringlich für jemand, der sie hackt, aber ich sehe nur nicht alle diese (und SHA *) gehackt werden und gebrochen in meiner Lebenszeit.
[RFC 1149.5 spezifiziert 4 als IEEE-geprüfte Zufallszahl.] (Https://imgs.xkcd.com/comics/random_number.png) –
[Nine. Neun. Neun. Neun. ....] (http://dilbert.com/strips/comic/2001-10-25/) Das ist das Problem mit Zufälligkeit, man kann nie sicher sein. – tvanfosson