Anthony ya explicó que escribir a /dev/random
no aumenta el recuento de entropía y mostró cómo el ioctl RNDADDENTROPY (ver al azar (4) ) puede usarse para acreditar la entropía. Obviamente no es realmente seguro, así que aquí hay una alternativa cuando hay disponible un generador de números aleatorios de hardware.
Las siguientes implementaciones toman 512 bytes (4096 bits) de aleatoriedad /dev/hwrng
y lo envían al grupo de entropía (acreditar 4 bits de entropía por byte, esta es una elección arbitraria de mi parte). Después de eso, invocará la llamada al sistema select (2) para bloquear cuando el grupo de entropía esté lleno (documentado en la página de manual al azar (4) ).
Una versión de Python:
import fcntl, select, struct
with open('/dev/hwrng', 'rb') as hw, open('/dev/random') as rnd:
while True:
d = hw.read(512)
fcntl.ioctl(rnd, 0x40085203, struct.pack('ii', 4 * len(d), len(d)) + d)
select.select([], [rnd], [])
Dado que la iso de Arch Linux no tenía Python instalado, aquí también hay una versión de Perl:
open my $hw, "</dev/hwrng" and open my $rnd, "</dev/random" or die;
for (;;) {
my $l = read $hw, my $d, 512;
ioctl $rnd, 0x40085203, pack("ii", 4 * $l, $l) . $d or die;
vec(my $w, fileno $rnd, 1) = 1;
select undef, $w, undef, undef
}
Esto es probablemente lo que hace el programa rngd (parte de rng-tools ) (sin verificar), excepto que usa herramientas (Python o Perl) que ya están comúnmente disponibles.
/dev/urandom
lugar./dev/urandom
es tan seguro como/dev/random
para el uso criptográfico , el comportamiento de/dev/random
es un mal diseño.gpg --gen-key
de/dev/random
a/dev/urandom
sin reiniciar?gpg
ha/dev/random
codificado. Puede cambiar su configuración de udev para hacer/dev/random
el mismo dispositivo que/dev/urandom
, entre otras posibilidades.gpg --gen-key
, por lo tanto, volver a ingresar los datos que solicita de forma interactiva (o usar métodos más inteligentes como especificar más parámetros de línea de comandos). También se perderá el tiempo de CPU que genera el cebado (gpg puede funcionar un minuto, imprime algunos+
es y luego solicita datos aleatorios adicionales). Y da la sensación de "volvamos e iremos por otra ruta" en lugar de "tomemos un martillo y lo obliguemos a avanzar" ...