Frage

Okay, ich denke, das ist völlig subjektiv und so weiter, aber ich war über Entropie Quellen für Zufallszahlengeneratoren zu denken. Es geht, dass die meisten Generatoren mit der aktuellen Zeit ausgesät werden, richtig? Nun, ich war neugierig, was andere Quellen verwendet werden könnten durchaus gültig, zufällig (Die lose Definition) Zahlen zu erzeugen.

Würden mehrere Quellen (zB Zeit + aktuelle HDD-Suchzeit [Wir sind fantastical hier]) zusammen schaffen eine „zufällige“ Zahl als eine Hand? Was sind die logischen Grenzen der Menge an Quellen? Wie viel ist wirklich genug? Ist die Zeit gewählt, nur weil es bequem ist?

Entschuldigung, wenn diese Art der Sache nicht erlaubt ist, aber ich bin neugierig, wie die Theorie hinter den Quellen.

War es hilfreich?

Lösung

Der Wikipedia-Artikel über Hardware Zufalls Nummer Generator listet ein paar interessante Quellen für Zufallszahlen physikalische Eigenschaften.

Meine Favoriten:

  • Eine Strahlungsquelle Kernzerfall von einem Zähler erfassen Geiger an einen PC.
  • Photon durch einen halbdurchlässigen Spiegel reisen. Die sich gegenseitig ausschließende Ereignisse. (Reflection - Übertragung) werden erkannt und zugeordnet zu „0“ oder „1“ Bit-Werte jeweils
  • Thermisches Rauschen aus einem Widerstand, eine Zufallsspannungsquelle bereitzustellen verstärkt.
  • Lawinenrauschen aus einer Lawinendiode erzeugt wird. (Wie cool ist das?)
  • Atmospheric Rauschen, von einem Funkempfänger detektiert die an einen PC

Die Probleme Abschnitt der Wikipedia-Artikel rel="noreferrer">

Andere Tipps

Ich verwende Random.ORG , sie frei von Zufallsdaten aus Atmospheric Lärm sorgen, dass ich nutzen, um periodisch neu Samen ein Mersene-Twister RNG. Es geht um so zufällig wie Sie ohne Hardware-Abhängigkeiten erhalten.

Keine Sorge über eine „gute“ Samen für einen Zufallszahlengenerator. Die statistischen Eigenschaften der Sequenz nicht abhängig, wie der Generator ausgesät wird. Es gibt andere Dinge, aber. sich Sorgen machen um. Siehe Pitfalls in Random Number Generation .

Wie für Hardware-Zufallszahlengeneratoren, haben diese physikalischen Quellen gemessen werden, und der Messprozess hat systematische Fehler. Sie könnten „Pseudo“ Zufallszahlen finden höhere Qualität haben als „echte“ Zufallszahlen.

Linux Kernel verwendet Vorrichtungsunterbrechungszeitpunkt (Maus, Tastatur, Festplatten) Entropie zu erzeugen. Es gibt ein schönes Artikel auf Wikipedia auf Entropie.

Modern RNGs beide geprüft gegen Korrelationen in der Nähe von Samen und mehrere hundert Iterationen nach der Aussaat führen. Also, die leider langweilig, aber die richtige Antwort ist, dass es wirklich nicht sehr viel ist egal.

Im Allgemeinen unter Verwendung von zufälligen physikalischen Prozesse überprüft werden müssen, dass sie zu einer gleichmäßigen Verteilung entsprechen und ansonsten trendbereinigt.

Meiner Meinung nach, ist es oft besser, einen sehr gut verstanden Pseudo-Zufallszahlengenerator zu verwenden.

Ich habe ein Verschlüsselungsprogramm verwendet, die die Benutzer Mausbewegung verwendet, um Zufallszahlen zu erzeugen. Das einzige Problem war, dass das Programm mußte anhalten und den Benutzer auffordern, um die Maus zu bewegen zufällig für ein paar Sekunden, um richtig zu arbeiten, die vielleicht nicht immer praktisch sein.

