Por lo general, la lectura de /dev/random
produce 100-500 bytes y bloques, esperando que se recopile una entropía.
¿Por qué la escritura de información /dev/random
por otros procesos no acelera la lectura? ¿No debería proporcionar la entropía requerida?
Puede ser útil para desbloquear gpg
o software similar sin reiniciarlo y volver a ingresarlo todo, para generar claves no súper secretas, etc.
/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" ...Respuestas:
Puede escribir
/dev/random
porque es parte de la forma de proporcionar bytes aleatorios adicionales/dev/random
, pero no es suficiente, también debe notificar al sistema que hay entropía adicional a través de unaioctl()
llamada.Necesitaba la misma funcionalidad para probar mi programa de configuración de tarjeta inteligente , ya que no quería esperar a que mi mouse / teclado generara lo suficiente para las varias llamadas
gpg
que se hicieron para cada ejecución de prueba. Lo que hice fue ejecutar el programa Python, que sigue, en paralelo a mis pruebas. Por supuesto, no debe usarse en absoluto para lagpg
generación de claves reales , ya que la cadena aleatoria no es aleatoria en absoluto (la información aleatoria generada por el sistema seguirá intercalada). Si tiene una fuente externa para establecer la cadenarandom
, entonces debería poder tener una entropía alta. Puede verificar la entropía con:El programa:
(No olvides matar el programa una vez que hayas terminado).
fuente
rngd
. Está disponible como paquete en la mayoría de las distribuciones (¿todas?).random = "3420348024823049823-984230942049832423l4j2l42j"
ver xkcd.com/221Por lo general, está diseñado por desarrolladores de kernel y documentado en
man 4 random
:fuente
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:
Dado que la iso de Arch Linux no tenía Python instalado, aquí también hay una versión de Perl:
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.
fuente
/dev/urandom
lugar de hacerlo/dev/hwrng
si no le importan los valores aleatorios inseguros .getrandom()
llamada al sistema se usa con hwrng en núcleos anteriores a 4.8-rc1 que produce un comportamiento de bloqueo. Una solución alternativa es hacerread()
dos veces desde/dev/random
, ver github.com/Lekensteyn/archdir/commit/…