Вы находитесь на странице: 1из 13

DES

I ntroduccin
DES (Data Encryption Standard, estndar de cifrado de datos) es un algoritmo
desarrollado originalmente por IBM a requerimiento del NBS (National Bureau of
Standards, Oficina Nacional de Estandarizacin, en la actualidad denominado NIST,
National Institute of Standards and Technology, Instituto Nacional de Estandarizacin y
Tecnologa) de EE.UU. y posteriormente modificado y adoptado por el gobierno de
EE.UU. En 1977 como estndar de cifrado de todas las informaciones sensibles no
clasificadas. Posteriormente, en 1980, el NIST estandariz los diferentes modos de
operacin del algoritmo. Es el ms estudiado y utilizado de los algoritmos de clave
simtrica.
El nombre original del algoritmo, tal como lo denomin IBM, era Lucifer. Trabajaba
sobre bloques de 128 bits, teniendo la clave igual longitud. Se basaba en operaciones
lgicas booleanas y poda ser implementado fcilmente, tanto en software como en
hardware.
Tras las modificaciones introducidas por el NBS, consistentes bsicamente en la
reduccin de la longitud de clave y de los bloques, DES cifra bloques de 64 bits,
mediante permutacin y sustitucin y usando una clave de 64 bits, de los que 8 son de
paridad (esto es, en realidad usa 56 bits), produciendo as 64 bits cifrados

Hoy en da, DES se considera inseguro para muchas aplicaciones. Esto se debe
principalmente a que el tamao de clave de 56 bits es corto; las claves de DES se han
roto en menos de 24 horas. Existen tambin resultados analticos que demuestran
debilidades tericas en su cifrado, aunque son inviables en la prctica. Se cree que el
algoritmo es seguro en la prctica en su variante de Triple DES, aunque existan ataques
tericos.

DES tiene 19 etapas diferentes.
La primera etapa es una transposicin, una permutacin inicial (IP) del texto plano de
64 bits, independientemente de la clave. La ltima etapa es otra transposicin (IP-1),
exactamente la inversa de la primera. La penltima etapa intercambia los 32 bits de la
izquierda y los 32 de la derecha. Las 16 etapas restantes son una Red de Feistel de 16
rondas.
En cada una de las 16 iteraciones se emplea un valor, Ki, obtenido a partir de la clave de
56 bits y distinto en cada iteracin

Se realiza una permutacin inicial (PC-1) sobre la clave, y luego la clave obtenida se
divide en dos mitades de 28 bits, cada una de las cuales se rota a izquierda un nmero
de bits determinado que no siempre es el mismo. Ki se deriva de la eleccin permutada
(PC-2) de 48 de los 56 bits de estas dos mitades rotadas.
La funcin f de la red de Feistel se compone de una permutacin de expansin (E), que
convierte el bloque correspondiente de 32 bits en uno de 48. Despus realiza una or-
exclusiva con el valor Ki, tambin de 48 bits, aplica ocho S-Cajas de 6*4 bits, y efecta
una nueva permutacin (P).

Para descifrar basta con usar el mismo algoritmo empleando las Ki en orden inverso
Est descrito oficialmente en FIPS PUB 46.

Descripcin paso a paso del algoritmo DES
A continuacin se describen los pasos necesarios para implementar este algoritmo.
(i) Encriptacin:
1.- Procesar la clave.
1.1.- Solicitar una clave de 64 bits al usuario.
La clave se puede introducir directamente o puede ser el resultado de alguna operacin
anterior, ya que no hay ninguna especificacin al respecto.
De cada uno de los ocho bytes se elimina el octavo bit (el menos significativo)
1.2.- Calcular las subclaves.
1.2.1.- Realizar la siguiente permutacin en la clave de 64 bits reducindose la misma a
56 bits (El bit 1, el ms significativo, de la clave transformada es el bit 57 de la clave
original, el bit 2 pasa a ser el bit 49, etc.).


1.2.2.- Dividir la clave permutada en dos mitades de 28 bits cada una. C(0) el bloque
que contiene los 28 bits de mayor peso y D(0) los 28 bits restantes.
1.2.3.- Calcular las 16 subclaves (Empezar con i=1)
1.2.3.1.- Rotar uno o dos bits a la izquierda C(i-1) y D(i-1) para obtener C(i) y D(i),
respectivamente. El nmero de bits de desplazamiento est dado por la tabla siguiente:

