¿Puedo implementar una fuente de entropía (débil) en FPGA?


12

Estoy trabajando con una plataforma IoT en FPGA para evaluación y creación de prototipos. Necesito proporcionar soporte para TLS, y para eso necesito una fuente de entropía.

Entiendo que las verdaderas fuentes de ruido aleatorio son bastante especializadas (incluso prácticas) en FPGA, ya que el rendimiento del dispositivo a menudo es bastante bueno (y difícil de encontrar cualquier parámetro de esquina), pero puedo implementar un generador de secuencia pseudoaleatoria sin ningún tipo de problemas.

Solo tengo algunos canales de E / S estándar (uart, I2C, etc.), nada de lo que parece puede proporcionar incluso mucho para sembrar un PRBS, excepto tal vez una entrada de audio ADC. ¿Hay algún truco confiable para generar entropía en un FPGA que deba considerar?

Suponiendo que uso un PRBS, potencialmente puedo conectar una fuente de ruido externa que ciertamente podría usar como semilla. Me interesa saber cuánto agregaría esto realmente a mi implementación de TLS. ¿Sería esto confiable y seguro, o solo un poco mejor que usar una secuencia pseudoaleatoria fija? ¿Tendría que seguir sondeando la fuente de ruido externo para obtener más entropía?

Está bien si la fuente de entropía con la que termino no es cripto segura de manera adecuada (ya que esto es solo para la creación de prototipos), pero me gustaría entender la relación costo-calidad.

Respuestas:


6

Necesitas Puede implementar un generador aleatorio criptográficamente seguro si tiene dos cosas: un almacenamiento seguro regrabable y una semilla inicial. Es decir, es suficiente para sembrar el RNG una vez, y luego guardar su estado y trabajar fuera del estado guardado. No es lo ideal, sería mejor mezclar periódicamente la entropía, pero está bien, especialmente para un prototipo de desarrollo.

Es necesario tener un almacenamiento seguro regrabable. Si el dispositivo solo tiene ROM y almacenamiento no seguro, entonces este enfoque no es posible. Debe haber una ubicación donde pueda almacenar el estado RNG de tal manera que sus adversarios no puedan leerlo ni modificarlo.

La forma en que esto funciona es que, cuando el dispositivo se inicia, carga el estado RNG actual y lo usa para generar algunos bytes aleatorios suficientes para el doble del tamaño del estado RNG. Escriba la primera mitad como el nuevo estado RNG guardado y use la segunda mitad como el estado RNG inicial para la sesión actual. Con cualquier PRNG criptográficamente seguro, esto produce un PRNG criptográficamente seguro. Tenga en cuenta que es fundamental que no reutilice un estado RNG almacenado, por eso debe escribir un nuevo estado RNG independiente antes de comenzar a usar el RNG.

La inyección de entropía inicial puede ocurrir durante la fabricación o cuando el dispositivo está configurado. Por lo general, esas cosas suceden con una conexión a una PC que puede generar la entropía en nombre del dispositivo.


De acuerdo, en este contexto no creo que el almacenamiento deba ser seguro, dado que el modelo de uso no es un producto de consumo. Se puede suponer que cualquier atacante no tiene acceso físico a mi dispositivo (aunque pueden tener un dispositivo idéntico) . Entonces no puedo evitar un clon.
Sean Houlihane
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.