El algoritmo de cifrado de flujo HC-256 se utiliza (al igual que los demás algoritmos de cifrado de flujo) para cifrar claves compartidas. Los cifrados de flujo se ejecutan 4 a 5 veces más rápido que un cifrado por bloques, sin embargo se han publicado pocos cifrados de flujo eficiente y seguro.
Algoritmo HC-256
El
proceso es relativamente fácil, para cifrar se aplica la operación XOR entre el
keystream y el mensaje a cifrar, el descifrado es aplicar la operación XOR
entre el keystream y el texto cifrado. Para poder realizar esto hay que
entender cómo generar las claves, y para todo esto es necesario el proceso
descrito en los siguientes párrafos.
Para la generación del keystream es necesario:
- Establecer una clave (K) y un vector de inicialización (IV) ambos de 256 bits
- Se deben tener dos tablas (Tabla P y Tabla Q), cada una contiene 1024 elementos de 32 bits, cada elemento i de P o Q debe ser mayor o igual que 0 pero menor que 1024.
- El keystream (s) es generado por el algoritmo, a partir de la concatenación de las salidas (S_{i}), es decir S=S_{1} || S_{2} || \dots
Hay seis funciones utilizadas para este proceso en el algoritmo de cifrado HC-256, y hay que tomar en cuenta que para las funciones g_{1}(x) y h_{1}(x) se utiliza la tabla Q como caja de sustitución (S-box) y para las funciones g_{2}(x) y h_{2}(x) se utiliza la tabla P como caja de sustitución(S-box).
f_{1}(x) = (x >>> 7)\oplus(x >>> 18)\oplus(x >> 3)
f_{2}(x) = (x >>> 17)\oplus(x >>> 19)\oplus(x >> 10)
g_{1}(x, y) = (x >>> 10)\oplus(y >>> 23) + \mathrm{Q}[(x\oplus y)\mod 1024]
g_{2}(x, y) = (x >>> 10)\oplus(y >>> 23) + \mathrm{P}[(x\oplus y)\mod 1024]
h_{1}(x) = \mathrm{Q}[x_{0}] + \mathrm{Q}[256 + x_{1}] + \mathrm{Q}[512 + x_{2}] + \mathrm{Q}[768 + x_{3}]
h_{2}(x) = \mathrm{P}[x_{0}] + \mathrm{P}[256 + x_{1}] + \mathrm{P}[512 + x_{2}] + \mathrm{P}[768 + x_{3}]
Donde x es la concatenación de caracteres de forma que crean una palabra de 32 bits es decir x = x_{3} || x_{2} || x_{1} || x_{0}, donde x_{3} seria los bits mas representativos y x_{0} los bits menos representativos.
Inicialización de proceso (Clave y Vector de Inicialización)
El proceso de inicialización consiste en expandir la clave (K) y el vector de inicialización (IV) en las tablas P y Q, y realizar 4096 iteraciones sin generar la salida (S_{i}).
- La clave (K) y el vector de inicialización (IV) se expanden en una matriz W_{i} (debe ser mayor o igual a 0 y menor a 2560) de la siguiente manera:
- Se actualiza las tablas P y Q con los valores de la matriz W.
- Se ejecuta 4096 iteraciones del cifrado sin los valores de salida.
El proceso de inicialización se completa y esta listo para generar el keystream.
Generacion de claves (keystream)
Por cada iteracion es actualizado un elemento de una tabla y es generada una salida de 32 bits. Una caja de sustitucion (S-box) es utilizada solo para generar 1024 salidas, después de esto se actualiza la caja de sustitución (S-box) para las siguientes 1024 salidas. El proceso de generación del keystream del HC-256 es la siguiente:
Nota: El simbolo \fbox{-} denota "-"\mod1024.
Una vez se tenga el keystream se procede a encriptar o desencriptar como se describe al inicio.
Bibliografia
Donde x es la concatenación de caracteres de forma que crean una palabra de 32 bits es decir x = x_{3} || x_{2} || x_{1} || x_{0}, donde x_{3} seria los bits mas representativos y x_{0} los bits menos representativos.
Inicialización de proceso (Clave y Vector de Inicialización)
El proceso de inicialización consiste en expandir la clave (K) y el vector de inicialización (IV) en las tablas P y Q, y realizar 4096 iteraciones sin generar la salida (S_{i}).
- La clave (K) y el vector de inicialización (IV) se expanden en una matriz W_{i} (debe ser mayor o igual a 0 y menor a 2560) de la siguiente manera:
- Se actualiza las tablas P y Q con los valores de la matriz W.
- Se ejecuta 4096 iteraciones del cifrado sin los valores de salida.
El proceso de inicialización se completa y esta listo para generar el keystream.
Generacion de claves (keystream)
Por cada iteracion es actualizado un elemento de una tabla y es generada una salida de 32 bits. Una caja de sustitucion (S-box) es utilizada solo para generar 1024 salidas, después de esto se actualiza la caja de sustitución (S-box) para las siguientes 1024 salidas. El proceso de generación del keystream del HC-256 es la siguiente:
Nota: El simbolo \fbox{-} denota "-"\mod1024.
Una vez se tenga el keystream se procede a encriptar o desencriptar como se describe al inicio.