¿Dónde obtiene / entrop / random su entropía?

1

Leí una y otra vez cómo /dev/random obtiene su entropía de "eventos de hardware". ¿Qué son exactamente estos eventos de hardware y cómo podemos estar seguros de que es lo suficientemente aleatorio?

    
pregunta Anthony Kraft 28.10.2014 - 17:30
fuente

1 respuesta

3

Como dice @Rook, un buen punto de partida es el propio código fuente del kernel, precisamente el drivers/char/random.c archivo. Comienza con una descripción larga (como comentarios), incluido este pasaje:

  

Las fuentes de aleatoriedad del entorno incluyen inter-teclado   temporizaciones, temporizaciones inter-interrupción de algunas interrupciones, y otros   eventos que son (a) no deterministas y (b) difíciles para un   Observador externo a medida.

El caballo de batalla principal para el recolector de entropía es la función add_interrupt_randomness() , que debe invocarse para cada (o al menos la mayoría) de las interrupciones. Una interrupt es el método principal por el cual una pieza de hardware hace saber a la CPU que ha cambiado de estado, por ejemplo. que algunos datos nuevos están disponibles o, de manera similar, que el hardware está listo para procesar datos nuevos desde la CPU. P.ej. recibirá una interrupción cada vez que presione o suelte una tecla, mueva el mouse o reciba un paquete de red. También recibirá interrupciones del temporizador y de muchas otras fuentes. La "entropía" se obtiene principalmente al medir la hora exacta en que se recibe la interrupción: la CPU moderna tiene un contador de ciclos que se puede usar para obtener una noción de tiempo hasta la precisión de nanosegundos (precisión, no precisión, pero eso es lo suficientemente bueno aquí). El tipo de interrupciones también se incluye en la mezcla, pero la mayor parte de la entropía proviene de estos recuentos de ciclos.

Recuerde que "entropía" puede definirse como "aquello que el atacante no sabe". A través de medidas externas y simulación, el atacante puede obtener algunas nociones de lo que ocurre y cuándo en el núcleo, pero dentro de algunos límites. Por ejemplo, el atacante puede medir el tiempo de llegada de un paquete de red al microsegundo; aún se perderán 10 bits de entropía si el núcleo mide ese tiempo hasta el nanosegundo.

Además de las interrupciones, otras partes del kernel (p. ej., controladores de dispositivos) pueden ingresar datos adicionales al conjunto llamando a add_input_randomness() , en caso de que dichos controladores tengan acceso a datos que se consideran "aleatorios" de alguna manera (precisamente, en una que los atacantes no pueden adivinar).

Desde userland, también puede insertar datos manualmente escribiendo en /dev/random . Una buena fuente serían las imágenes de una cámara web: son muchos datos con mucho ruido térmico. Las distribuciones de Linux utilizan esta posibilidad de "empuje de la entropía externa" para mantener la entropía en los reinicios: cuando la máquina arranca, inyecta un "archivo semilla" que luego vuelve a crear desde /dev/urandom . Por lo tanto, una gran fuente de entropía para /dev/random es la entropía obtenida de encarnaciones anteriores de /dev/random (antes del último arranque).

    
respondido por el Tom Leek 28.10.2014 - 18:03
fuente

Lea otras preguntas en las etiquetas