Recordando la propuesta de cifrado
hecha por Vernam
en 1917,los cifradores de flujo usarán:
- Un algoritmo de cifrado basado en la función XOR.
- Una secuencia cifrante binaria y pseudoaleatoria denominada S, que se obtiene a partir de una clave secreta K compartida por el emisor y el receptor, y un algoritmo generador determinístico.
- El mismo algoritmo para el descifrado debido el carácter involutivo de la función XOR.
En concreto, cada bit de entrada al
sistema de cifrado (mensaje en claro) se combinará, usando la
función lógica XOR, con el bit correspondiente del flujo clave S,
para dar lugar al bit correspondiente al flujo de salida (mensaje
cifrado). El receptor hará el mismo proceso de combinación con la
XOR para obtener el flujo descifrado.
Características de la secuencia
cifrante S:
- Período:
- La clave deberá ser tanto o más larga que el mensaje. En la práctica se usará una semilla K de unos 120 a 250 bits en cada extremo del sistema para generar períodos superiores a 1035.
- Distribución de bits:
- La distribución de bits de unos (1s) y ceros (0s) deberá ser uniforme para que represente a una secuencia pseudoaleatoria.
ACERCA DE RABBIT
Rabbit es un algoritmo de cifrado de
flujo que ha sido diseñado para un alto rendimiento en las
implementaciones de software. Tanto la configuración de claves y
encriptación son muy rápidos, por lo que el algoritmo es
especialmente adecuado para todas las aplicaciones en las que grandes
cantidades de datos o un gran número de paquetes de datos deben ser
cifrados.
Los ejemplos incluyen, pero no se
limitan a, el cifrado del lado del servidor, el cifrado multimedia,
cifrado de disco duro, y el cifrado en los dispositivos de recursos
limitados.
DEFINICIÓN
Rabbit consiste en un generador de
flujo de bits pseudoaleatoria que tiene una clave de 128 bits y un
vector de inicialización (IV) de 64 bits como entrada y genera una
corriente de bloques de 128 bits. El cifrado se realiza mediante la
combinación de esta salida con el mensaje, utilizando la operación
OR exclusiva. El descifrado se lleva a cabo exactamente de la misma
manera como el cifrado.
El estado interno del cifrado de flujo
se compone de 513 bits. 512 bits se dividen en ocho variables de
estado de 32 bits (xj,i) y ocho variables de control de 32 bits
(cj,i), donde xj,i es la variable de estado del subsistema j en la
iteración i, y cj, i denota la variable de contador correspondiente.
Hay un contador que lleva un bit (φ7,i), que debe ser almacenado
entre iteraciones. Este bit de acarreo del contador se inicializa a
cero. Las ocho variables de estado y los ocho contadores se derivan
de la llave en la inicialización.
ESQUEMA DE CONFIGURACIÓN DE CLAVE (Key
Setup Scheme)
El algoritmo se inicializa mediante la
ampliación de la clave de 128 bits de las ocho variables de estado (xj,i) y los ocho contadores (cj,i).
La clave, K[0 .. 127], se divide en
ocho subclaves:
K0 = K [0 .. 15], K1 = K [31 .. 16],
... , K7 = K [127 .. 112]
Las variables de estado y el contador
se inicializa de las subclaves de la siguiente manera:
y
*NOTA: || indica concatenación.
El sistema se repite cuatro veces, de
acuerdo con la función de siguiente estado, para disminuir las
correlaciones entre los bits en la clave y los bits en las variables
de estado internas.
Finalmente, las variables de control (cj,i) se reinicializan de acuerdo con:
para todo j, para impedir la
recuperación de la clave mediante la inversión del sistema de
contador.
ESQUEMA DE CONFIGURACIÓN DEL IV (IV
Setup Scheme)
El esquema de configuración IV
funciona mediante la modificación del estado del contador en función
de la IV. Esto se hace mediante la operación XOR IV de 64 bits en
todos los 256 bits del estado del contador. Los 64 bits de la IV se
denotan IV[0 .. 63]. Los contadores se modifican como:
El sistema se repite a continuación
cuatro veces para que todos los bits de estado no-lineal dependan de
todos los bits de IV. La modificación del contador por el IV
garantiza que todos los 2^64 vectores de inicialización diferentes
producirán claves de flujo únicas.
FUNCIÓN DEL SIGUIENTE ESTADO
El núcleo del algoritmo Rabbit es la
iteración del sistema definido por las siguientes ecuaciones:
donde todas las adiciones son módulo
2^32.
Ilustración de la función
del siguiente estado.
ESQUEMA DE CIFRADO/DESCIFRADO
Los bits extraídos son los XOR's con
el texto plano/texto cifrado para cifrar/descifrar.
donde ci y pi denotan la
i^th de bloques de
128-bits de texto cifrado y de texto plano, respectivamente.
CÓDIGO DE REFERENCIA EN C
A continuación se mostraran las funciones de la implementación del código de referencia de Rabbit en C (Código tomado de http://www.cryptico.com/cryptolab/reference-code.html).
Esquema de configuración de clave.
Esquema de configuración de clave.
Esquema de configuración de IV.
Cifrado/Descifrado.
Ver código completo
SEGURIDAD
Rabbit reclama seguridad de 128 bits
contra los atacantes cuya meta es una clave específica. Sin embargo,
si el atacante dirige un gran número de claves a la vez y realmente
no importa cual lo rompa, entonces el tamaño de pequeñas IV resulta
en un nivel de seguridad reducido de 96 bits. Esto es debido a
ataques genéricos “TMD trade-off”.
Las siguientes propiedades de seguridad
se reivindican:
- El cifrado proporciona seguridad de 128 bits, es decir, un ataque exitoso tiene que ser más eficiente 2^128 encriptaciones de prueba de Rabbit.
- Si se utiliza el IV, la seguridad para un máximo de 2^64 IVs diferentes es proporcionado, es decir, mediante la solicitud de 2^64 IVs diferentes, el atacante no gana una ventaja por usar la misma IV.
- Durante un ataque con éxito, el atacante tiene hasta 2^64 parejas de bloques disponibles de texto plano y texto cifrado.
REFERENCIAS
- J. Manuel Moreno Eguílaz - Criptografía - http://tec.upc.es/sda/Fundamentos%20Criptografia.pdf
- M. Boesgaard, M. Vesterager, E. Zenner - A Description of the Rabbit Stream Cipher Algorithm, Noviembre 22, 2005 - http://tools.ietf.org/html/draft-zenner-rabbit-02
- Cryptico - Rabbit Stream Cipher, Algorithm Specification, Mayo 12, 2005 - http://www.cryptico.com/images/pages/WP_Rabbit_Specification.pdf