HC-256 es un sistema de cifrado de flujo desarrollado por el criptógrafo Hongjun Wu del Instituto de Investigación de Infocomunicación en Singapur. Publicado por primera vez en 2004. La versión de 128 bits se presentó al concurso eSTREAM , cuyo objetivo era crear estándares europeos para los sistemas de cifrado de flujo. El algoritmo fue uno de los cuatro finalistas en la primera competencia de perfiles (cifrados de flujo para aplicaciones de software de alto ancho de banda). [1 ]
El cifrado de flujo HC-256 genera una secuencia de claves (keystream) de hasta bits de longitud utilizando una clave secreta de 256 bits y un vector de inicialización de 256 bits.
HC-256 contiene dos tablas secretas, cada una con 1024 entradas de 32 bits. Cada paso actualiza un elemento de la tabla utilizando una función de retroalimentación no lineal. Cada 2048 pasos, se actualizarán todos los elementos de las dos tablas. [una]
El algoritmo utiliza las siguientes operaciones:
: x+y significa x+y mod , donde 0 x y 0 y : x y significa x - y mod 1024 : bit a bit XOR : concatenación : operador de desplazamiento a la derecha por el número especificado de bits : operador de desplazamiento a la izquierda por el número especificado de bits : desplazamiento circular a la derecha, x n significa ((x n) (x (32 - n)), donde 0 n 32 y 0 x
El HC-256 utiliza dos tablas, P y Q. La clave y el vector de inicialización se indican mediante K y V, respectivamente. La secuencia de teclas se denota S.
: tabla de 1024 elementos de 32 bits. Cada elemento se denota por P[i], donde 0 i 1023. : una tabla de 1024 elementos de 32 bits. Cada elemento se denota por P[i], donde 0 i 1023. : clave de 256 bits del algoritmo HC-256. : vector de inicialización de 256 bits del algoritmo HC-256. : secuencia de teclas generada por el algoritmo HC-256. El elemento de 32 bits a la salida del i-ésimo paso se denota por . S= || || || …
El HC-256 tiene seis funciones:
Aquí x = || || || — Palabra de 32 bits. , , , constan de 1 byte cada uno, y , son los bytes bajo y alto, respectivamente. [2]
El proceso de inicialización en el HC-256 consiste en convertir P y Q con una clave y un vector de inicialización y ejecutar el cifrado 4096 veces sin generar una salida.
1. Componer K = || || … || y V = || || … || , donde y consta de 32 bits. La clave y el vector de inicialización se expanden en una matriz (0 i 2559).
toma los siguientes valores:
2. Actualice las tablas P y Q con W:
3. Ejecute el cifrado (algoritmo de generación de secuencia de claves) 4096 veces sin generar resultados.
El proceso de inicialización está completo y el cifrado está listo para generar la secuencia de claves. [3]
Cada paso actualiza un elemento de la tabla y genera un elemento de salida de 32 bits. El proceso para generar una secuencia de teclas se describe a continuación:
i=0;
repeat until enough keystream bits are generated.
{
}
end-repeat
[3]
Los autores hicieron las siguientes declaraciones de seguridad sobre el HC-256:
El algoritmo HC-256 asegura que el período de la secuencia de teclas sea muy grande. Pero es difícil precisarlo exactamente. Se estima que el período medio de una secuencia de teclas es de aproximadamente .
Seguridad de clave privadaLa función de salida y la función de retroalimentación del HC-256 son altamente no lineales. La función de salida no lineal permite muy poca fuga de información en cada paso. La función de retroalimentación no lineal garantiza que la clave secreta no se pueda determinar a partir de esta fuga.
Del análisis de los valores de las funciones y sigue:
Porque , se sigue de la condición que . Dado que con probabilidad sobre , la probabilidad de que , también es sobre . Esto significa que se filtra aproximadamente un bit de información con cada colisión . Partidos totales . Para restaurar P necesita resultados de salida. Entonces, podemos concluir que la clave para el HC-256 es segura y que no se puede determinar más rápido que una búsqueda completa de las claves.
El proceso de inicialización del HC-256 consta de dos pasos (ver arriba). P y Q se convierten usando la clave K y el vector de inicialización V. Cada bit de K y V afecta a todos los bits de las dos tablas, y cada cambio en ellos conduce a cambios incontrolados en las tablas. El cifrado se ejecuta 4096 veces sin generar una salida, por lo que las tablas P y Q se vuelven más aleatorias. Después del proceso de inicialización, los cambios en K y V no generan cambios en la secuencia de teclas. [cuatro]
En 2008, Erik Zenner propuso una forma de atacar el cifrado HC-256. El ataque de temporización propuesto le permite restaurar el estado interno, que son 2 tablas de 1024 elementos de 32 bits, así como la clave. El ataque requiere 8 kilobytes de la secuencia de clave conocida, 6148 medidas exactas del tiempo de lectura de la memoria caché y el tiempo de cálculo correspondiente al tiempo de prueba de la clave. De ello se deduce que, en teoría, el HC-256 es vulnerable a los ataques de tiempo. [5]
También debe prestar atención a la publicación de Gautham Sekar y Bart Preneel, quienes proponen una clase de distintivos, cada uno de los cuales requiere probar funciones casi lineales. Cada ecuación incluye 8 bits de la secuencia de teclas. La probabilidad de un resultado exitoso es 0.9772. A modo de comparación, un método similar conocido antes y propuesto por el propio autor de HC-256 requería funciones, cada una de las cuales incluía 10 bits de una secuencia clave. [6]
El HC-256 es útil para los microprocesadores modernos . La dependencia entre operaciones en el HC-256 se mantiene al mínimo: se pueden calcular en paralelo tres pasos sucesivos del algoritmo. La capacidad de paralelización permite que el HC-256 sea eficiente en los procesadores actuales. Los autores implementaron el HC-256 en el lenguaje de programación C y probaron su rendimiento en el procesador Pentium 4 . La velocidad de cifrado HC-256 alcanza los 1,93 bps. HC-256 no está patentado y está disponible gratuitamente. [7]
Criptosistemas simétricos | |
---|---|
Cifrados de flujo | |
Red Feistel | |
red SP | |
Otro |