1.2.3.2.- Concatenar C(i) y D(i) y permutar como se indica a continuacin. As se
obtiene K(i), que tiene una longitud de 48 bits.

1.2.3.3.- Ir a 1.2.3.1. Hasta que se haya calculado K(16).
2.- Procesar el bloque de datos de 64 bits.
2.1.- Obtener un bloque de datos de 64 bits. Si el bloque contiene menos de 64 bits debe
ser completado para poder continuar con el siguiente paso.
2.2.- Realizar la siguiente permutacin del bloque:

2.3.- Dividir el bloque resultante en dos mitades de 32 bits cada una. L(0) el bloque que
contiene los 32 bits de mayor peso y R(0) el resto.
2.4.- Aplicar las 16 subclaves obtenidas en el paso 1
2.4.1.- E(R(i)). Expandir R(i) de 32 a 48 bits de acuerdo con la tabla que se muestra
debajo:

2.4.2.- E(R(i-1)) Xor K(i). Or-exclusiva del resultado del paso
2.4.1. con K(i) 2.4.3.- B(1), B(2),..., B(8). Partir E(R(i-1)) Xor K(i) en ocho bloques de
seis bits. B(1) representa a los bits 1-6, B(2) representa a los bits 7-12,..., B(8)
representa a los bits 43-48.
2.4.4.- S(1)(B(1)), S(2)(B(2)),..., S(8)(B(8)). Sustituir todos los B(j) por los valores
correspondientes de las S-Cajas o tablas de sustitucin (Substitution Boxes, S-Boxes) de
6*4 bits, segn se indica en los subapartados que siguen. Todos los valores de las S-
Cajas se consideran de 4 bits de longitud. (Ver S-cajas del algoritmo DES, pgina
siguiente)
2.4.4.1.- Tomar los bits 1 y 6 de B(j) y formar un nmero de 2 bits que llamaremos m.
Este valor nos indicar la fila en la tabla de sustitucin correspondiente S(j). Obsrvese
que m=0 representa la 1 fila y m=3 la ltima.
2.4.4.2.- Con los bits 2 a 5 de B(j) formar otro nmero, n, de cuatro bits que indicar la
columna de S(j) en la que buscar el valor de sustitucin. En esta ocasin n=0 representa
la 1 columna y n=15 la ltima columna.
2.4.4.3.- Reemplazar B(j) con S(j)(m,n), m fila y n columna.
2.4.4.4.- Ejemplo. Sea B(3)=42, en binario B(3)=101010.
Buscaremos el nuevo valor de B(3) en S(3). Fila m y columna n, segn lo expuesto
anteriormente m=10, n=0101, y en decimal m=2 y n=5. Por tanto, B(3) ser
S(3)(2,5)=15
2.4.4.5.- Volver a 2.4.4.1. hasta que todos los bloques B(j) hayan sido reemplazados por
el valor de S(j) adecuado.
2.4.5.- P[S(1)(B(1))... S(2)(B(8))]. Concatenar los bloques B(1) a B(8) y permutar los
32 bits (cuatro bits cada B(j)) en funcin de esta tabla:

2.4.5.1.- Volver a 2.4.4.1. hasta que todos los bloques B(j) hayan sido reemplazados por
el valor de S(j) adecuado.

2.4.6.- P[S(1)(B(1))... S(2)(B(8))]. Concatenar los bloques B(1) a B(8) y permutar los
32 bits (cuatro bits cada B(j)) en funcin de esta tabla:

2.4.7.- R(i). Realizar una or-exclusiva entre el valor resultante y L(i-1). Este valor ser
R(i). Por tanto, R(i)=L(i-1) Xor P[S(1)(B(1))... S(2)(B(8))]
2.4.8.- L(i). L(i)=R(i-1)
2.4.9.- Repetir desde 2.4.1. hasta que se hayan aplicado las 16 subclaves.
2.5.- Hacer la siguiente permutacin del bloque R(16)L(16). Obsrvese que esta vez
R(16) precede a L(16)

