Ich verstehe, dass / dev / random eine gute Entropiequelle ist und normalerweise verwendet wird. Gerade als ich mich mit GC befasse, scheint es zumindest in Java akzeptiert zu sein, dass der Garbage Collection Daemon nicht deterministisch ausgeführt wird . Wenn dies zutrifft, warum verwenden wir dann nicht das Timing der Garbage Collection als Entropiequelle anstelle der Variablen / dev / random?
random
garbage-collection
edthethird
quelle
quelle
Antworten:
"Nicht spezifiziert" und "zufällig" sind zwei völlig unterschiedliche Konzepte.
Die genaue Funktionsweise eines Garbage Collectors ist nicht festgelegt und hängt vom Garbage Collector ab (normalerweise von einer Art VM implementiert, aber nicht unbedingt).
Daher haben Sie keine festgelegte (dh deterministische) Zeit, zu der der Müll gesammelt wird.
Bei jeder Implementierung gelten jedoch einige Regeln, und es besteht eine hohe Wahrscheinlichkeit, dass zwei aufeinanderfolgende Ausführungen desselben Programms sehr ähnliche Garbage Collection-Muster aufweisen.
Daher ist die tatsächliche Entropie von einem Garbage Collector zur Verfügung gestellt würde , sehr gering sein (und herauszufinden , welche Teile Sie können tatsächlich nutzen als Entropie schwierig sein wird).
Zum Vergleich: A
HashMap
in Java garantiert seinen Mitgliedern keine Abrufreihenfolge (im Grunde genommen, weil durch die Garantie ein Aufwand entsteht, der sich meistens nicht auszahlt). Jedoch für eine gegebene Implementierung und einer gegebenen Menge von Ein- / Aussteckvorgänge Sie können auf jeden Fall die resultierende Ordnung berechnen. Nur weil es keine Garantie für eine bestimmte Bestellung gibt, heißt das nicht, dass die Bestellung zufällig ist.quelle
Erstens müssen wir aufpassen, dass wir nicht durch Manipulation bloßer Worte in die Falle des Denkens geraten. Zum Beispiel könnten wir fragen, warum wir nicht Zufallszahlen erhalten, da ein NFA ein "nicht deterministischer endlicher Automat" ist. In diesem Fall wäre es, weil dies nicht das ist, was "nicht deterministisch" in einer NFA bedeutet. Wenn wir eine NFA simulieren, ist das Verhalten der Simulation bei einer bestimmten Eingabe vollkommen deterministisch.
"Deterministic" ist eine geladene Phrase. Nicht-deterministisches Verhalten bedeutet für einen Computerprogrammierer oder Informatiker nur, dass es schwierig ist, über das genaue Verhalten nachzudenken. Es hängt von zu vielen Faktoren ab, einschließlich der Programmeingabe.
Dies bedeutet jedoch nicht, dass es für jemanden, der motiviert ist, ein Kryptosystem anzugreifen, nicht deterministisch ist. Manchmal können Umweltfaktoren und Eingaben festgelegt werden, und wiederholbare Muster ergeben sich aus "nicht deterministischem" Verhalten.
quelle