Das Lesen von /dev/random
erzeugt normalerweise 100-500 Bytes und Blöcke und wartet darauf, dass eine Entropie gesammelt wird.
Warum /dev/random
beschleunigt das Schreiben von Informationen durch andere Prozesse das Lesen nicht? Sollte es nicht die erforderliche Entropie liefern?
Es kann nützlich sein, um eine Blockierung gpg
oder ähnliche Software aufzuheben, ohne sie neu zu starten und alles erneut einzugeben , um nicht-super-streng geheime Schlüssel zu generieren usw.
/dev/urandom
stattdessen einfach ab ./dev/urandom
ist so sicher wie/dev/random
für kryptografische Zwecke , das Verhalten/dev/random
ist schlecht designt.gpg --gen-key
von/dev/random
auf wechseln/dev/urandom
?gpg
hat/dev/random
fest codiert. Sie können Ihre udev-Konfiguration ändern , um unter anderem/dev/random
dasselbe Gerät wie/dev/urandom
zu erstellen.gpg --gen-key
gestartet werden, daher werden die von ihm interaktiv abgefragten Daten erneut verarbeitet (oder es werden cleverere Methoden wie die Angabe weiterer Befehlszeilenparameter verwendet). Auch die CPU-Zeit, die die Primzahl generiert, geht verloren (gpg kann eine Minute arbeiten, einige davon drucken+
und dann zusätzliche zufällige Daten anfordern). Und es gibt das Gefühl "Lass uns zurück und auf eine andere Route gehen" anstatt "Lass uns einen Hammer nehmen und ihn nach vorne treiben" ...Antworten:
Sie können schreiben,
/dev/random
da dies Teil der Möglichkeit ist, zusätzliche Zufallsbytes bereitzustellen. Dies/dev/random
ist jedoch nicht ausreichend. Sie müssen das System auch über einenioctl()
Aufruf darüber informieren, dass zusätzliche Entropie vorhanden ist .Ich brauchte die gleiche Funktionalität zum Testen meines Smartcard-Setup-Programms , da ich nicht warten wollte, bis meine Maus / Tastatur genug generiert hatte, um die verschiedenen Aufrufe
gpg
für jeden Testlauf auszuführen. Ich habe das folgende Python-Programm parallel zu meinen Tests ausgeführt. Es sollte natürlich überhaupt nicht für diegpg
Generierung von echten Schlüsseln verwendet werden, da die zufällige Zeichenfolge überhaupt nicht zufällig ist (vom System generierte zufällige Informationen werden weiterhin verschachtelt). Wenn Sie eine externe Quelle zum Festlegen der Zeichenfolge habenrandom
, sollten Sie in der Lage sein, eine hohe Entropie zu haben. Sie können die Entropie überprüfen mit:Das Programm:
(Vergessen Sie nicht, das Programm zu beenden, nachdem Sie fertig sind.)
quelle
rngd
. Es ist als Paket in den meisten (allen?) Distributionen erhältlich.random = "3420348024823049823-984230942049832423l4j2l42j"
siehe xkcd.com/221Normalerweise wird es von Kernel-Entwicklern entwickelt und dokumentiert in
man 4 random
:quelle
Anthony hat bereits erklärt, dass Schreiben auf
/dev/random
die Entropiezahl nicht erhöht, und gezeigt, wie das RNDADDENTROPY ioctl (siehe random (4) ) verwendet werden kann, um Entropie anzurechnen . Es ist offensichtlich nicht wirklich sicher, daher gibt es hier eine Alternative, wenn ein Hardware-Zufallszahlengenerator verfügbar ist.Die folgenden Implementierungen nehmen 512 Bytes (4096 Bits) Zufälligkeit
/dev/hwrng
und leiten sie an den Entropiepool weiter (Gutschrift von 4 Bits Entropie pro Byte, dies ist eine willkürliche Wahl von mir). Danach ruft es das auf select (2) auf, um zu blockieren, wenn der Entropiepool voll ist (dokumentiert in der Manpage random (4) ).Eine Python-Version:
Da auf Arch Linux nicht Python installiert war, gibt es auch hier eine Perl-Version:
Dies ist wahrscheinlich das, was das rngd-Programm (Teil von rng-tools ) macht (nicht verifiziert), außer dass es Tools (Python oder Perl) verwendet, die bereits allgemein verfügbar sind.
quelle
/dev/urandom
anstatt sich/dev/hwrng
absolut nicht um unsichere Zufallswerte zu kümmern .getrandom()
Syscall mit hwrng auf Kerneln verwendet wird, die älter als 4.8-rc1 sind und zu einem blockierenden Verhalten führen. Eine Problemumgehung gibt esread()
zweimal von/dev/random
, siehe github.com/Lekensteyn/archdir/commit/…