El cifrado Hasty Pudding ( HPC ) es un cifrador de bloques de tamaño variable diseñado por Richard Schroeppel , que fue un candidato fallido en la competencia para seleccionar el Estándar de cifrado avanzado (AES) de EE. UU . Tiene una serie de propiedades inusuales para un cifrador de bloques: su tamaño de bloque de entrada y la longitud de clave son variables, e incluye un parámetro de entrada adicional llamado "spice" para usar como clave secundaria no secreta. El cifrado Hasty Pudding fue el único candidato AES diseñado exclusivamente por criptógrafos estadounidenses. [1] [2]
El código Hasty Pudding es de dominio público . [3]
El cifrado Hasty Pudding consta de cinco subcifrados diferentes: [4]
Todos 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 simples en palabras de 64 bits.
El cifrado Hasty Pudding puede tomar 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 claves utiliza el siguiente algoritmo: [4]
Cada uno de los subcifrados utiliza un algoritmo diferente, pero existen ciertas similitudes. Se utilizan tres entradas para determinar el texto cifrado: el texto simple (en varias palabras de 64 bits más un "fragmento"), el spice (ocho palabras de 64 bits, con valor predeterminado 0) y la tabla de claves. Las operaciones dentro del cifrado consisten en revolver , que combina variables internas de varias maneras con valores de la tabla de claves y spice a intervalos regulares. HPC-Short utiliza dos permutaciones fijas además, y HPC-Tiny consta de muchos subcasos especiales.
El descifrado implica deshacer los pasos del cifrado uno por uno. Muchas operaciones se pueden deshacer 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:
El cifrado Hasty Pudding también se puede utilizar para cifrar valores en un rango que no se traducen a cadenas con un número entero de bits; por ejemplo, puede cifrar un número de 0 a N generando otro número de 0 a N. Para ello, utiliza el subcifrado más pequeño que puede manejar la entrada como una cadena de bits y lo aplica a la entrada como una cadena de bits, repetidamente, hasta que la salida esté en el rango adecuado. [4]
Schroeppel afirmó que el cifrado Hasty Pudding era el candidato AES más rápido en una arquitectura de 64 bits; [5] Schroeppel afirmó que era dos veces más 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. [5] Los comentarios de otros no respaldaron esta opinión; por ejemplo, el análisis de Schneier et al. clasificó al cifrado Hasty Pudding en el cuarto lugar (376 ciclos) en una máquina de 64 bits, aunque para Rijndael y Twofish , el rendimiento solo fue estimado. [6] 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. [6] Schneier et al. y Schroeppel observaron que la velocidad del cifrado se vería significativamente afectada en una máquina de 32 bits debido al uso intensivo de operaciones de 64 bits, en particular desplazamientos de bits. [3] [6]
La configuración de la clave del cifrado Hasty Pudding fue calificada como relativamente lenta: 120.000 ciclos en un Pentium. [6]
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. [7]
Ha habido relativamente pocos resultados en los ataques al cifrado Hasty Pudding. Al principio del proceso AES, David Wagner observó que clases relativamente grandes de claves Hasty Pudding eran equivalentes en el sentido de que conducían a la misma tabla de claves. [8] 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 cada una 2 30 claves equivalentes. [9] En respuesta a este ataque, Schroeppel modificó el algoritmo de expansión de claves para incluir un paso adicional. [4]
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 los resultados de la investigación. [8] [10] Schroeppel ha ofrecido una botella de champán Dom Pérignon al mejor artículo que presente avances en el cifrado Hasty Pudding. [3] No pasó la segunda ronda de consideración para AES. [11]
El cifrado Hasty Pudding se considera el primer cifrado de bloque modificable . [12]