stringtranslate.com

Fortuna (PRNG)

Fortuna es un generador de números pseudoaleatorios criptográficamente seguro (CS-PRNG) ideado por Bruce Schneier y Niels Ferguson y publicado en 2003. Recibe su nombre de Fortuna , la diosa romana del azar. FreeBSD utiliza Fortuna para /dev/random y /dev/urandom está vinculado simbólicamente a él desde FreeBSD 11. [1] Los sistemas operativos de Apple han cambiado a Fortuna desde el primer trimestre de 2020. [2]

Diseño

Fortuna es una familia de PRNG seguros; su diseño deja algunas opciones abiertas a los implementadores. Está compuesta por las siguientes partes:

Generador

El generador se basa en cualquier buen cifrador de bloques . Practical Cryptography sugiere AES , Serpent o Twofish . La idea básica es ejecutar el cifrado en modo contador , cifrando los valores sucesivos de un contador que se incrementa.

Con un cifrado de bloques de 128 bits, esto produciría desviaciones estadísticamente identificables de la aleatoriedad; por ejemplo, la generación de 2 64 bloques de 128 bits genuinamente aleatorios produciría en promedio alrededor de un par de bloques idénticos, pero no hay bloques repetidos en absoluto entre los primeros 2 128 producidos por un cifrado de 128 bits en modo contador. Por lo tanto, la clave se cambia periódicamente: no se genera más de 1 MiB de datos (2 16 bloques de 128 bits) sin un cambio de clave. El libro señala que los cifrados de bloques con un tamaño de bloque de 256 bits (o mayor), que no gozaron de mucha popularidad en ese momento, no tienen este problema estadístico.

La clave también se cambia después de cada solicitud de datos (por pequeña que sea), de modo que una futura vulneración de la clave no ponga en peligro los resultados del generador anterior. Esta propiedad a veces se describe como "borrado rápido de clave" o secreto de reenvío .

Acumulador de entropía

El acumulador de entropía está diseñado para ser resistente a ataques de "inyección", sin necesidad de estimadores sofisticados (e inevitablemente poco fiables) de entropía. Hay varios "pools" de entropía; cada fuente de entropía distribuye su supuesta entropía de manera uniforme entre los pools; y (aquí está la idea clave) en la n ª resiembra del generador, el pool k se utiliza sólo si n es un múltiplo de 2 k . Por lo tanto, el k º pool se utiliza sólo 1/2 k del tiempo. Los pools con números más altos, en otras palabras, (1) contribuyen a las resiembras con menos frecuencia pero (2) recogen una mayor cantidad de entropía entre resiembras. La resiembra se realiza mediante el hash de los pools de entropía especificados en la clave del cifrado de bloque utilizando dos iteraciones de SHA-256 .

Siembra

A menos que un atacante pueda controlar todas las fuentes de supuesta entropía que fluyen hacia el sistema (en cuyo caso ningún algoritmo puede salvarlo de ser comprometido), habrá algunas k para las cuales el k- ésimo grupo recopile suficiente entropía entre resiembras como para que una resiembra con ese grupo garantice la seguridad. Y ese grupo se utilizará en un intervalo proporcional a la cantidad de entropía en cuestión. Por lo tanto, el sistema siempre se recuperará de un ataque de inyección, y el tiempo que tarda en hacerlo es, como máximo, un factor constante mayor que el tiempo teórico que podría tardar si pudiéramos identificar qué fuentes de entropía estaban corruptas y cuáles no.

Esta conclusión depende de que haya suficientes pools. Fortuna utiliza 32 pools y limita la resiembra a un máximo de 10 veces por segundo. Quedarse sin pools llevaría entonces unos 13 años, tiempo que Ferguson y Schneier consideran suficiente para fines prácticos. Los implementadores más paranoicos, o aquellos que requieran la generación de datos aleatorios a un ritmo colosal y una resiembra frecuente correspondiente, podrían utilizar un mayor número de pools.

Alternativas

Fortuna se diferencia de la familia de algoritmos Yarrow de Schneier, Kelsey y Ferguson en su manejo del acumulador de entropía. Yarrow requería que cada fuente de entropía estuviera acompañada de un mecanismo para estimar la entropía real suministrada y utilizaba solo dos grupos; y su realización sugerida (llamada Yarrow-160 ) utilizaba SHA-1 en lugar de SHA-256 iterado .

Análisis

En 2014 se realizó un análisis y una propuesta de mejora de Fortuna. [3]

Véase también

Referencias

  1. ^ "random(4)". www.freebsd.org . Consultado el 1 de octubre de 2020 .
  2. ^ "Generación de números aleatorios". Soporte técnico de Apple . Consultado el 26 de octubre de 2020 .
  3. ^ Y. Dodis, A. Shamir, N. Stephens-Davidowitz, D. Wichs, "Cómo consumir su entropía y conservarla también: estrategias de recuperación óptimas para generadores de números aleatorios comprometidos", Archivo de impresión electrónica de criptología , Informe 2014/167, 2014. https://eprint.iacr.org/2014/167.pdf

General

Enlaces externos