Sie müssen PRNG werden Thread-sicher?
-
03-07-2019 - |
Frage
Solange gleichzeitige Anrufe verursachen keine seg-v oder geben den gleichen Wert, welche Gründe gibt es, zu verhindern, dass Rennbedingungen und Datenkorruption in
Lösung PRNGs sind Werkzeuge sorgfältig konstruiert -. Offen gesagt, wenn Rennbedingungen und Einfädeln Bugs eine gute PRNG, würde die Umsetzung auf diese Weise geschrieben werden Das Problem mit Threading-Bugs Hinzufügen Zufälligkeit zu erhöhen, ist, dass es eine unstudied Änderung an den Generator. Bestehende sichere Algorithmen und Implementierungen wurden umfassend getestet; wenn Sie eine unsichere Variante ausprobieren möchten, müssen Sie die statistische Grunzen Arbeit zu zeigen tun, dass sie als eine normale PRNG mindestens so zufällig ist.
Andere Tipps
, wenn dieser primären Effekte des Fehlers sind unvorhersehbare Ergebnisse und das ist der Punkt eines PRNG?
„Random“ ist nicht das gleiche wie unberechenbar - Random eine bestimmte Verteilung impliziert, die sehr wichtig ist, zu halten, sollten Sie echte Zufallszahlen möchten. Wenn Ihre Zufallszahlen vorhersehbar in irgendeiner Weise kann es ein Sicherheitsproblem, oder zumindest ein Programmfehler
seinEs wird in der Regel macht sie weniger deterministisch (schlecht, wenn man auf ihren Determinismus verlassen, die viele Menschen tun), und kann oder auch nicht macht sie weniger pseudo-zufällig, in Abhängigkeit von ihren jeweiligen Implementierung Details und Feinheiten, wie Sie Ihre Hardware verhält.
Aber in der Regel Menschen schreiben multithreaded Anwendungen erklären ihren PRNG Zustand in TLS (Thread-local-Speicher). Auf diese Weise ist es egal, hat jeder Thread seinen eigenen PRNG und Rennen wird nicht passieren, wenn man sie nicht absichtlich erstellen. Nicht innerhalb des PRNG Code sowieso. Dies ist Lock-frei und mehr oder weniger volle Leistung (je nach TLS-Implementierung verwendet wird).