(ii) Desencriptacin:
Usar el mismo proceso descrito con anterioridad pero empleando las subclaves en orden
inverso, esto es, en lugar de aplicar K(1) para la primera iteracin aplicar K(16), K(15)
para la segunda y as hasta K(1).


AES
Advanced Encryption Standard (AES), tambin conocido como Rijndael (pronunciado
"Rain Doll" en ingls), es un esquema de cifrado por bloques adoptado como un
estndar de cifrado por el gobierno de los Estados Unidos. El AES fue anunciado por
el Instituto Nacional de Estndares y Tecnologa (NIST) como FIPS PUB 197 de los
Estados Unidos (FIPS 197) el 26 de noviembre de 2001 despus de un proceso de
estandarizacin que dur 5 aos. Se transform en un estndar efectivo el 26 de
mayo de 2002. Desde 2006, el AES es uno de los algoritmos ms populares usados
en criptografa simtrica.
El cifrado fue desarrollado por dos criptlogos belgas, Joan Daemen y Vincent Rijmen,
ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de
seleccin AES bajo el nombre "Rijndael".
El estndar de cifrado (encriptacin) avanzado AES, Advanced Encryption Standard
(AES), es uno de los algoritmos ms seguros y ms utilizados hoy en da - disponible
para uso pblico. Est clasificado por la Agencia de Seguridad Nacional, National
Security Agency (NSA), de los Estados Unidos para la seguridad ms alta de
informacin secreta Top Secret. Su historia de xito comenz 1997, cuando el
Instituto Nacional de Estndares y Tecnologa, National Institute of Standards and
Technology (NIST), anunci la bsqueda de un sucesor para el estndar de cifrado
DES. Un algoritmo llamado "Rijndael", desarrollado por los criptlogos belgas Joan
Daemen y Vincent Rijmen, fue destacado en seguridad, as como en el rendimiento y la
flexibilidad. Este algoritmo le gano a varios competidores, y fue oficialmente
presentado como el nuevo estndar de cifrado AES en el 2001 y se transform en
estndar efectivo en el 2002. El algoritmo se basa en varias sustituciones, permutaciones
y transformaciones lineales, ejecutadas en bloques de datos de 16 bytes - por lo que se
le llama blockcipher. Estas operaciones se repiten varias veces, llamadas "rondas". En
cada ronda, un nico roundkey se calcula de la clave de encriptacin, y es
incorporado en los clculos. Basado en esta estructura de bloque de AES, el cambio de
un solo bit, ya sea en la clave, o en los bloques de texto simple y claro, resulta en un
bloque de texto cifrado/encriptado completamente diferente - una clara ventaja sobre
cifrados de flujo tradicionales. La diferencia entre AES-128, AES-192 y AES-256, es la
longitud de la clave: 128, 192 o 256 bits - todos drsticamente mejorados en
comparacin con la clave DES de 56 bits. A modo de ejemplo: Descifrar una clave de
128 bits AES con una supercomputadora estndar del momento, llevara ms tiempo
que la presunta edad del universo. Boxcryptor utiliza incluso claves de 256! Hasta el
da de hoy, no existe posible ataque contra AES. Por lo tanto, sigue siendo el estndar
AES de cifrado preferido por los gobiernos, los bancos y los sistemas de alta seguridad
de todo el mundo.
Descripcin cifrado

Estrictamente hablando, AES no es precisamente Rijndael (aunque en la prctica se los
llama de manera indistinta) ya que Rijndael permite un mayor rango de tamao de
bloques y longitud de claves; AES tiene un tamao de bloque fijo de 128 bits y tamaos
de llave de 128, 192 o 256 bits, mientras que Rijndael puede ser especificado por una
clave que sea mltiplo de 32 bits, con un mnimo de 128 bits y un mximo de 256 bits.
La mayora de los clculos del algoritmo AES se hacen en un campo finito determinado.
AES opera en una matriz de 44 bytes, llamada state (algunas versiones de Rijndael con
un tamao de bloque mayor tienen columnas adicionales en el state).
Pseudocdigo
Expansin de la clave usando el esquema de claves de Rijndael.
Etapa inicial:
1. AddRoundKey
Rondas:
1. SubBytes en este paso se realiza una sustitucin no lineal donde cada byte es
reemplazado con otro de acuerdo a una tabla de bsqueda.
2. ShiftRows en este paso se realiza una transposicin donde cada fila del
state es rotada de manera cclica un nmero determinado de veces.
3. MixColumns operacin de mezclado que opera en las columnas del state,
combinando los cuatro bytes en cada columna usando una transformacin
lineal.
4. AddRoundKey cada byte del state es combinado con la clave round;
cada clave round se deriva de la clave de cifrado usando una iteracin de la
clave.
Etapa final:
1. SubBytes
2. ShiftRows
3. AddRoundKey
4.
AES es un algoritmo de cifrado por bloques, inicialmente fue diseado para tener
longitud de bloque variable pero el estndar define un tamao de bloque de 128 bits, por
lo tanto los datos a ser encriptados se dividen en segmentos de 16 bytes (128 bits) y
cada segmento se lo puede ver como un bloque o matriz de 4x4 bytes al que se lo llama
estado, este se organiza de la siguiente forma:



