El algoritmo Yarrow es un generador de números pseudoaleatorios criptográficamente seguro . Milenrama fue elegido como el nombre , cuyos tallos secos sirven como fuente de entropía en la adivinación [1] .
El algoritmo fue desarrollado en agosto de 1999 por Bruce Schneier , John Kelsey y Niels Ferguson de Counterpane Internet Security.[2] . El algoritmo no está patentado ni está libre de regalías , y no se requiere licencia para usarlo. Yarrow se incluye en febrero de2002 con FreeBSD , OpenBSD y Mac OS X comouna implementación del dispositivo /dev/random [3] .
El desarrollo posterior de Yarrow fue la creación por parte de Fergus y Schneier del algoritmo Fortuna , descrito en su libro "Criptografía práctica" [4] .
La mayoría de las aplicaciones criptográficas modernas utilizan números aleatorios. Son necesarios para generar claves , obtener números aleatorios de una sola vez , crear un salt , etc. Si los números aleatorios no son seguros, esto conlleva la aparición de vulnerabilidades en las aplicaciones que no se pueden cerrar utilizando varios algoritmos y protocolos [5] .
En 1998, los creadores de Yarrow realizaron una investigación sobre otros PRNG e identificaron una serie de vulnerabilidades en ellos. Las secuencias de números aleatorios que producían no eran seguras para aplicaciones criptográficas [5] .
Actualmente, el algoritmo Yarrow es un generador de números pseudoaleatorios altamente seguro. Esto le permite utilizarlo para una amplia gama de tareas: encriptación , firma electrónica , integridad de la información , etc. [5] .
Durante el desarrollo del algoritmo, los creadores se centraron en los siguientes aspectos [6] :
El algoritmo Yarrow consta de 4 partes independientes [7] :
La acumulación de entropía es un proceso en el que un PRNG adquiere un nuevo estado interno indescifrable [8] . En este algoritmo, la entropía se acumula en dos grupos: rápido y lento [9] . En este contexto, un grupo es un almacén de bits inicializados y listos para usar. La piscina rápida proporciona complicaciones clave frecuentes . Esto asegura que el compromiso clave tenga una duración corta. El grupo lento proporciona complicaciones clave raras pero significativas. Esto es necesario para garantizar que se obtenga una complicación segura incluso en los casos en que las estimaciones de entropía estén muy sobrestimadas. Las muestras de entrada se envían alternativamente a los grupos rápido y lento [10] .
Mecanismo de complicaciónEl mecanismo de complicación conecta el almacenamiento de entropía con el mecanismo de generación. Cuando el mecanismo de control de complejidad determina que se necesita complejidad, entonces el motor de complejidad, utilizando información de uno o ambos grupos, actualiza la clave que utiliza el mecanismo de generación. Por lo tanto, si el atacante no conoce la clave actual o los grupos, entonces la clave será desconocida para él después de la complicación. También es posible que la complejidad requiera una gran cantidad de recursos para minimizar el éxito de un ataque basado en adivinar los valores de entrada [11] .
Para generar una nueva clave , la complejidad del grupo rápido utiliza la clave actual y los valores hash de todas las entradas del grupo rápido desde la última complejidad de la clave. Una vez hecho esto, la entropía estimapara el grupo rápido se establecerá en cero [11] [12] .
La complicación del grupo lento usa la clave actual y los valores hash de las entradas del grupo rápido y lento. Después de generar una nueva clave, las estimaciones de entropía para ambos grupos se restablecen a cero [13] .
Mecanismo de generaciónEl mecanismo de generación da a la salida una secuencia de números pseudoaleatorios. Debe ser tal que un atacante que no conozca la clave del generador no pueda distinguirla de una secuencia de bits aleatoria .[14] .
El mecanismo de generación debe tener las siguientes propiedades [15] :
Para elegir el tiempo de sofisticación, el mecanismo de control debe tener en cuenta varios factores. Por ejemplo, cambiar la clave con demasiada frecuencia hace que sea más probable un ataque de suposición iterativo [16] . Demasiado lento, por el contrario, da más información al atacante que comprometió la clave. Por lo tanto, el mecanismo de control debe ser capaz de encontrar un término medio entre estas dos condiciones [17] .
A medida que llegan las muestras en cada piscinase almacenan las estimaciones de entropía para cada fuente. Tan pronto como esta estimación para cualquier fuente alcanza el valor límite, hay una complicación del grupo rápido. En la gran mayoría de los sistemas, esto sucede muchas veces por hora. Una complicación del grupo lento ocurre cuando las puntuaciones de cualquiera de las fuentes en el grupo lento superan un umbral [17] .
En Yarrow-160, este límite es de 100 bits para el grupo rápido y de 160 bits para el lento. De forma predeterminada, al menos dos fuentes diferentes en el grupo lento deben tener más de 160 bits para que se produzcan complicaciones en el grupo lento [18] .
Una posible implementación del algoritmo Yarrow es Yarrow-160. La idea principal de este algoritmo es el uso de una función hash unidireccional y un cifrado de bloque [19] . Si ambos algoritmos son seguros y el PRNG recibe suficiente entropía inicial , el resultado será una fuerte secuencia de números pseudoaleatorios [20] .
La función hash debe tener las siguientes propiedades [21] :
Yarrow-160 usa el algoritmo SHA-1 como [19] .
El cifrado de bloque debe tener las siguientes propiedades [22] :
Yarrow-160 usa el algoritmo 3-KEY Triple DES como [19] .
El generador se basa en el uso de un cifrado de bloque en modo contador (ver Fig. 2) [23] .
Hay un valor de contador de n bits . Para generar los siguientes bits de la secuencia pseudoaleatoria, el contador se incrementa en 1 y se cifra con un cifrado de bloque utilizando la clave [24] :
donde es la salida del PRNG , y es el valor actual de la clave .
Si en algún momento la clave se ve comprometida , entonces es necesario evitar la fuga de valores de salida anteriores que un atacante puede obtener. Este mecanismo de generación no tiene protección contra este tipo de ataques, por lo que adicionalmente se calcula el número de bloques de salida PRNG. Tan pronto como se alcanza un cierto límite ( la configuración de seguridad del sistema, ), luego se genera una salida PRNG de bits, que luego se usa como una nueva clave [15] .
En Yarrow-160 es 10. Este parámetro se establece deliberadamente en un valor bajo para minimizar el número de salidas que se pueden aprender mediante un ataque de retroceso [ 25 ] .
El tiempo de ejecución del mecanismo de complicación depende del parámetro . Este parámetro se puede fijar o cambiar dinámicamente [26] .
Este mecanismo consta de los siguientes pasos [26] :
Una función se define en términos de una función de la siguiente manera [27] :
De hecho, es una función de adaptación de tamaño, es decir, convierte una entrada de cualquier longitud en una salida de una longitud específica. Si la entrada recibió más datos de los esperados, la función toma los bits iniciales. Si los tamaños de la entrada y la salida son iguales, entonces la función es una función de identidad . Si el tamaño de los datos de entrada es inferior al esperado, se generan bits adicionales utilizando esta función hash . Este es un algoritmo PRNG bastante costoso en términos de cómputo, pero para tamaños pequeños se puede usar sin problemas [28] .
Establecer un nuevo valor para el contador no se hace por razones de seguridad, sino para proporcionar una mayor flexibilidad de implementación y mantener la compatibilidad entre diferentes implementaciones [26] .
En la implementación actual del algoritmo Yarrow-160, el tamaño de los gruposla acumulación de entropía está limitada a 160 bits. Se sabe que los ataques al algoritmo 3-KEY Triple DES son más efectivos que la búsqueda exhaustiva . Sin embargo, incluso para los ataques de backtracking de fuerza bruta, las claves cambian con bastante frecuencia y 160 bits son suficientes para garantizar la seguridad en la práctica [29] .
El tema de investigación en curso es la mejora de los mecanismos de estimación de la entropía. Según los creadores de Yarrow-160, el algoritmo puede ser vulnerable precisamente debido a las malas estimaciones de entropía, y no desde el punto de vista del criptoanálisis [30] .
Los creadores tienen planes para el futuro para utilizar el nuevo estándar de cifrado de bloques AES . El nuevo cifrado de bloque puede encajar fácilmente en el diseño básico del algoritmo Yarrow. Sin embargo, como enfatizan los desarrolladores, será necesario cambiar la función hash de complejidad o crear una nueva función hash para garantizar que el grupo de entropía se llene con más de 160 bits. Para AES con 128 bits, esto no será un problema, pero para AES con 192 o 256 bits, este problema tendrá que resolverse. Cabe señalar que la estructura básica del algoritmo Yarrow es la combinación de un cifrado de bloque AES y una función hash de 256 bits [31] .
El conjunto de reglas para el mecanismo de manejo de complicaciones aún es provisional, sin embargo, un estudio adicional puede mejorarlo. Por esta razón, es objeto de investigación en curso [30] .