CIFRADO
DE
FLUJO
Los cifradores de flujo son algoritmos de cifrado que pueden
realizar el cifrado incrementalmente, convirtiendo el texto en
claro en texto cifrado bit a bit. Esto se logra construyendo un
generador de flujo de clave.
Un flujo de clave es una secuencia de bits de tamaño arbitrario
que puede emplearse para oscurecer los contenidos de un flujo
de datos combinando el flujo de clave con el flujo de datos
mediante la función XOR. Si el flujo de clave es seguro, el
flujo de datos cifrados también lo será.
El cifrado en flujo se aplica sobre textos formados por letras
combinándolas con un flujo de bits secretos (secuencia cifrante) mediante
un operador *. El descifrado se realiza de una forma análoga,
combinando mediante el operador *^-1 las letras del texto cifrado con la
secuencia cifrante, produciendo así las letras del texto original. La
secuencia cifrante se produce mediante un generador de bits.
El primero en proponer un cifrado en el que el texto cifrado resulta
de combinar mediante una operación eficiente el texto original con el
flujo de bits secretos fue Vernam (1917).
El cifrado de Vernam se basa en el operador o-exclusivo (suma
módulo 2). Esta operación resulta especialmente indicada para este
tipo de cifrado, ya que *^-1=*.
Algoritmo
Dentro de la criptografía RC4 o ARC4 es el sistema de
cifrado de flujo Stream cipher más utilizado y se usa en algunos
de los protocolos más populares como Transport Layer Security
(TLS/SSL) (para proteger el tráfico de Internet) y Wired
Equivalent Privacy (WEP) (para añadir seguridad en las
redes inalámbricas).
El algoritmo de criptografía RC4 fue diseñado por Ron
Rivest de la RSA Security en el año 1987; su nombre
completo es Rivest Cipher 4, teniendo el acrónimo RC un
significado alternativo al de Ron's Code utilizado para los
algoritmos de cifrado RC2, RC5 y RC6.
RC4 es un algoritmo sorprendentemente simple. Este consiste
en 2 algoritmos: 1-Key Scheduling Algorithm (KSA) y 2Pseudo-Random Generation Algorithm (PRGA). Ambos
de estos algoritmos usan 8-by-8 S-box, el cual es solo un array
de 256 números en el cual ambos son únicos en cuanto a rango y su
valor va desde 0 hasta 255. Todos los números de 0 a 255 existen
dentro del array, pero están solo mezclados de diferentes
maneras, el KSA se encarga de realizar la primer mezcla en el
S-Box, basado en el valor de la semilla dada dentro de él, y esta
"semilla" puede ser de 256 bits de largo.
Primero, el S-box array es llenado con valores secuenciales desde 0255. Este array será llamado simplemente S. Entonces, el otro array
de 256-bits es llenado con el valor de la "semilla", repitiendo como sea
necesario hasta que todo el array es llenado. Este array será llamado
K, entonces el array S es mezclado usando el siguiente PseudoCode. Pseudo-code es utilizado para programación como un
desarrollo en "sucio" del cual se va perfeccionando el code.
j=0;
for i = 0 to 255
{
j = (j+S[i] + K[i]) mod 256;
intercambia S[i] and S[j];
}
Una vez que eso es hecho, la S-box es intercambiada basándose
en el valor de la "semilla". Esa es la "Key" programada para el
algoritmo, algo sencillo.
Ahora cuando el keystream data es necesitado, el PseudoRandom Generation Algorithm (PRGA) es usado. Este
algoritmo tiene 2 contadores, el i y la j, en el cual ambos son
inicializados en 0 para comenzar. Después de eso, cada bit de
keystream data es usado en el siguiente Pseudo-Code:
i = (i + 1) mod 256;
j = (j + S[i]) mod 256;
intercambia S[i] and S[j];
t = (S[i] + S[j] mod 256;
Exponer valor de S[t];
SEAL
Algoritmo
SEAL es un generador de secuencia diseñado en 1993 para IBM por
Phil Rogaway y Don Coppersmith, cuya estructura está
especialmente pensada para funcionar de manera eficiente en
computadores con una longitud de palabra de 32 bits.
Su funcionamiento se basa en un proceso inicial en el que se calculan los
valores para unas tablas a partir de la clave, de forma que el cifrado
propiamente dicho puede llevarse acabo de una manera realmente rápida.
Por desgracia, también es un algoritmo sujeto a patentes.
Define una familia de funciones pseudoaleatorias, de tal forma que se
puede calcular cualquier porción de la secuencia suministrando
únicamente un número entero n de 32 bits. La idea es que, dado ese
número, junto con la clave k de 160 bits, el algoritmo genera un bloque k(
n) de L bits de longitud.
De esa forma, cada valor de k da lugar a una secuencia total de L * 232
bits, compuesta por la yuxtaposición
de los bloques k(O), k(I), . . . , k(232 - 1).
Descargar

Cifrado de Flujo