AES : Algoritmo de cifrado simétrico estándar del siglo XXI Advanced Encryption Standard Vincent...
-
Upload
perla-martha -
Category
Documents
-
view
15 -
download
0
Transcript of AES : Algoritmo de cifrado simétrico estándar del siglo XXI Advanced Encryption Standard Vincent...
AES: Algoritmo de cifrado simétrico estándar del siglo XXIAdvanced Encryption Standard
Vincent Rijmen(Bélgica, 1970- )
Joan Daemen(Bélgica, 1965- )
¿Cuánto vale la siguiente expresión?
12232
+ 0 1 2
0 0 1 2
1 1 2 0
2 2 0 1
}1,0{2 Z
0 1 2
0 0 0 0
1 0 1 2
2 0 2 1
}2,1,0{3 Z
+ 0 1
0 0 1
1 1 0
. 0 1
0 0 0
1 0 1
}3,2,1,0{4 Z+ 0 1 2 3
0 0 1 2 3
1 1 2 3 0
2 2 3 0 1
3 3 0 1 2
. 0 1 2 3
0 0 0 0 0
1 0 1 2 3
2 0 2 0 2
3 0 3 2 1
}5,4,3,2,1,0{5 Z
+ 0 1 2 3 4
0 0 1 2 3 4
1 1 2 3 4 0
2 2 3 4 0 1
3 3 4 0 1 2
4 4 0 1 2 3
. 0 1 2 3 4
0 0 0 0 0 0
1 0 1 2 3 4
2 0 2 4 1 3
3 0 3 1 4 2
4 0 4 3 2 1
6Z
+ 0 1 2 3 4 5
0 0 1 2 3 4 5
1 1 2 3 4 5 0
2 2 3 4 5 0 1
3 3 4 5 0 1 2
4 4 5 0 1 2 3
5 5 0 1 2 3 4
+ 0 1 2 3 4 5
0 0 0 0 0 0 0
1 0 1 2 3 4 5
2 0 2 4 0 2 4
3 0 3 0 3 0 3
4 0 4 2 0 4 2
5 0 5 4 3 2 1
¡¡ Interesa trabajar con conjuntos donde todos los elementos no nulos tengan inverso !!
Ese tipo de conjuntos se llaman cuerpos de Galois (1811-1832), en inglés GF (Galois Field)
• Zn con n primo es cuerpo.
• De manera que, por ejemplo, Z8 no es cuerpo
• ¿Existe un cuerpo con 8 elementos?.
Galois demostró que sí.
En realidad demostró algo mucho mejor: que el número de elementos de cualquier cuerpo finito era de la forma con p primo.
¿Pero cómo se construye este cuerpo?.
Vamos a verlo.
np
Construcción del cuerpo GF( )=GF(8)Consideremos el conjunto formado por todos los polinomios del tipo:
cxbxa 2
donde los coeficientes son ceros o unos
32
¿Cuántos polinomios se pueden formar?
a b c cxbxa 2 Binario Decimal
0 0 0 0 000 0
0 0 1 1 001 1
0 1 0 x 010 2
0 1 1 1x 011 3
1 0 0 2x 100 4
1 0 1 12 x 101 5
1 1 0 xx 2 110 6
1 1 1 12 xx 111 7
Construcción del cuerpo GF( )=GF(8)Vamos a hacer la tabla de sumar.
Los polinomios se suman como siempre sólo que ahora los coeficientes valen cero o uno ( suma de )
32
+ 0 1 x 1x 2x 12 x xx 2 12 xx
0 0 1 x 1x 2x 12 x xx 2 12 xx 1 1 0 1x x 12 x 2x 12 xx
xx 2
x x 1x 0 1 xx 2 12 xx
2x 12 x
1x 1x x 1 0 12 xx
xx 2 12 x 2x 2x 2x 12 x xx 2 12 xx
0 1 x 1x
12 x 12 x 2x 12 xx
xx 2 1 0 1x x
xx 2 xx 2 12 xx
2x 12 x x 1x 0 1
12 xx
12 xx
xx 2 12 x 2x 1x x 1 0
2Z
Ejemplo: xxxx )1()1( 22
Construcción del cuerpo GF( )=GF(8)La tabla de sumar anterior se puede escribir con números:
32
+ 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 0 3 2 5 4 7 6
2 2 3 0 1 6 7 4 5
3 3 2 1 0 7 6 5 4
4 4 5 6 7 0 1 2 3
5 5 4 7 6 1 0 3 2
6 6 7 4 5 2 3 0 1
7 7 6 5 4 3 2 1 0
71111110101052 2(
22
2(2( xxxx
41001111101173 2(
22
2(2( xxxx
Construcción del cuerpo GF( )=GF(8)Vamos a hacer la tabla de multiplicar.
Los polinomios se multiplican como siempre pero sólo con ceros y unos.
32
xxxqxpxxq
xxp
2)()(
1)(
)(
11)1()1()()(1)(
1)( 22
xxxxxxxqxpxxq
xxp
xxxxxxxqxpxxq
xxxp
3223
2
)()(1)(
)(
¡¡El resultado se sale fuera de donde estamos trabajando!!
¿Y ahora qué hacemos?
Construcción del cuerpo GF( )=GF(8)32
xxxxxxxqxpxxq
xxxp
3223
2
)()(1)(
)(
Pues vamos a dividir el polinomio que nos salga entre el polinomio:
1)( 3 xxxm
Y así nos aseguramos que el resultado siempre sea un polinomio de grado dos (como mucho).
1
11
1|
3
33
xx
xxxx
Ahora nos quedamos con el resto:
))((mod1)()( 3 xmxxxqxp
Construcción del cuerpo GF( )=GF(8)32
0 1 x 1x 2x 12 x xx 2 12 xx 0 0 0 0 0 0 0 0 0
1 0 1 x 1x 2x 12 x xx 2 12 xx x 0 x 2x xx 2 1x 1 12 xx
12 x
1x 0 1x xx 2 12 x 12 xx
2x 1 x 2x 0 2x 1x 12 xx
xx 2 x 12 x 1
12 x 0 12 x 1 2x x 12 xx
1x xx 2
xx 2 0 xx 2 12 xx
1 12 x 1x x 2x
12 xx
0 12 xx
12 x x 1 xx 2 2x 1x
0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 3 1 7 5
3 0 3 6 5 7 4 1 2
4 0 4 3 7 6 2 5 1
5 0 5 1 4 2 7 3 6
6 0 6 7 1 5 3 2 4
7 0 7 5 2 1 6 4 3
Construcción del cuerpo GF( )=GF(8)32
71111)1(01101032 2(2232
2(2( xxxxxx
1
11
1|
2
3
323
xx
xx
xxxx
0 1 2 3 4 5 6 7
0 0 0 0 0 0 0 0 0
1 0 1 2 3 4 5 6 7
2 0 2 4 6 3 1 7 5
3 0 3 6 5 7 4 1 2
4 0 4 3 7 6 2 5 1
5 0 5 1 4 2 7 3 6
6 0 6 7 1 5 3 2 4
7 0 7 5 2 1 6 4 3
Construcción del cuerpo GF( )=GF(8)32+ 0 1 2 3 4 5 6 7
0 0 1 2 3 4 5 6 7
1 1 0 3 2 5 4 7 6
2 2 3 0 1 6 7 4 5
3 3 2 1 0 7 6 5 4
4 4 5 6 7 0 1 2 3
5 5 4 7 6 1 0 3 2
6 6 7 4 5 2 3 0 1
7 7 6 5 4 3 2 1 0
Ejemplos:
47371273645
31214612232
1112232
Ahora ya se puede contestar a la pregunta del inicio
114112232
612232
En la aritmética habitual:
En la aritmética en :
En la aritmética en GF(8):
5Z
¡¡ El resultado depende del conjunto donde estamos trabajando !!
Aritmética de AES• El algoritmo AES trabaja con el cuerpo GF(256)=
•Trabaja con bytes y no con bits como hace DES.
• Cada 8 bits (1 byte) de entrada se interpretarán como un polinomio de grado siete:
)2( 8GF
01
12
23
34
45
56
67
701234567 bxbxbxbxbxbxbxbbbbbbbbb
101010111 2462( xxxx
Por ejemplo:
Aritmética de AES
¿Cómo se suma en AES?. Pues de la misma forma que razonamos en GF(8)
Ahora la tabla de sumar será mucho más grande ya que GF(256) tiene 256 elementos: 0, 1, 2, …, 255
Como la tabla de sumar no nos cabe aquí, vamos a hacer un ejemplo:
21201001101
11
001110000111010113187
2(
24677246
2(2(
xxxxxxxxxx
Aritmética de AES
La tabla de multiplicar también se hace igual que antes.
Cuando el producto nos dé como resultado un polinomio de grado
mayor que 7, lo dividiremos entre
La tabla de multiplicar es muy grande, así que sólo hacemos un ejemplo:
1)( 348 xxxxxm
1)1()1(
00111000011101011318734568911137246
2(2(
xxxxxxxxxxxxxx
Como el resultado es un polinomio de grado mayor que 7, tenemos que dividir entre m(x) y quedarnos con el resto
Aritmética de AES 1)( 348 xxxxxm
1)1()1(
00111000011101011318734568911137246
2(2(
xxxxxxxxxxxxxx
1
1
1|1
67
346711
3411
35568913
3483456891113
xx
xxxxx
xxx
xxxxxxx
xxxxxxxxxxxx
19300011100
1))((mod113187 673456891113
xxxmxxxxxxxx
Aritmética de AESHemos visto cómo se suman y cómo se multiplican dos números en AES:
19313187
21213187
De esa forma se completan las tablas de sumar y multiplicar.
Por último, sólo hay que decir que además es habitual trabajar en hexadecimal (base 16) en AES.
En base 16 se usan los símbolos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C D, E, F
Los elementos de GF(256), que iban desde 0 hasta 255, irán en hexadecimal desde 00 hasta FF. Volviendo a nuestro ejemplo anterior:
18357
48357
C
D
19313187
21213187
BASE 10 BASE 16
Ejemplo:
¿Podrías averiguar cuál es el resultado en GF(256) de las siguientes operaciones?
16(16(
16(16(
1357
413
A