Ich fand HotBits vor einigen Jahren - die Zahlen von radioaktiven Zerfall erzeugt, wirklich zufällig Zahlen.

Es gibt Grenzen, wie viele Zahlen Sie einen Tag herunterladen können, aber es hat immer amüsierte mich diese als wirklich zu verwenden, wirklich zufällig Samen für RNG.

Einige TPM (Trusted Platform Module) "Chips" haben einen Hardware-RNG. Leider fehlt der (Broadcom) TPM in meinem Dell Laptop diese Funktion, aber viele Computer heute kommen mit einem Hardware-RNG verkauft, die wirklich unberechenbar quantenmechanische Prozesse verwendet. Intel hat die thermische Rauschen Vielfalt umgesetzt werden.

Auch nicht die aktuelle Zeit verwendet allein einen RNG für kryptographische Zwecke auf Saatgut oder jede Anwendung, bei der Unberechenbarkeit wichtig ist. ein paar Bits niedriger Ordnung aus der Zeit in Verbindung mit mehreren anderen Quellen verwendet, ist wahrscheinlich in Ordnung.

ähnliche Frage Ihnen nützlich sein können.

Sorry, ich bin spät zu dieser Diskussion (was ist die 3 1/2 Jahre alt jetzt?), Aber ich habe ein Rekindled Interesse an PRN Generation und alternativen Quellen der Entropie. Linux-Kernel-Entwickler Rusty Russell hatte vor kurzem eine Diskussion über seine auf alternative Quellen der Entropie Blog (andere als /dev/urandom).

Aber, ich bin nicht so beeindruckt von seiner Wahl; eine MAC-Adresse des NIC nie ändert (obwohl es von allen anderen eindeutig ist), und PID scheint zu klein einer möglichen Stichprobengröße.

Ich habe dabbled mit einem Mersenne Twister (auf meiner Linux-Box), die mit dem beimpft folgenden Algorithmus. Ich bin für jede Kommentare / Feedback zu fragen, ob jemand bereit ist und interessiert:

  1. Erstellen Sie ein Array-Puffer von 64 Bits + 256 Bits * Anzahl der /proc unter Dateien.
  2. Setzen Sie den Zeitstempelzähler (TSC) Wert in den ersten 64 Bits dieses Puffers.
  3. Für jede der folgenden /proc Dateien, berechnen die SHA256 Summe:

    • /proc/meminfo
    • /proc/self/maps
    • /proc/self/smaps
    • /proc/interrupts
    • /proc/diskstats
    • /proc/self/stat

      Platzieren jedes 256-Bit-Hash-Wert in seinem eigenen Bereich des Arrays erzeugt in (1).

  4. Erstellen Sie eine SHA256 Hash dieses gesamten Puffers. Hinweis:. Ich könnte (und wahrscheinlich soll) eine andere Hash-Funktion völlig unabhängig von den SHA-Funktionen verwenden - diese Technik als „Schutz“ gegen schwache Hash-Funktionen vorgeschlagen wurde,

Jetzt habe ich 256 Bits von HOFFENTLICH random (genug) Daten Entropie zu meinem Mersenne-Twister-Samen. Ich benutze die oben den Anfang des MT-Array zu füllen (624 32-Bit-Integer), und dann mit dem MT Autor Code den Rest des Arrays zu initialisieren. Auch I könnte verwendet eine andere Hash-Funktion (zum Beispiel SHA384, SHA512), aber ich würde einen anderen Größe Array-Puffer (natürlich) braucht.

Der ursprüngliche Code Mersenne Twister für einen einzigen 32-Bit-Samen genannt, aber ich glaube, das ist schrecklich unzureichend. „Nur“ 2 ^ 32-1 unterschiedliche MTs auf der Suche Ausführen des Krypto brechen ist nicht über den Bereich der praktischen Möglichkeit, in der heutigen Zeit.

