HPC ( Hasty Pudding Cipher ) es un algoritmo criptográfico simétrico de bloques creado por el famoso criptólogo y matemático estadounidense Richard Schreppel de la Universidad Estatal de Arizona en 1998 . Las dos primeras palabras del nombre del criptoalgoritmo se pueden traducir como "flan de harina " . HPC recibió un nombre tan extraño, aparentemente, debido a la abundancia de transformaciones numéricas "astutas", lo que complica significativamente su análisis .
HPC se basa en la celda Feistel y tiene una característica interesante: el tamaño del bloque cifrado y la clave de cifrado no están limitados por nada. De hecho, el algoritmo HPC consta de cinco subalgoritmos diferentes (pero relacionados), cada uno de los cuales está diseñado para cifrar bloques de diferentes longitudes:
Nombre | Tamaño de bloque en bits |
---|---|
HPC diminuto | 0 - 35 |
HPC corto | 36 - 64 |
Medio HPC | 65 - 128 |
HPC largo | 129 - 512 |
HPC extendido | 513 y más |
El cifrado se realiza en 8 rondas. Un bloque cifrado de 128 bits se escribe en dos registros de 64 bits y , después de lo cual se realiza una gran cantidad de operaciones matemáticas diferentes en ellos:
Designacion | Operación |
---|---|
adición módulo 2 | |
adición de módulo | |
resta módulo | |
girar a la izquierda n bits | |
girar a la derecha n bits | |
poner a cero el byte bajo de un bloque de 64 bits | |
"y" lógico bit a bit |
Además, algunas constantes también toman parte en la ronda :
Después de completar 8 rondas de transformación, se realizan 2 operaciones más:
El descifrado se realiza realizando las operaciones inversas en orden inverso.
La tarea del procedimiento de expansión de clave es generar una clave expandida , que es una matriz de 256 palabras de 64 bits . Es claro que cada uno de los subalgoritmos debe tener su propio procedimiento. Conocer una de las matrices de claves extendidas no permite calcular las otras matrices ni la clave de cifrado en sí . Sin embargo, con un tamaño fijo de bloques encriptados, es suficiente generar una clave extendida una vez para este subalgoritmo.
Las 253 palabras restantes de la clave se inicializan de la siguiente manera:
Se realiza la adición de módulo 2 bit a bit de la clave de cifrado y la matriz de claves extendida inicializada , pero no más de 128 palabras.
Se realiza la función de reproducción aleatoria de datos de clave extendida, lo que garantiza que cada bit de la clave afecte a cada bit de la clave extendida :
Paso 1Los registros se están inicializando :
Para cada palabra de la clave extendida , se realiza la operación que se muestra en la figura. Para mejorar el efecto, el autor del algoritmo recomienda 3 rondas de mezcla.
Si el tamaño de la clave supera las 128 palabras de 64 bits , se repiten los pasos 2 y 3 para cada bloque de palabras 128. Por lo tanto, el procedimiento para mezclar claves en orden de complejidad es aproximadamente similar al procedimiento de cifrado en sí .
Su propósito es modificar el resultado del cifrado con los mismos bloques y claves de entrada . La clave adicional puede ser secreta, lo que aumenta la cantidad real de información clave, pero en un algoritmo con una longitud de clave ilimitada , esta posibilidad puede ser innecesaria. En tales casos, simplemente puede restablecer la clave adicional .
David Wagner vulnerabilidad en cifrado HPC [7] y más tarde Carl D'Halluin, Gert Bijnens, Bart Presnel y Vincent Rayman publicaron un artículo [8] que lo confirma. Resultó que aproximadamente cada clave 256 del algoritmo tiene 230 claves equivalentes . Sin embargo, esta deficiencia fue corregida rápidamente por el autor incluso antes de resumir los resultados de la primera ronda de la competencia.
Con este tipo de ataque , un atacante, que tiene acceso a pares de texto sin formato y texto cifrado, puede, mediante la manipulación de la matriz de la clave adicional "Spice", observar cómo cambia el texto sin formato o el texto cifrado en cifrados posteriores . Sin embargo, según el autor, aún no se han observado ataques de este tipo, y trabajar en esta área requiere del esfuerzo de la comunidad criptoanalítica. [2]
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |