¿Cuánto tiempo para volver a sembrar / dev / urandom en una máquina virtual?

14

He leído mucho sobre la distinción entre /dev/random y /dev/urandom . Entiendo que el consejo que prevalece es usar /dev/urandom . La explicación, que 256 bits de aleatoriedad "adecuada" es todo lo que necesita para casi cualquier aplicación criptográfica, tiene sentido para mí.
Un par de fuentes útiles:
- enlace
- enlace

El estado de una máquina virtual (VM) o un CD en vivo justo después del primer arranque a veces se identifica como un caso de borde inusual para esta guía, ya que /dev/urandom puede no haber sido correctamente sembrado.

En el contexto de todos los otros usos posibles de /dev/urandom , puedo ver que este es un caso de borde. Sin embargo, dado que está utilizando una VM por primera vez, parece plausible que una de las primeras cosas que podría querer hacer es llamar a /dev/urandom , por ejemplo. para generar claves SSH.

Entonces, si asumes lo peor de tu máquina virtual (por ejemplo, que fue clonada, o que después de reiniciar, los randoms recién sembrados no son buenos), ¿qué podrías hacer para asegurarte de que /dev/urandom es bueno?

Lo que hay que hacer laziest es dejar que la VM se quede ejecutando por un tiempo, hasta que eventos aleatorios hayan vuelto a sembrar el grupo de entrada. La parte incómoda es que una máquina virtual inactiva hace esto muy lentamente.

Quería probar cuánto tiempo demora esto, y traté de hacerlo de la siguiente manera:

Este comando extrae 32 bytes / 256 bits de la agrupación (y se muestra en hexadecimal)
head -c 32 </dev/random | xxd -p

Una vez que el recuento de entropía del grupo de entrada haya pasado a niveles mínimos (visibles con cat /proc/sys/kernel/random/entropy_avail ), el comando anterior se bloqueará hasta que nuevos eventos aleatorios ingresen al grupo de entrada. Eso me sugiere que si ejecutamos el comando anterior repetidamente, lo cronometramos y escribimos los resultados en un archivo llamado randomtest , indicará cuánto tiempo lleva rellenar el grupo de entrada.

Intenté escribir un comando de una línea que lo hace:
for n in {1..10}; do (/usr/bin/time -f "%E Real" sh -c 'printf "%-10s" $(head -c 32 </dev/random | xxd -p)' 2>&1) >> randomtest; done

Más fácilmente:

for n in {1..10};
do (/usr/bin/time -f "%E Real" sh -c \
    'printf "%-10s" $(head -c 32 </dev/random | xxd -p)' 2>&1) \
    >> randomtest; 
done

Sé que los procesos de inicio (incluso el comando cat anterior) reducen el grupo de entrada, por lo que esto proporcionará una estimación conservadora. Para lo que vale, dejé que el comando anterior se ejecutara en una máquina virtual inactiva, y el tiempo entre las nuevas secuencias de 32 bytes fue de 15-20 minutos cada uno.

Mis preguntas:

  • ¿La salida de este comando prueba con éxito lo que creo que hace?
  • ¿Existe una forma mucho más sencilla de probar lo mismo?
  • ¿Existe una forma diferente / mejor 'perezosa' de actualizar el grupo de entrada y volver a generar /dev/urandom que dejar que la VM quede inactiva?
pregunta SauceCode 15.03.2016 - 14:05
fuente

2 respuestas

5

No soy un experto en los matices entre urandom y random , pero según su descripción, parece que su prueba está aproximando correctamente el tiempo para rellenar el grupo de entrada. No tengo conocimiento de ninguna herramienta que realice este tipo de pruebas.

Sin embargo, hay una mejor manera de reiniciar urandom para evitar que el estado obsoleto afecte la calidad de los datos aleatorios, y eso es escribir datos aleatorios en urandom .

Esto se puede hacer en proveedores en la nube usando cloud-init y en máquinas virtuales en el momento del arranque ejecutando algunos metadatos de instancia a través de una función hash y escribiéndolos en urandom . Esto también podría ser parte de una solución de administración de la configuración con Chef, Ansible, Puppet, etc. y obtener una semilla aleatoria de su máquina local.

Tenga en cuenta que esto no aumenta el recuento general de entropía, simplemente establece una semilla más fresca. Desde man 4 random

  

Escribir en / dev / random o / dev / urandom actualizará el grupo de entropía          con los datos escritos, pero esto no dará lugar a una mayor entropía          contar. Esto significa que impactará los contenidos leídos de ambos          archivos, pero no hará lecturas de / dev / random más rápido.

    
respondido por el Matt Surabian 21.03.2016 - 20:03
fuente
1

Si no tiene un hardware rng , puede proporcionar la entropía de vm ejecutando haveged como un daemon en el host .

Lo uso en mis scripts de instalación de Alpine Linux para proporcionar suficiente entropía para crear un sistema de archivos luks en Una nueva instalación.

    
respondido por el Stuart Cardall 11.09.2016 - 23:52
fuente

Lea otras preguntas en las etiquetas