El cifrado Hasty Pudding ( HPC ) es un cifrado de bloques de tamaño variable diseñado por Richard Schroeppel , que no resultó elegido en la competencia para la selección del Estándar de Cifrado Avanzado (AES) de EE. UU . Posee varias propiedades inusuales para un cifrado de bloques: el tamaño de su bloque de entrada y la longitud de su clave son variables, e incluye un parámetro de entrada adicional llamado "spice" para su uso como clave secundaria no secreta. El cifrado Hasty Pudding fue el único candidato a AES diseñado exclusivamente por criptógrafos estadounidenses. [ 1 ] [ 2 ]
El cifrado Hasty Pudding es de dominio público , [ 3 ] y existen implementaciones de código abierto . [ 4 ]
El cifrado
El cifrado Hasty Pudding consta de 5 subcifrados diferentes: [ 5 ]
Los algoritmos de cifrado Hasty Pudding utilizan internamente palabras de 64 bits. El cifrado está diseñado para ejecutarse en máquinas de 64 bits , que pueden realizar fácilmente operaciones sencillas con palabras de 64 bits.
Expansión clave
El cifrado Hasty Pudding puede aceptar una clave de cualquier número de bits para cualquiera de los cinco subcifrados. El cifrado en sí utiliza una tabla de claves de 16 384 bits (256 palabras de 64 bits). Para derivar la tabla de claves a partir de la clave, la función de expansión de clave utiliza el siguiente algoritmo: [ 5 ]
- Las tres primeras palabras, KX [0], KX [1] y KX [2], se establecen en función de constantes, el subcifrado y la longitud de la clave. KX [1] se calcula mediante una multiplicación; las demás operaciones implicadas son una suma y un desplazamiento de bits.
- Cada palabra sucesiva, KX [ i ], se determina a partir de las tres palabras anteriores mediante una fórmula recursiva eficiente.
- Los bits de la clave se combinan mediante la operación XOR con los bits de la tabla de claves, comenzando en KX [0], hasta que se hayan utilizado todos los bits de la clave. (Las claves de más de 8192 bits utilizan un procedimiento más complejo).
- Se realizan varias pasadas sobre la tabla de claves. En cada pasada, se aplica una "función de mezcla" a cada palabra de la tabla, en secuencia. Esta función utiliza ocho variables internas y emplea 14 operaciones lógicas de bits, 5 desplazamientos de bits y 14 sumas/restas. Cada uso de la función de mezcla modifica una palabra de la tabla de claves, en función de su valor anterior, los valores de otras palabras y las variables internas de la función. (Por defecto, se realizan 3 pasadas).
Cifrado y descifrado
Cada uno de los subcifrados utiliza un algoritmo diferente, pero existen ciertas similitudes. Se utilizan tres entradas para determinar el texto cifrado: el texto plano (en varias palabras de 64 bits más un "fragmento"), la especia (ocho palabras de 64 bits, con valor predeterminado 0) y la tabla de claves. Las operaciones dentro del cifrado consisten en mezclar variables internas de diversas maneras con valores de la tabla de claves y la especia a intervalos regulares. HPC-Short utiliza dos permutaciones fijas adicionales, y HPC-Tiny consta de muchos subcasos especiales.
El descifrado implica deshacer los pasos del cifrado uno por uno. Muchas operaciones se deshacen fácilmente (por ejemplo, s 0 = s 0 + s 1 se deshace calculando s 0 = s 0 − s 1 ). Otras operaciones son más complejas de deshacer. Algunas de las ideas involucradas incluyen:
- Una operación como x = x ⊕ ( x >> 17) se deshace mediante un proceso de dos pasos: (1) x = x ⊕ ( x >> 17), seguido de (2) x = x ⊕ ( x >> 34).
- El cifrado utiliza búsquedas dependientes del valor en la tabla de claves. Estas búsquedas se pueden deshacer, ya que dependen únicamente de los últimos 8 bits de una variable. Cuando es necesario consultar el valor en la tabla de claves durante el descifrado, los últimos 8 bits del valor en un punto anterior del cálculo son predecibles, incluso cuando no se pueden deshacer todas las operaciones sin el valor de la tabla de claves. Por ejemplo, si la búsqueda de k se basa en los últimos 8 bits de x , entonces, cuando queremos deshacer un paso como x = x ⊕ ( k << 8), podemos consultar k observando que los últimos 8 bits de x no se ven afectados por esta operación.
El cifrado Hasty Pudding también puede utilizarse para cifrar valores en un rango que no se traducen en cadenas con un número entero de bits; por ejemplo, puede cifrar un número de 0 a N produciendo otro número de 0 a N. Esto se logra utilizando el subcifrado más pequeño que puede procesar la entrada como una cadena de bits y aplicándolo repetidamente a la entrada como una cadena de bits hasta que la salida esté dentro del rango adecuado. [ 5 ]
Actuación
Schroeppel afirmó que el cifrado Hasty Pudding era el candidato AES más rápido en una arquitectura de 64 bits; [ 6 ] Schroeppel afirmó que era el doble de rápido que su competidor más cercano, DFC , y tres veces más rápido que los otros candidatos, y que su rendimiento en una máquina de 32 bits era adecuado. [ 6 ] Los comentarios de otros no respaldaron esta opinión; por ejemplo, el análisis de Schneier et al. clasificó al cifrado Hasty Pudding como el cuarto mejor (376 ciclos) en una máquina de 64 bits, aunque para Rijndael y Twofish , el rendimiento solo fue estimado. [ 7 ] En un Pentium de 32 bits , el cifrado Hasty Pudding fue calificado por Schneier et al. en 1600 ciclos de reloj, el décimo mejor de los 15 candidatos. [ 7 ] Schneier et al. y Schroeppel observaron que la velocidad del cifrado se vería significativamente afectada en una máquina de 32 bits debido a su uso intensivo de operaciones de 64 bits, en particular desplazamientos de bits. [ 3 ] [ 7 ]
La configuración de claves del cifrado Hasty Pudding se consideró relativamente lenta; 120 000 ciclos en un Pentium. [ 7 ]
El cifrado fue criticado por su rendimiento en tarjetas inteligentes . En concreto, algunos comentarios señalaron la dificultad de mantener más de 2 KB de RAM para la tabla de claves. [ 8 ]
Trabajo adicional
Se han obtenido relativamente pocos resultados sobre ataques al cifrado Hasty Pudding. Al principio del proceso AES, David Wagner observó que clases relativamente grandes de claves Hasty Pudding eran equivalentes, ya que conducían a la misma tabla de claves. [ 9 ] Esto fue ampliado por D'Halluin et al., quienes observaron que para claves de 128 bits, aproximadamente 2 120 claves son claves débiles que tienen 2 30 claves equivalentes cada una. [ 10 ] En respuesta a este ataque, Schroeppel modificó el algoritmo de expansión de claves para incluir un paso adicional. [ 5 ]
A pesar de la relativa falta de criptoanálisis, el cifrado Hasty Pudding fue criticado por su diseño difícil de entender y su falta de fundamento en resultados de investigación. [ 9 ] [ 11 ] Schroeppel ofreció una botella de champán Dom Pérignon al mejor artículo que presentara avances sobre el cifrado Hasty Pudding. [ 3 ] No pasó la segunda ronda de consideración para AES. [ 12 ]
El cifrado Hasty Pudding se considera el primer cifrado de bloques modificable . [ 13 ]
Véase también
Referencias
- ↑ Eli Biham , Una nota sobre la comparación de los candidatos de AES , abril de 1999, comentario público sobre AES.
- ↑ Susan Landau , Seguridad de las comunicaciones para el siglo XXI: El estándar de cifrado avanzado , Notices of the AMS, vol. 47, número 4, 2000.
- 1 2 3 Rich Schroeppel y Hilarie Orman, Una descripción general del cifrado Hasty Pudding , julio de 1998.
- ↑ iscgar/hasty-pudding en GitHub .
- 1 2 3 4 Schroeppel, Rich (junio de 1998), Especificación del cifrado Hasty Pudding ( edición revisada de mayo de 1999), archivado del original el 17 de julio de 2011 , recuperado el 10 de junio de 2009
- 1 2 Rich Schroeppel, The Hasty Pudding Cipher: One Year Later , consultado el 9-01-2008
- 1 2 3 4 Bruce Schneier , John Kelsey , Doug Whiting , David Wagner , Chris Hall y Niels Ferguson , Comparación del rendimiento de las presentaciones de la AES , Segunda Conferencia de Candidatos de la AES, 1999.
- ↑ Emanoil Daneliuc, Comentario público sobre los candidatos de AES , febrero de 1999.
- 1 2 David Wagner, Claves equivalentes para HPC , charla en sesión informal en la 2ª Conferencia AES, Roma , marzo de 1999.
- ^ Carl D'Halluin, Gert Bijnens, Bart Preneel y Vincent Rijmen , Claves equivalentes de HPC , Avances en criptología - Actas de ASIACRYPT 1999, 1999.
- ↑ Olivier Baudron, Henri Gilbert , Louis Granboulan, Helena Handschuh , Antoine Joux , Phong Nguyen , Fabrice Noilhan, David Pointcheval , Thomas Pornin, Guillaume Poupard, Jacques Stern y Serge Vaudenay , Informe sobre los candidatos de la AES , Segunda Conferencia de la AES, marzo de 1999.
- ↑ James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr, Morris Dworkin, James Foti y Edward Roback, Informe sobre el desarrollo del estándar de cifrado avanzado (AES) ,publicación oficial del NIST , 2 de octubre de 2000.
- ↑ Moses Liskov, Ronald Rivest y David Wagner , Cifrados de bloques modificables , en Avances en criptología : Actas de CRYPTO '02, 2002.
- Cifrados de bloques
