El controlador de aleatoriedad del kernel de Linux recopila la entropía del entorno. Debido a que habrá poca entropía durante el arranque, una semilla aleatoria a menudo se mantiene en /var/lib/misc/random-seed
o en una ubicación similar. Cuando el sistema se apaga, se escribe una nueva semilla aleatoria de 512 bytes en este archivo. Cuando el sistema se inicia, este archivo se escribe en /dev/urandom
, lo que lo agrega al grupo de entropía. El punto es permitir que el estado de la agrupación de entropía persista en los reinicios. Hay problemas:
-
Los datos escritos en el grupo de no bloqueos se colocan primero en el grupo de entrada, y solo se podrán utilizar después de recopilar suficiente entropía para una "reinicialización catastrófica". Esto significa que puede tomar unos minutos para que la entropía en la semilla aleatoria afecte realmente al CSPRNG.
-
Por la misma razón, si el sistema se inicia y luego se apaga en unos minutos, la nueva semilla escrita no tendrá entropía de la semilla anterior, lo que hace que sea mucho más fácil de predecir. Es probable que este sea un problema para los sistemas que pueden tener un tiempo de actividad muy bajo, ya que significa que restablecerán su semilla de entropía persistente con bastante frecuencia.
¿Mi análisis es correcto? ¿Cuáles son las implicaciones reales de estos problemas? Por ejemplo, ¿hay algún sistema de uso común (especialmente sistemas integrados) que requiera aleatoriedad impredecible unos minutos después del reinicio, o que tenga un tiempo de actividad muy corto?
En el controlador de aleatoriedad del kernel, escribiendo a cualquiera las agrupaciones de bloqueo o no bloqueado activan la operación random_write()
y dentro de él, write_pool()
con el grupo de entrada especificado como el argumento. El grupo de entrada se usa periódicamente para reiniciar el grupo de bloqueo a través de push_to_pool()
función de cola de trabajo. La agrupación sin bloqueo se reiniciará desde la agrupación de entrada cada 5 minutos cuando % co_de Se llama a% para extraer datos de la agrupación sin bloqueo (suponiendo que al menos 128 bits de entropía se hayan agregado a la agrupación de entrada desde la última reinicialización). Este flujo de información implica que la semilla aleatoria almacenada durante los reinicios solo afectará el contenido del grupo de bloqueo después de una reinicialización catastrófica (64 bits) y el CRNG sin bloqueo cada 5 minutos.