Wie oft wird / dev / urandom von / dev / random gesät?

2091

Es sei denn, ich bin total verwirrt und tut das nicht.

Ich möchte wissen, ob / dev / urandom eine erhöhte Entropie gewinnt, wenn ich einen Hardware-RNG nehme und seine Entropie in / dev / random stecke.

Wenn ich also die Entropie von / dev / random um X Bits / Sek. Erhöhen möchte (dh, / Dev / Random nach der Injektion können Sie X Bits / Sek. Abtasten), wird dies die Entropieübertragung zu Urandom erhöhen?

14
Obwohl nicht sehr relevant, sind http://www.2uo.de/myths-about-urandom/ und https://blog.cloudflare.com/ensuring-randomness-with-linuxs-randomnumbergenerator/ (insbesondere der Diagramm unter https://blog.cloudflare.com/content/images/image01.png) kann hilfreich beim Lesen sein. grawity vor 8 Jahren 2
Wenn Sie einen echten Hardware-RNG hätten, könnten Sie ihn direkt verwenden. Michael Hampton vor 8 Jahren 0

3 Antworten auf die Frage

24
otus

Es ist nicht wirklich genau zu sagen, dass /dev/urandomProben von /dev/random. Stattdessen werden die beiden Pools von derselben Entropiequelle unterstützt. Wenn die Entropiezählung der Pools null erreicht, wird aus dem gemeinsam genutzten Eingabepool erneut gesät. Wenn Sie dem Kernel also in gewisser Weise Entropie geben, kann er diese entweder für /dev/randomoder verwenden /dev/urandom, je nachdem, was gelesen wird.

Es /dev/urandom ist jedoch auch in der Rate begrenzt, wie oft er nachsäen kann. Standardmäßig kann die Einstellung nur alle 60 Sekunden wiederholt werden.

In der Praxis spielt dies alles keine Rolle. Solange der Pool anfänglich mit mindestens 128 Bit Entropie besetzt ist, müssen für das Vorhersagen einer Ausgabe nicht nur die vorherigen Ausgaben betrachtet werden, sondern auch die verwendeten Algorithmen, einschließlich mindestens des Vorbildwiderstands, gebrochen werden von SHA-1 ( das ungebrochen bleibt ).

7
David Schwartz

Das hängt von der Implementierung ab. Aber normalerweise /dev/randomund /dev/urandomentropie aus dem gleichen Pool, so wird es.

Diagram from https://blog.cloudflare.com/ensuring-randomness-with-linuxs-random-number-generator/

4
JJZ

In Linux werden alle Daten, die in / dev / random oder / dev / urandom geschrieben wurden, sowohl in den blockierenden Pool (Zufallsquelle für / dev / random) als auch in den nichtblockierenden Pool (Zufallsquelle für / dev / urandom) kopiert.

Schauen Sie sich einfach die random_write- Funktion an.

Daten, die in / dev / random geschrieben werden, werden jedoch nicht vom internen Entropie-Schätzer gezählt (schließlich kann ein lokaler Gegner versuchen, / dev / zero oder eine andere höchst nicht zufällige Quelle nach / dev / random umzuleiten). Wenn Sie also Probleme haben Wenn Sie / dev / random blockieren, hilft es nicht, nur in / dev / random zu schreiben.

Schreiben Sie in Linux nach / dev / random (oder / dev / urandom, kein Unterschied), lesen Sie jedoch immer aus / dev / urandom (sobald es ausgesät ist - der beste Weg ist, den neuen Systemaufruf getrandom zu verwenden ).

Ich weiß nicht, wie es in anderen Unices funktioniert.