Tut mir leid, dass ich mich zu spät an dieser Diskussion beteilige (wie alt ist sie jetzt, 3 1/2 Jahre?), aber ich habe ein wiedererwachtes Interesse an der PRN-Erzeugung und alternativen Quellen von Entropie. Der Linux-Kernel-Entwickler Rusty Russell hatte kürzlich eine Diskussion auf seiner Blog zu alternativen Entropiequellen (andere als /dev/urandom
).
Aber ich bin von seinen Entscheidungen nicht sonderlich beeindruckt; die MAC-Adresse einer NIC ändert sich nie (obwohl sie sich von allen anderen unterscheidet), und die PID scheint eine zu kleine mögliche Stichprobengröße zu sein.
Ich habe mich mit einem Mersenne-Twister (auf meinem Linux-Rechner), die mit dem folgenden Algorithmus geseedet wird. Ich bitte um Kommentare/Feedback, falls jemand bereit und interessiert ist:
-
Erstellen eines Array-Puffers mit 64 Bit + 256 Bit * Anzahl der /proc
Dateien unten.
-
Platzieren Sie den Wert des Zeitstempelzählers (TSC) in den ersten 64 Bits dieses Puffers.
-
Für jeden der folgenden Punkte /proc
Dateien, berechnen Sie die SHA256-Summe:
-
Erstellen eines SHA256-Hashes des 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 an HOFFENTLICH zufällige (genügend) Entropiedaten, um meinen Mersenne Twister zu setzen. Ich verwende die oben genannten Daten, um den Anfang des MT-Arrays (624 32-Bit-Ganzzahlen) zu füllen, und initialisiere dann den Rest dieses Arrays mit dem Code des MT-Autors. Außerdem habe ich könnte eine andere Hash-Funktion (z. B. SHA384, SHA512) verwenden, aber ich würde eine andere Größe Array-Puffer (offensichtlich) benötigen.
Der ursprüngliche Mersenne-Twister-Code verlangte einen einzigen 32-Bit-Seed, aber das ist meiner Meinung nach völlig unzureichend. Die Durchführung von "nur" 2^32-1 verschiedenen MTs auf der Suche nach dem Brechen der Krypto ist heutzutage nicht jenseits des Bereichs der praktischen Möglichkeiten.
Ich würde gerne die Meinung anderer dazu lesen. Kritik ist mehr als willkommen. Ich werde meine Verwendung des /proc
Dateien wie oben, weil sie sich ständig ändern (insbesondere die /proc/self/*
Dateien, und der TSC liefert immer einen anderen Wert (Auflösung im Nanosekundenbereich [oder besser], IIRC). Ich habe Hartnäckige Tests (in der Größenordnung von mehreren hundert Milliarden Bits), und es scheint mit Bravour zu bestehen. Aber das ist wahrscheinlich eher ein Beweis für die Tauglichkeit des Mersenne Twisters als PRNG als dafür, wie ich ihn einsetze.
Natürlich sind das keine völlig unempfindlich gegen Hacker, aber ich kann mir nicht vorstellen, dass all diese (und SHA*) gehackt werden können. und in meinem Leben gebrochen.
0 Stimmen
Neun. Neun. Neun. Neun. .... Das ist das Problem des Zufalls, man kann nie sicher sein.
1 Stimmen
RFC 1149.5 spezifiziert 4 als Standard-Zufallszahl, die vom IEEE geprüft wurde.