Articulo de referencia

Py (cifrado)

Py es un cifrador de flujo presentado a eSTREAM por Eli Biham y Jennifer Seberry . Es uno de los candidatos más rápidos de eSTREAM, con un tiempo de procesamiento de aproximadam...

Py es un cifrador de flujo presentado a eSTREAM por Eli Biham y Jennifer Seberry . Es uno de los candidatos más rápidos de eSTREAM, con un tiempo de procesamiento de aproximadamente 2,6 ciclos por byte en algunas plataformas. Su estructura es similar a la de RC4 , pero añade una matriz de 260 palabras de 32 bits indexadas mediante una permutación de bytes, y genera 64 bits en cada ronda.

Los autores afirman que el nombre debe pronunciarse "Roo", en referencia al origen australiano del cifrado, al leer las letras "Py" como caracteres cirílicos (Ру) en lugar de latinos. Se entiende que esta pronunciación un tanto peculiar es su respuesta, en tono de broma, al nombre difícil de pronunciar Rijndael , con el que se adoptó el cifrado como Estándar de Cifrado Avanzado (ACE) .

  • La propuesta original de abril de 2005 incluía el cifrado Py y una versión simplificada, Py6. Esta última reduce el tamaño de algunas tablas internas, lo que disminuye considerablemente el coste de programación de claves, a costa de una longitud máxima de salida menor.
  • En junio de 2006, los autores describieron Pypy (aún más confuso, Pyру, que es mitad cirílico y por lo tanto se pronuncia "Pyroo") como una variante opcional más potente. Esta variante omite una de las palabras de salida en cada iteración de Py y, por lo tanto, funciona aproximadamente a 0,6 veces la velocidad de Py.
  • En enero de 2007, se modificó el algoritmo de programación de claves, dando lugar a las variantes "ajustadas" TPy, TPypy y TPy6. En concreto, la primera fase (dependiente de la clave) no se modificó, pero la segunda fase (configuración del vector de inicialización) presenta una corrección de errores. Las funciones de ronda utilizadas para generar la salida son idénticas.
  • En Indocrypt 2007 , Gautham Sekar , Souradyuti Paul y Bart Preneel propusieron dos nuevos algoritmos de cifrado , RCR-32 y RCR-64, basados ​​en los principios de diseño de Pypy y Py, respectivamente. Estos algoritmos reemplazan la rotación variable de Py por una rotación fija, eliminando una vulnerabilidad y acelerando ligeramente el cifrado. El esquema de claves de TPy se utiliza sin modificaciones.

Ataques a la familia Py

A partir de 2006El mejor ataque criptoanalítico contra Py (realizado por Hongjun Wu y Bart Preneel ) puede, bajo ciertas circunstancias (por ejemplo, cuando el IV es mucho más largo que la clave), recuperar la clave a partir de secuencias de claves parciales para 2²⁴ IV elegidos..

En un escenario más difícil desde el punto de vista del atacante, dado solo el texto plano conocido (en lugar del texto plano elegido), también hay un ataque distintivo en el flujo de claves (por Paul Crowley ) que requiere alrededor de 272 bytes de salida y un tiempo comparable. Esto es una mejora con respecto a un ataque presentado por Gautham Sekar , Souradyuti Paul y Bart Preneel que requiere 288 bytes. Todavía existe un debate sobre si estos ataques constituyen una ruptura teórica de Py. Cuando los atacantes afirman que los ataques anteriores pueden construirse 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 264 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 candidato prioritario de la Fase 2 para el Perfil 1 (software) por el proyecto eSTREAM.pero no avanzó a la Fase 3 debido al ataque IV elegido por Wu y Preneel..

En enero de 2007, los diseñadores de Py propusieron tres nuevos cifrados, TPy, TPypy y TPy6, para eliminar los ataques mencionados. El TPy sigue siendo vulnerable a los ataques de distinción de Paul et al. (complejidad 2⁸⁸ ) y Crowley (complejidad 2⁷² ) , que no dependen del esquema de claves. El mejor ataque hasta la fecha contra el TPypy, considerado el más robusto de la familia de cifrados Py, es el de Sekar et al., un ataque de distinción con una complejidad de datos de 2²⁸¹ . Este ataque solo es efectivo si el tamaño de la clave del TPypy supera los 281 bits.

Para eliminar los ataques contra TPy y TPypy, Sekar , Paul y Preneel presentaron en Indocrypt 2007 propuestas para dos nuevos cifrados: RCR-32 y RCR-64 . Hasta el momento, no se han registrado ataques contra RCR-32 ni RCR-64 .

Funciones redondas

Py se basa en el concepto de "matrices deslizantes": las matrices se indexan con respecto a un puntero inicial, que avanza una palabra en cada iteración. Donde se dispone de indexación modular (hardware y muchos procesadores de señales digitales ), estas se pueden implementar como búferes circulares . En software, la implementación más sencilla consiste en matrices grandes. Al llegar al final de la matriz, las partes con datos se copian 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 <stdint.h>#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 ;mientras ( palabras_de_salida -- ) {int i = Y [ 185 ] % 256 ;P [ 256 ] = P [ i ]; // Esto intercambia efectivamente P[0] y P[i]P [ i ] = P [ 0 ]; // Luego copia P[0] a P[256]P ++ ; // El P[1] anterior es el nuevo P[0], el P[256] recién escrito es el nuevo P[255]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 se omitió en Pypy y TPypy* salida ++ = ( s ^ Y [ -1 ] ) + Y [ P [ 208 ]];Y [ 257 ] = ( ROTL32 ( s , 14 ) ^ Y [ -3 ] ) + Y [ P [ 153 ]];Y ++ ; // El P[-2] anterior es el nuevo P[-3], el P[257] recién escrito es el nuevo P[256]}

Cuando se requiere una salida en bytes, Py especifica que las palabras de salida se conviertan al formato 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 izquierda fija de 19 bits.

Py6 tiene la misma estructura, pero los arreglos 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. Los distintos desplazamientos hacia P[]y Y[]se modifican, por supuesto, haciendo que el bucle interno:

mientras ( palabras_de_salida -- ) {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 ++ ;}
Obtenido de " https://en.wikipedia.org/w/index.php?title=Py_(cipher)&oldid=1315755392 "