1. 1
El algoritmo DES
• Data Encryption Standard
• Estándar del cifrado para los EE.UU
– 1970 NBS
– 1974 Lucifer IBM
– 1975 DEA IBM
– 1976 DES EE.UU standard
• Requisitos que debía cumplir:
– Alto nivel de seguridad
– Hipótesis de Kerckhoffs
– Disponibilidad para todos los usuarios
– Implementación en hardware
2. 2
DES
• El algoritmo Lucifer
– Tamaño de bloque y clave mayor (128 bits)
• Ha sido estandarizado para el cifrado de
contraseñas
• Ha superado las sucesivas revisiones, que le han
otorgado las revalidaciones como estándar del NIST
• Implementaciones del DES alcanzan varias decenas de
Mbps
DES
• Bloques de cifrado de 64 bits
• Longitud de la clave 64 bits (56 bits)
• Técnicas básicas usadas en el algoritmo:
– Transposiciones, que le confieren propiedades
de difusión
– Sustituciones, que le otorgan características de
confusión
– Operaciones lógicas booleanas (o-exclusivo)
3. 3
DES
Li-1 Ri-1
Li=Ri-1 Ri
Caja S
Caja P
Caja E
⊕
⊕
ki-1
Construcción de las claves
internas del DES
CLAVE
PC-1
Desp. Desp.
PC-2 K1
Desp. Desp.
K2
PC-2
4. 4
Descifrado del DES
• El proceso es idéntico que en el caso del
cifrado.
• Las claves internas se aplican en orden
inverso, es decir desde la clave k16 a la
clave k1.
• Los desplazamientos que se realizan para la
construcción de las claves internas, se
realizan hacia la derecha.
Cifradores simétricos
n IDEA
u ‘92, X. Lay y J. Masey (Suiza)
u Criptosistema de bloque y simétrico
u Longitud de clave de 128bits
u Cifra bloques de 64 bits
u Operaciones:
F Xor
F x módulo 216
F + módulo 216
+1
5. 5
Cifradores simétricos
n IDEA (continuación)
u 52 claves internas de 16 bits c.u.
u 8 ciclos
u Divide 64 bits de entrada en 4
bloques de 16 bits (1º ciclo)
u No existen debilidades descubiertas
u Resiste criptoanálisis diferencial
Esquema de IDEA
B1 B2 B3 B4
B1 B2 B3 B4
B1 B2 B3 B4
B1 B2 B3 B4
B1 B2 B3 B4
O1 O2 O3 O4
T1
T2
T3
T4
TF
8
CICLOS
(i)
Ki Ki+1 Ki+2 Ki+3
Ki+4 Ki+5
K49 K50 K51 K52
6. 6
Transformaciones del IDEA
T1 Transformación 1
B1 = B1 x Ki
B2 = B2 + Ki+1
B3 = B3 + Ki+2
B4 = B4 x Ki+3
T2 Transformación 2
t1 = B2;
t2 = B3;
B3 = B3 Xor B1
B2 = B2 Xor B4
T3 Transformación 3
B3 = B3 x Ki+4
B2 = B2 + B3
B2 = B2 x Ki+5
B3 = B3 + B2
T4 Transformación 4
B1 = B1 Xor B2
B4 = B4 Xor B3
B2 = B2 Xor t2
B3 = B3 Xor t1
TF Transformación Final
O1 = B1 x K49
O2 = B3 + K50
O3 = B2 + K51
O4 = B4 x K52
Construcción de las
52 claves internas
1- La clave introducida por el usuario se divide en 8
subclaves de 16 bits (las primeras 8 claves
internas)
2- Los 128 bits anteriores se desplazan hacia la
izquierda 25 posiciones (con retroalimentación).
3- El resultado del paso 2 se divide en 8 trozos de 16
bits que significan las siguientes 8 claves internas.
4- Repetir los pasos 2 y 3 hasta conseguir las 52
claves internas (despreciar las que sobren)
7. 7
Descifrado de IDEA
• El proceso es idéntico, excepto en las claves utilizadas.
1º ciclo k49* k50# k51# k52* k47 k48
2º ciclo k43* k45# k44# k46* k41 k42
3º ciclo k37* k39# k38# k39* k35 k36
4º ciclo k31* k33# k32# k34* k29 k30
5º ciclo k25* k27# k26# k28* k23 k24
6º ciclo k19* k21# k20# k22* k17 k18
7º ciclo k13* k15# k14# k16* k11 k12
8º ciclo k7* k9# k8# k10* k5 k6
Transformacion final.....k1* k2# k3# k4*
kXX* = inverso multiplicativo de sXX mod ((2^16)+1)
kXX# = inverso aditivo de sXX mod (2^16)
El algoritmo Rijndael
• Cifrador de bloque que puede procesar bloques de datos de 128 bits
usando claves de cifrado de 128, 192 ó 256 bits.
• La función de transformación o de cifrado, que tiene lugar en cada
iteración, está compuesta a su vez de cuatro transformaciones
(orientadas a byte) diferentes :
• SubBytes(), ShiftRows(), MixColumns(), AddRoundKey()
• El número de rondas se determina de acuerdo a la siguiente tabla.
Donde Nb es el nº de bits del bloque dividido por 32 y Nk es el nº de
bits de la clave divididos por 32.
9. 9
Bi,j K[0]i,j Bi,j
32 88 31 e0 2b 28 ab 09 19 a0 9a e9
43 5a 31 37 7e ae f7 cf 3d f4 c6 f8
XOR =
f6 30 98 07 15 d2 15 4f e3 e2 8d 48
a8 8d a2 34 16 a6 88 3c be 2b 2a 08
Iteración inicial
Iteración inicial (AddRoundKey)
(AddRoundKey)
Texto inicial
Subclave
correspondiente a
esta iteración
Resultado de la
iteración
SubBytes
SubBytes
10. 10
La caja S está representada por la siguiente tabla:
19 a0 9a e9 d4 e0 b8 1e
3d f4 c6 f8 27 bf b4 41
e3 e2 8d 48 11 98 5d 52
be 2b 2a 08 ae f1 e5 30
ShiftRows
d4 e0 b8 1e d4 e0 b8 1e
27 bf b4 41 bf b4 41 27
11 98 5d 52 5d 52 11 98
ae f1 e5 30 30 ae f1 e5
11. 11
MixColumns
Esta transformación opera con la matriz de Estado columna por
columna, tratando cada una como un polinomio de cuatro términos
en GF(28), y, multiplicándolas módulo (x4 + 1) por un polinomio
a(x), dado por:
a(x) = {03}x3 + {01}x2 + {01}x + {02}
Esto puede ser escrito como una multiplicación de matrices.
Permitamos s'(x)=a(x)⊕s(x):
=
c
c
c
c
c
c
c
c
s
s
s
s
s
s
s
s
,
3
,
2
,
1
,
0
'
,
3
'
,
2
'
,
1
'
,
0
02
01
01
03
03
02
01
01
01
03
02
01
01
01
03
02
para 0 ≤ c < Nb
AddRoundKey
[s'0,c , s'1,c , s'2,c , s'3,c] = s0,c , s1,c , s2,c , s3,c] ⊕ [Wround∗4+c] para 0 ≤ c < 4,
04 e0 48 28 a0 88 23 2a a4 68 6b 02
66 cb f8 06 fa 54 a3 6c 9c 9f 5b 6a
XOR =
81 19 d3 26 fe 2c 39 76 7f 35 ea 50
e5 9a 7a 4c 17 b1 39 05 f2 2b 43 49
13. 13
InvSubBytes
.
InvMixColumns
InvMixColumns() es la inversa de la transformación MixColumns(). Esta
transformación opera con la matriz de Estado columna por columna, tratando
cada una como un polinomio de cuatro términos en GF(28), y, multiplicándolas
módulo (x4 + 1) por un polinomio fijo a-1(x), dado por:
a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}
=
c
c
c
c
c
c
c
c
s
s
s
s
e
d
b
b
e
d
d
b
e
d
b
e
s
s
s
s
,
3
,
2
,
1
,
0
'
,
3
'
,
2
'
,
1
'
,
0
0
09
0
0
0
0
09
0
0
0
0
09
09
0
0
0
para 0 ≤ c < Nb