aes : algoritmo de cifrado simétrico estándar del siglo xxi advanced encryption standard vincent...

Post on 02-Jan-2015

15 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related