¿Cómo me aseguro de que haya suficiente entropía en un sistema integrado en el primer arranque?

26

Estoy trabajando en un sistema integrado que generará una clave SSL la primera vez que se inicie el sistema. Me gustaría evitar los problemas descubiertos por Heninger et al. y Lenstra et al. Donde los sistemas embebidos con baja entropía tienen una tendencia a generar las mismas claves. Tengo entendido que Linux obtiene su entropía de las siguientes fuentes (diapositiva 19) :

  • Hardware RNG
  • teclado
  • ratón
  • Rotación de disco

El hardware integrado con el que estoy trabajando no tendrá ninguna de las fuentes de entropía anteriores.

¿Cuáles son las mejores prácticas para obtener una buena entropía en este caso? Me interesan las soluciones en las que se puede confiar en la producción (no estoy buscando experimentos científicos).

    
pregunta user28685 24.07.2013 - 23:01
fuente

2 respuestas

11

Se hizo y respondió una pregunta similar en Stackoverflow . Algunas formas de generar entropía:

  • averiguar el tiempo entre los paquetes de red;
  • use Fortuna ;
  • compruebe las variables del núcleo que son en su mayoría impredecibles (snmp, w, last, uptime, iostats, vmstats, etc.);
  • lea los sensores de temperatura u otros sensores que tenga en el dispositivo.

IBM también tiene una guía de mejores prácticas aquí . Sugiere:

  • Evalúe la cantidad de entropía del kernel disponible solo antes de generar claves . Evaluación de la cantidad de entropía del núcleo. disponible inmediatamente antes de que se generen las claves ayuda a asegurar aleatoriedad.

  • Asegúrese de que los procedimientos de fabricación no clonen claves o fuentes de entropía .

  • Evita o limita el acceso a la red . Mejorar la seguridad por evitar el acceso a Internet o limitar el acceso a la red, si es posible.

  • Genere, o inicialice, el grupo de entropía del kernel con datos específicos del nodo para mejorar la fortaleza de la clave .

  • Aumente el grupo de entropía del kernel agregando dispositivo incertidumbre en el momento del evento . Si construyes tus propios dispositivos del kernel, puede aumentar el pool de entropía del kernel, y por lo tanto aumentar la entropía, agregando incertidumbre en la sincronización de eventos del dispositivo.

  • Genere claves justo antes de que sean necesarias (en lugar de durante el primer arranque).

respondido por el Lucas Kauffman 24.07.2013 - 23:27
fuente
7

Hardware RNG

Definitivamente, deberías usarlo si lo tienes y presionarlo si tienes alguna opción en cuanto a qué hardware se va a usar. Un RNG de hardware no tiene que ser caro: la Raspberry Pi tiene uno, al igual que todas las tarjetas inteligentes.

Tenga en cuenta que la mayoría de los RNG de hardware se basan en osciladores que tardan un tiempo en volverse aleatorios después de aplicar la alimentación. Es posible que deba esperar o dibujar una cierta cantidad de bytes antes de que la entropía sea suficiente.

Inyección de entropía durante la fabricación

Si no tiene un RNG en su plataforma, pero tiene al menos un poco de almacenamiento persistente que no sea ROM, puede inyectar algo de entropía durante la producción.

Si el almacenamiento del dispositivo es interno, esto significa que necesita encenderlo una vez durante el proceso de producción y comunicarle unos pocos cientos de bytes. Prepare la imagen de código en su dispositivo para que esté lista para aceptar la inyección de entropía en el primer arranque. Cualquier PC en la cadena de producción podría producir.

Si el almacenamiento del dispositivo se fabrica por separado, puede inyectar la entropía en el código o la imagen de datos con la que se inicializa el almacenamiento.

Si tiene muy poca capacidad, ya sea debido al ancho de banda de la comunicación o debido a limitaciones de almacenamiento, la fuente de entropía puede duplicarse como una clave privada o secreta. Todo lo que sea exclusivo del dispositivo y que sea secreto lo hará.

Inyección de entropía a través de la red

Si no hay manera de inyectar la entropía durante la fase de fabricación, pero el dispositivo tiene acceso a la red cuando se pone en producción, puede inyectar la entropía en el primer arranque: haga que el dispositivo solicite la entropía de un servidor confiable. Sin embargo, este proceso es vulnerable a un ataque activo o pasivo de hombre en medio. El dispositivo puede autenticar el servidor de entropía (codificar una clave pública), pero no hay manera de proteger la comunicación de las escuchas ilegales, ya que el intruso puede reproducir todos los cálculos en el dispositivo.

Por lo tanto, si no tiene forma de inyectar entropía en la etapa de fabricación, debe involucrar a los usuarios del dispositivo en la inyección de entropía, cuando implementan el dispositivo. Por ejemplo, puede requerir que el dispositivo esté conectado a una PC de confianza donde el usuario ejecutaría el software que proporciona para inyectar entropía (generada desde la PC o obtenida de su servidor, no importaría mucho). Después de ese punto, el dispositivo solo sería tan confiable como la PC donde se generó la entropía.

    
respondido por el Gilles 24.07.2013 - 23:46
fuente

Lea otras preguntas en las etiquetas