Por ser simtrico, se utiliza la misma clave para encriptar como para desencriptar, la
longitud de la clave puedeser de 128, 192 o 256 bits segnespecifica el estndar, esto
permite tres implementaciones conocidas como AES-128, AES-192 y AES-256, el
presente trabajo est basado en AES-128.
Partiendode una clave inicial de 16 bytes (128 bits),que tambinse la puede ver como un
bloque o matriz de 4x4 bytes, se generan 10 claves, estas claves resultantes junto con la
clave inicialson denominadas subclaves.

El proceso de generacin de subclaves parte de la clave inicial vista como una matriz de
4x4 bytes:


Para mostrar claramente como se calculan las subclaves, el conjunto de subclaves puede
verse como una matriz de 4 filas x 44 columnas, o sea una subclave a continuacin de
otra:


Para calcular la primera columna de la siguiente subclave se toma la ltima columna de
la subclave anterior (en este caso la clave inicial)y se aplica una operacin llamada
Rotword que consiste en realizar una rotacin del primer byte hacia el ltimo lugar en la
columna:

Luego, a la columna resultante, se aplica una operacin llamada SubBytes que consiste
en
Reemplazar cada byte de la columna ya rotada por un byte almacenado en una tabla
llamada S-Box, esta tabla contiene pre calculados el resultado de aplicarle a cada byte la
inversin en el campo GF y una transformacin a fn, la dimensin de la tabla es de
16x16 bytes donde los ndices tanto de las columnas como de las filas van de 0 a F, para
obtener la transformacin S-Box de un byte se toman los primeros 4 bits como el ndice
de la fila de la tabla y los segundos 4 como ndice de la columna de la tabla:

Luego al resultado se le aplica un XOR byte a byte con la columna 4 posiciones atrs
(en este caso la primer columna de la clave inicial)y un XOR byte a byte con una
columna de una tabla llamada RCON que mantiene en la primer fila constantes 2ien el
campo GF y en las restantes filas 0, por ser la primer subclave la que estamos
calculando se toma para el clculo la primer columna de la tabla RCON, para las
siguientes subclaves se toma la prxima columna no utilizada de esta tabla:

El resultado de esta ltima operacin ser la primera columna de la subclave calculada
(en este caso la segunda subclave siguiente a la inicial):



Para calcular las tres columnas siguientes se hace un XOR entre la columna anterior y la
columna de cuatro posiciones atrs:
Una vez aplicadas estas operaciones se tiene una nueva subclave:


El proceso de cifrado del algoritmo consiste en aplicar a cada estado un conjunto de
operaciones agrupadas en lo que se denominan rondas, el algoritmo realiza 11 rondas,
donde en cada ronda se aplica una subclave diferente.
Las 11 rondas se pueden clasificar en 3 tipos:
1 ronda inicial (se aplica la subclave inicial).
9 rondas estndar(se aplican las 9 subclaves siguientes, una en cada ronda).
1 ronda final (se aplica la ltima subclave).

Las operaciones que realiza el algoritmo dentro de las rondas se reducen a 4 operaciones
bsicas:
SubBytes.
ShiftRows.
MixColumns.
AddRoundKey.

A continuacin se muestra un diagrama de como se aplican las operaciones y claves en
cada una de las rondas:

Вам также может понравиться