Py es un cifrado de flujo enviado a eSTREAM por Eli Biham y Jennifer Seberry . Es uno de los candidatos eSTREAM más rápidos con alrededor de 2.6 ciclos por byte en algunas plataformas. Tiene una estructura un poco como RC4 , pero agrega una matriz de 260 palabras de 32 bits que se indexan usando una permutación de bytes y produce 64 bits en cada ronda.
Los autores afirman que el nombre se pronuncia "Roo", una referencia al origen australiano del cifrado, leyendo las letras "Py" como cirílico (Ру) en lugar de caracteres latinos. Se entiende que esta pronunciación algo perversa es su respuesta, en broma, al nombre difícil de pronunciar Rijndael para el cifrado que se adoptó como Estándar de cifrado avanzado .
- La propuesta original de abril de 2005 incluía el cifrado Py y una versión simplificada Py6. Este último reduce el tamaño de algunas tablas internas, lo que proporciona un costo de programación de claves muy reducido, a expensas de una longitud máxima de salida más corta.
- En junio de 2006, los autores describieron Pypy (aún más confuso, medio- cirílico Pyру y por lo tanto pronunciado "Pyroo") como una variante opcional más fuerte. Esto omite una de las palabras de salida de cada iteración de Py y, por lo tanto, opera a un poco más de la mitad de la velocidad de Py. (En realidad, alrededor de 0,6 ×.)
- En enero de 2007, se cambió el algoritmo de programación clave, produciendo variantes "ajustadas" TPy, TPypy y TPy6. Para ser precisos, la primera fase (dependiente de la clave) no se modifica, pero la segunda fase (configuración IV) tiene un error corregido. Las funciones redondas que se utilizan para producir resultados son idénticas.
- En Indocrypt 2007 , Gautham Sekar , Souradyuti Paul y Bart Preneel propusieron dos nuevos cifrados RCR-32 y RCR-64 basados en los principios de diseño de Pypy y Py, respectivamente. Estos reemplazan una rotación variable en Py con una rotación fija, eliminando un ataque y acelerando ligeramente el cifrado. La programación de teclas TPy se utiliza sin modificaciones.
Ataques a la familia Py
A partir de 2006[actualizar], el mejor ataque criptoanalítico sobre Py (por Hongjun Wu y Bart Preneel ) puede, en algunas circunstancias (por ejemplo, cuando el IV es mucho más largo que la clave) recuperar la clave dadas secuencias de claves parciales para 2 24 IV seleccionados [1] .
En un escenario más difícil desde el punto de vista del atacante, dado solo texto plano conocido (en lugar de texto plano elegido), también hay un ataque distintivo en el flujo de claves (por Paul Crowley ) que requiere alrededor de 2 72 bytes de salida y un tiempo comparable. Esta es una mejora en un ataque presentado por Gautham Sekar , Souradyuti Paul y Bart Preneel que requiere 2 88 bytes. Todavía hay un debate sobre si estos ataques constituyen una ruptura académica de Py. Cuando los atacantes afirman que los ataques anteriores se pueden construir con una carga de trabajo menor que la búsqueda exhaustiva bajo las especificaciones de diseño de Py y, por lo tanto, es claramente una ruptura teórica del cifrado, los diseñadores descartan los ataques porque los límites de seguridad de Py limitan a cualquier atacante. a un total de 2 64 bytes de salida en todos los flujos de claves en todas partes. Una revisión reciente del artículo de Paul , Preneel y Sekar incluye una discusión detallada de este tema en la sección 9. No hay dudas sobre la legitimidad del ataque de Wu y Preneel.
Py fue seleccionado como Fase 2 Focus Candidate para el Perfil 1 (software) por el proyecto eSTREAM [2] pero no avanzó a la Fase 3 debido al ataque IV elegido por Wu y Preneel. [3] .
En enero de 2007, los diseñadores de Py propusieron tres nuevos cifrados, a saber, TPy, TPypy y TPy6, para eliminar los ataques anteriores. El TPy sigue siendo vulnerable frente a los ataques distintivos anteriores de Paul et al. (complejidad 2 88 ) y Crowley (complejidad 2 72 ), que no dependen del cronograma clave. El mejor ataque hasta ahora al TPypy, que se conjetura que es el más fuerte de la familia de cifrados Py, es el de Sekar et al. que es un ataque distintivo con complejidad de datos 2281 . Este ataque solo es significativo si el tamaño de clave de TPypy es superior a 281 bits.
Para eliminar los ataques a TPy y TPypy, Sekar , Paul y Preneel en Indocrypt 2007 presentaron propuestas para dos nuevos cifrados RCR-32 y RCR-64 . Hasta el momento no hay ataques contra el RCR-32 y RCR-64 .
Funciones redondas
Py se basa en la idea de "matrices deslizantes": las matrices se indexan en relación con un puntero de inicio, que avanza una palabra en cada ronda. Cuando se dispone de indexación de módulo (hardware y muchos procesadores de señales digitales ), estos se pueden implementar como búferes circulares . En software, estos se implementan más fácilmente como arreglos grandes. Cuando se alcanza el final de la matriz, las partes de trabajo se vuelven a copiar al principio y las operaciones continúan.
La matriz P de 256 bytes contiene una permutación de 256 entradas (cada byte aparece exactamente una vez), mientras que la matriz Y contiene 260 palabras de 32 bits.
#include #define ROTL32 (x, s) ((x) << (s) | (x) >> (32- (s)))uint8_t * P ; // P [0] a P [255] están activosuint32_t * Y ; // Y [-3] a Y [256] están activosuint32_t s ;uint32_t * salida ;while ( output_words - ) { int i = Y [ 185 ] % 256 ; P [ 256 ] = P [ i ]; // Esto efectivamente intercambia P [0] y P [i] P [ i ] = P [ 0 ]; // Luego copia P [0] a P [256] P ++ ; // P [1] anterior es P [0] nuevo, P [256] recién escrito es P [255] nuevo s + = Y [ P [ 72 ]] - Y [ P [ 239 ]]; s = ROTL32 ( s , ( P [ 116 ] + 18 ) % 32 ); * salida ++ = ( ROTL32 ( s , 25 ) ^ Y [ 256 ]) + Y [ P [ 26 ]]; // Esta línea omitida de Pypy y TPypy * salida ++ = ( s ^ Y [ -1 ] ) + Y [ P [ 208 ]]; Y [ 257 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ] ) + Y [ P [ 153 ]]; Y ++ ; // Prior P [-2] es nuevo P [-3], recién escrito P [257] es nuevo P [256]}
Cuando se requiere salida de bytes, Py especifica que las palabras de salida se convierten en little-endian.
La línea 17 se omite en Pypy, Tpypy y RCR-32.
RCR-32 y RCR-64 son idénticos a los anteriores, excepto que la línea 15 se cambia a una rotación fija a la izquierda de 19 bits.
Py6 tiene la misma estructura, pero las matrices P e Y se acortan a 64 bytes y 68 palabras, respectivamente. Las entradas P tienen solo 6 bits de longitud, un ahorro que podría aprovecharse en hardware dedicado. Las diversas compensaciones en P[]
y Y[]
, por supuesto, se modifican, formando el bucle interno:
while ( output_words - ) { int i = Y [ 43 ] % 64 ; P [ 64 ] = P [ i ]; P [ i ] = P [ 0 ]; P ++ ; s + = Y [ P [ 18 ]] - Y [ P [ 57 ]]; s = ROTL32 ( s , ( P [ 26 ] + 18 ) % 32 ); * salida ++ = ( ROTL32 ( s , 25 ) ^ Y [ 64 ]) + Y [ P [ 8 ]]; * salida ++ = ( s ^ Y [ -1 ]) + Y [ P [ 21 ]]; Y [ 65 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ]) + Y [ P [ 48 ]]; Y ++ ;}
enlaces externos
- Eli Biham , Jennifer Seberry , especificación Py ( PostScript )
- Eli Biham , Jennifer Seberry , Modificación de la configuración IV de la familia Py de cifrados de flujo: los cifrados TPy, TPypy y TPy6
- Página de eStream en Py
- Paul Crowley , Criptoanálisis de Py
- Souradyuti Paul , Bart Preneel , Gautham Sekar , Distinguir ataques al cifrado de flujo Py , FSE 2006.
- Gautham Sekar , Souradyuti Paul , Bart Preneel , Debilidades en los algoritmos de generación de bits pseudoaleatorios de los cifrados de flujo TPypy y TPy , informe IACR-ePrint.
- Souradyuti Paul , Bart Preneel , Sobre la (In) seguridad de los cifrados de flujo basados en matrices y adición modular (versión completa) , Asicrypt 2006.
- Gautham Sekar , Souradyuti Paul , Bart Preneel , Ataques de claves relacionadas a la familia Py de cifrados y un enfoque para reparar las debilidades , Indocrypt 2007.
- La página de Rijndael : las "Preguntas frecuentes de Rijndael" se parodian suavemente en el Apéndice B de la especificación Py.