linux - ¿Cómo funciona el kernel entropy pool?
random (3)
Aprecio la profundidad de la respuesta de jbr.
Agregando una actualización práctica para cualquiera que esté mirando actualmente un comando ipsec pki o algún bloqueo similar en un pool de entropía vacío:
Acabo de instalar rng-tools en otra ventana y mi comando pki se completó.
apt-get install rng-tools
Estoy usando /dev/urandom
para generar datos aleatorios para mis programas. Aprendí que /dev/random
puede estar vacío porque, a diferencia de /dev/urandom
, no usa SHA cuando no se generan suficientes bytes. /dev/random
usa " el grupo de entropía del kernel ". Aparentemente depende de los tiempos del teclado, los movimientos del mouse y los tiempos de IDE.
Pero, ¿cómo funciona esto realmente?
¿Y no sería posible "alimentar" el conjunto de entropía haciendo predecible el resultado / dev / random?
Estoy en medio de leer un documento en factorable y factorable nota de la sección donde dice:
"Para desarrolladores de bibliotecas: predeterminado en la configuración más segura. Tanto
OpenSSL
comoDropbear
forma predeterminada/dev/urandom
lugar de/dev/random
, yDropbear
usa una técnica de aleatoriedad de firma DSA menos segura aunque se disponga de una técnica más segura como una opción."
Los autores abordan el intercambio de una aplicación pendiente mientras se espera que la entropía genere /dev/random
para obtener una mejor seguridad en comparación con un resultado rápido, pero menos seguro, de /dev/urandom
.
Lo que está diciendo es acertado, sí teóricamente es posible alimentar la entropía en /dev/random
, pero necesitaría controlar muchas de las fuentes de "ruido" del kernel para que sea significativo. Puede ver la fuente de random.c , para ver de dónde /dev/random
recoge el ruido. Básicamente, si controlas un número significativo de fuentes de ruidos, entonces puedes adivinar qué están contribuyendo los otros al grupo de entropía.
Como /dev/urandom
es una cadena Hash sembrada de /dev/random
, entonces podrías predecir los siguientes números, si conocieras la semilla. Si tienes suficiente control sobre el conjunto de entropía, entonces desde la salida de /dev/urandom
podrías adivinar esta semilla, lo que te permitiría predecir todos los siguientes números de /dev/urandom
, pero solo si mantienes /dev/random
exhausted; de lo contrario, /dev/urandom
será resembrado.
Dicho esto, no he visto a nadie realmente hacerlo, ni siquiera en un entorno controlado. Por supuesto, esto no es una garantía, pero no me preocuparía.
Así que preferiría usar /dev/urandom
y garantizar que mi programa no se bloquee mientras espero la entropía, en lugar de usar /dev/random
y pedirle al usuario que haga tonterías, como mover el mouse o golpear el teclado.
Creo que deberías leer Sobre entropía y aleatoriedad de LWN, con suerte te calmará las preocupaciones :-).
En caso de que todavía esté preocupado, obtenga un HRNG .
Editar Aquí hay una pequeña nota sobre entropía:
Creo que el concepto de entropía es generalmente difícil de entender. Hay un artículo con más información sobre Wikipedia . Pero básicamente, en este caso, puedes leer la entropía como aleatoriedad.
Entonces, cómo lo veo, es que tienes una gran bolsa de bolas de colores, la entropía más alta en esta bolsa es más difícil predecir el siguiente color extraído de la bolsa.
En este contexto, su grupo de entropía es simplemente un conjunto de bytes aleatorios, donde uno no puede derivarse del anterior ni de ninguno de los otros. Lo que significa que tienes alta entropía.