Ich würde gerne jemand das Feedback auf diese lesen. Kritik ist mehr als willkommen. Ich werde meine Verwendung der /proc Dateien wie oben verteidigen, weil sie ständig (vor allem die /proc/self/* Dateien zu ändern, und die TSC liefert immer einen anderen Wert (Nanosekunde [oder besser] Auflösung, IIRC). Ich habe laufen Diehard-Tests diese auf (in der Größenordnung von mehreren hundert Milliarden Bits), und es scheint mit Bravour vorbei zu sein. 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 unempfindlich gegen jemand Hacking sie, aber ich sehe einfach nicht alle diese (und SHA *) gehackt und gebrochen in meinem Leben.

Einige verwendet Tastatureingabe (Timeouts zwischen Anschlägen), ich hörte ich denke, in einem Roman, dass Radio statischer Empfang genutzt werden kann - aber das ist natürlich erfordert andere Hard- und Software ...

Lärm auf der Oberseite des kosmischen Mikrowellenhintergrundspektrum. Natürlich müssen Sie sich zunächst einige Anisotropie, Vordergrundobjekte, korreliert Detektorrauschen, Galaxie und lokale Gruppengeschwindigkeiten, Polarisierungen etc. Viele Fallen bleiben .

Quelle der Samen ist nicht so viel Bedeutung zu. Wichtiger ist der Generator Algorithmus Pseudonummern. Allerdings habe ich vor einiger Zeit gehört Samen für einige Bankoperationen zu erzeugen. Sie nahmen viele Faktoren zusammen:

  • Zeit
  • Prozessortemperatur
  • Ventilatordrehzahl
  • CPU-Spannung
  • Ich erinnere mich nicht mehr:)

Auch wenn einige dieser Parameter in der Zeit ändert sich nicht viel, können Sie sie in eine gute Hash-Funktion setzen.

Wie gut Zufallszahl generieren?

Vielleicht können wir Konto inifinite Anzahl von Universen tragen? Wenn dies wahr ist, dass die ganze Zeit neue parallele Universen erstellt werden, können wir etwas tun:

int Random() {
    return Universe.object_id % MAX_INT;
}

In jedem Moment sollten wir uns auf einem anderen Zweig der Paralleluniversen sein, so sollten wir verschiedene ID haben. Das einzige Problem ist, wie Universe-Objekt zu erhalten:)

Wie wäre es einen Thread Ausgründung, die einige Variablen in einer engen Schleife für eine bestimmte Zeit zu manipulieren, bevor es getötet wird. Was Sie am Ende mit auf der Prozessorgeschwindigkeit abhängt, Systemlast, etc ... Sehr kitschig, aber besser als nur srand (time (NULL)) ...

  

Keine Sorge über eine „gute“ Samen für einen Zufallszahlengenerator. Die statistischen Eigenschaften der Sequenz nicht abhängig, wie der Generator ausgesät wird.

Ich bin nicht einverstanden mit John D. Cook Beratung . Wenn Sie den Mersenne Twister mit allen Bits auf Null gesetzt, mit einer Ausnahme Samen, wird es zunächst Zahlen erzeugen, die sind alles andere als zufällig. Es dauert eine lange Zeit für den Generator diesen Zustand in etwas Churn, die statistische Tests bestehen würde. die ersten 32 Bits des Generators auf einen Samen einfach Einstellung wird eine ähnliche Wirkung haben. Auch, wenn der gesamte Zustand gesetzt, um den Generator auf Null wird endlos Nullen erzeugen.

Richtig geschrieben RNG-Code wird einen richtig geschrieben Seeding-Algorithmus hat, der einen 64-Bit-Wert und Samt der Generator sagen akzeptiert, so dass es anständig Zufallszahl für jede mögliche Eingabe erzeugt. Wenn Sie also eine zuverlässige Bibliothek verwenden, dann wird jeder Samen tun. Aber wenn Sie Ihre eigene Implementierung hacken zusammen, dann müssen Sie vorsichtig sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top