algoritmo rijndael

45
Algoritmo Rijndael Este algoritmo se adoptó oficialmente en octubre del 2000 como nuevo Estándar Avanzado de Cifrado (AES) por el NIST (National Institute for Standards and Technology) para su empleo en aplicaciones criptográficas. Su nombre se debe a dos criptografos belgas Joan Daemen y Vincent Rijmen. AES es un sistema de cifrado por bloques, diseñado para manejar longitudes de clave y de bloque variables, ambas comprendidas entre los 128 y los 256 bits.

Upload: laoska-benyasca

Post on 31-Jul-2015

438 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Algoritmo Rijndael

Algoritmo RijndaelEste algoritmo se adoptó oficialmente en octubre del 2000 como nuevo Estándar Avanzado de Cifrado (AES) por el NIST (National Institute for Standards and Technology) para su empleo en aplicaciones criptográficas.

Su nombre se debe a dos criptografos belgas Joan Daemen y Vincent Rijmen.

AES es un sistema de cifrado por bloques, diseñado para manejar longitudes de clave y de bloque variables, ambas comprendidas entre los 128 y los 256 bits.

Page 2: Algoritmo Rijndael

La estructura del algoritmo Rijndael esta formado por un conjunto de rondas, rondas se refiere a un conjunto de reiteraciones de 4 funciones matemáticas diferentes.

Por tanto, el algoritmo se basa en aplicar un numero de rondas determinado a una información en claro (texto plano) para producir una información cifrada. La información generada por cada función es un resultado intermedio, que se conoce como Estado.

El algoritmo representa el Estado como una matriz rectangular de bytes, que posee 4 filas y Nb columnas. Siendo el numero de columnas Nb en función del tamaño del bloque:

Nb = tamaño del bloque utilizado en bits / 32

Algoritmo Rijndael

Page 3: Algoritmo Rijndael

Por ejemplo la representación de una matriz de Estado para un tamaño de bloque de 128 bits seria:

Nb = 128 / 32 = 4

La informacion que se introducira en la matriz es el texto plano convertido en formato hexadecimal.

Algoritmo Rijndael

Page 4: Algoritmo Rijndael

La clave del sistema se representa mediante una matriz rectangular de bytes de 4 filas y Nk columnas. Siendo el numero de columnas Nk en funcion del tamaño de la clave:

Nk = tamaño de la clave en bits / 32

Por ejemplo la representacion de una clave de 128 bits (Nk = 4), en forma de matriz rectangular seria:

Para una clave de 192 bits el tamaño de la matriz seria de 4 filas x 6 columnas y para una clave de 256 bits el tamaño seria de 4 filas x 8 columnas.

Algoritmo Rijndael

Page 5: Algoritmo Rijndael

Una vez establecido estos parametros inciales el bloque que se pretende cifrar o descifrar se traslada byte a byte sobre la matriz de Estado, siguiendo la secuencia a0,0, a1,0, a2,0, a3,0, a0,1, …, a3,4, y los bytes de la clave se copian en la matriz de la clave siguiendo el mismo orden k0,0, k1,0, k2,0, k3,0, k0,1, …, k3,4.

A partir de este momento la matriz de Estado sufre 4 transformaciones por ronda. Las 4 transformaciones que aplica el algoritmo de Estado por ronda son: Funcion ByteSub, Funcion ShiftRow, Funcion MixColumn y Funcion AddRoundKey.

Algoritmo Rijndael

Page 6: Algoritmo Rijndael

El numero de rondas o vueltas dependera del tamaño del bloque (mensaje a cifrar) y clave del mensaje.

Por ejemplo si el tamaño de bloque y clave es de 128 bits, el numero de vueltas es 10.

Numero de rondas en funcion de tamaño del bloque y clave:

Ejemplo: tamaño del bloque 128 bits y tamaño de la clave 192 bits, entonces numero de rondas va a ser igual a:Nr = 12

Algoritmo Rijndael

Page 7: Algoritmo Rijndael

El proceso de cifrado consiste en aplicar las cuatro funciones matematicas.

Dichas funciones se realizaran de forma reiterativa para cada ronda.

Proceso de CifradoGraficamente la descripcion del proceso seria:

Page 8: Algoritmo Rijndael

Las funciones matematicas ByteSub, ShiftRow, MixColums y AddRoundKey se aplicaran en las rondas Nr - 1, en la ultima ronda se aplicaran solo tres funciones matematicas: ByteSub, ShiftRowy AddRoundKey.

Por ejemplo: Nr = 10 = en las primeras 9 rondas se aplicaran las cuatro funciones matematicas (ByteSub, ShiftRow, MixColums y AddRoundKey) pero en la ronda numero diez solo se aplican tres (ByteSub, ShiftRow y AddRoundKey).

Nr = 12 = en las primeras 11 rondas se aplicaran las cuatro funciones matematicas (ByteSub, ShiftRow, MixColums y AddRoundKey) pero en la ronda numero doce solo se aplican tres (ByteSub, ShiftRow y AddRoundKey).

Nr = 14 = en las primeras 13 rondas se aplicaran las cuatro funciones matematicas (ByteSub, ShiftRow, MixColums y AddRoundKey) pero en la ronda numero catorce solo se aplican tres (ByteSub, ShiftRow y AddRoundKey).

Proceso de Cifrado

Page 9: Algoritmo Rijndael

Las cuatro funciones matematicas usadas en cada ronda son:

1. Funcion ByteSub: Consiste en una sustitucion no lineal que se aplica a cada byte de la matriz de Estado de forma independiente, generando un nuevo byte. Esta transformacion consiste en la sustitucion de cada byte por el resultado de aplicarle la tabla de sustitucion S-Box.

Proceso de Cifrado

Page 10: Algoritmo Rijndael

S-BOX

Page 11: Algoritmo Rijndael

2. Funcion ShiftRow: Consiste en rotar a la izquierda las filas que conforman la matriz de Estado Actual, es decir, rotar los bytes de las filas de la matriz de estado resultante de la transformacion anterior a la izquierda. Cada fila ƒi se desplaza un numero de posiciones Ci diferente. Existe una posicion Ci para cada una de las 4 filas de la matriz de estado: C0 (para la fila 0), C1 (para la fila 1), C2 (para la fila 2) y C3 (para la fila 3).

La fila 0 siempre permanece inalterada (siempre C0 =0). Los valores de C1, C2, C3 que indican el numero de rotaciones de las filas f1, f2, f3 dependen del tamaño del bloque:

Proceso de Cifrado

Page 12: Algoritmo Rijndael

Por ejemplo, si el tamaño del bloque fuera de 128 bits (Nb=4) la fila 0 no seria rotada, la fila 1 se rotaria 1 byte (C1=1), la fila 2 seria rotada 2 bytes (C2=2) y la fila 3 seria rotada 3 bytes (C3=3).

Proceso de Cifrado

Page 13: Algoritmo Rijndael

3. Funcion MixColumns: consiste en multiplicar las columnas de bytes por el polinomio c(x).

Matemáticamente c(x) viene representada por:C(x)= ´03´x3 + ´01´x2 + ´01´x + ´02´

En forma algebraica se puede representar como:

S´(x) = c(x) s(x)

La representación matricial de esta función es la siguiente:

Proceso de Cifrado

Page 14: Algoritmo Rijndael

4. Funcion AddRoundKey: consiste en aplicar una operación XOR entre la matriz de Estado que proviene de la transformacion anterior (Funcion MixColumn) y una subclave que se genera a partir de la clave del sistema para esa ronda.

El bloque resultante de esta transformacion sera la nueva matriz de Estado para la siguiente ronda.

Proceso de Cifrado

Page 15: Algoritmo Rijndael

EjemploEn el texto Plano o bloque tenemos:19 3D E3 BE A0 F4 E2 2B 9A C6 8D 2A E9 F8 48 08

Y la clave:2B 7E 15 16 28 AE D2 A6 AB F7 15 88 09 CF 4F 3C

Clave y bloque = 128 bits

Nb = 4, Nk = 4 y Nr = 10. Por lo tanto la matriz tanto del bloque como de la clave sera de 4 filas x 4 columnas, el numero de rondas seran 10.

Page 16: Algoritmo Rijndael

MatrizBloque Clave

Ejemplo

19 A0 9A E9

3D F4 C6 F8

E3 E2 8D 48

BE 2B 2A 08

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

Page 17: Algoritmo Rijndael

Funcion SubBytesEn esta etapa utilizamos la S-BOX para la sustitucion de la matriz.

La sustitucion se realiza de la siguiente manera: tenemos el primer elemento 19:

X Y1 9

Nos colocamos en la tabla S-BOX y buscamos el numero 1 en el eje X y el 9 en el eje Y y el numero que se encuentre en la intercepcion de ambos sera el nuevo valor de 19 en este caso el nuevo valor es D4.

19 A0 9A E9

3D F4 C6 F8

E3 E2 8D 48

BE 2B 2A 08

D4 E0 B8 1E

27 BF B4 41

11 98 5D 52

AE F1 E5 30

Page 18: Algoritmo Rijndael

Funcion ShiftRowsEn esta etapa movemos el orden de la matriz. En nuestro ejemplo tanto el bloque como la clave son de 128 bits por lo tanto la rotacion se realizara de la siguiente forma:1. La fila 0 no seria rotada, 2. La fila 1 se rotaria 1 byte (C1=1)

3. La fila 2 seria rotada 2 bytes (C2=2)

4. La fila 3 seria rotada 3 bytes (C3=3)

MatrizC0 C1 C2 C3

F0 D4

E0

B8

1E

F1 27 BF

B4

41

F2 11 98 5D

52

F3 AE

F1 E5

30

D4 E0 B8 1E

BF B4 41 27

5D 52 11 98

30 AE F1 E5

Page 19: Algoritmo Rijndael

Para el MixColumns usamos la siguiente matriz

En la cual realizamos una operación XOR con la matriz resultante de la funcion ShiftRow:

Funcion MixColumns

D4 E0 B8 1E

BF B4 41 27

5D 52 11 98

30 AE F1 E5

Page 20: Algoritmo Rijndael

La multiplicacion se realiza de la siguiente forma:

Funcion MixColumns

D4

BF

5D

30

E0

B4

52

AE

B8

41

11

F1

1E

27

98

E5

Page 21: Algoritmo Rijndael

El desarrollo de la matriz seria de la siguiente manera:

Para la primera columna seria:S´0,0 = ({02} * S0,0) ( {03}* S1,0) S2,0 S3,0

S´0,0 = ({02} * {D4}) ( {03}* {BF}) {5D}

{30}

S´0,0 = B8 D1 5D 30

Funcion MixColumns

Page 22: Algoritmo Rijndael

S´0,0 = B8 D1 5D 30 =

Convertimos los cuatro valores en su forma binaria:B8 = 10111000 5D= 01011101D1= 11010001 30 = 00110000

Realizamos la funcion OR:B8 R1 R2D1 5D 30

10111000 01101001 00110100 11010001 01011101 00110000 R1: 01101001 R2: 00110100 RF: 00000100

00000100 = 04 S´0,0 = B8 D1 5D 30 = 04

Funcion MixColumns

Page 23: Algoritmo Rijndael

Funcion MixColumnsEl proceso anterior se realiza para cada una de las columnas y el resultado final luego de haber completado el proceso sera:

04 E0 48 28

66 CB F8 06

81 19 D3 26

E5 9A 7A 4C

Page 24: Algoritmo Rijndael

Funcion AddRoundKeyPara esta transformacion se debe aplicar la funcion XOR con la matriz que nos dio resulto de la funcion anterior (Funcion MixColumns) con la subclave que se genero para esta primera ronda.

Resultado MixColumns Subclave Generada para la primera

ronda04 E0 48 28

66 CB F8 06

81 19 D3 26

E5 9A 7A 4C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

Page 25: Algoritmo Rijndael

La resolucion de la funcion XOR anterior es de la siguiente forma:

Funcion AddRoundKey

04

66

81

E5

A0

FA

FE

17

E0

CB

19

9A

88

54

2C

B1

48

F8

D3

7A

23

A3

39

39

28

06

26

4C

2A

6C

76

05

1.

2.

3.

4.

Page 26: Algoritmo Rijndael

Desarrollando la funcion OR:

04 A0 = 00000100 10100000

= 10100100 = A4

66 FA = 01100110 11111010

= 10011100 = 9C

81 FE = 10000001 11111110 = 01111111 = 7F

E5 17 = 11100101 00010111 = 11110010 = F2

Funcion AddRoundKey

04

66

81

E5

A0

FA

FE

17

1. =

A4

9C

7F

F2

Resultado Final

Page 27: Algoritmo Rijndael

El proceso anterior se repite para cada una de las funciones XOR anteriores. Y el resultado final luego de haber desarrolldo la funcion sera:

Esta es la matriz resultante de nuestra primera ronda luego de haber aplicado las cuatro funciones matematicas. Para las demas rondas restantes se realiza el mismo proceso para cada una de las matrices.

Funcion AddRoundKey

A4 68 6B 02

9C 9F 5B 6A

7F 35 EA 50

F2 2B 43 49

Page 28: Algoritmo Rijndael

Generacion de SubClaves

La clave expandida puede ser vista como un conjunto de palabras de 32 bits con las columnas numeradas del 0 a 43.

las cuatro primeras columnas se llenan con la clave de cifrado.

Estas Subclaves se aplicaran con la funcion AddRoundKey con el XOR de la cuarta fase.

Page 29: Algoritmo Rijndael

Desarrollo de las SubClaves:

Para la generacion de las subclaves utilizamos la tabla RCON:

Generación de SubClaves

01 02 04 08 10 20 40 80 1B 36

00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00

00 00 00 00 00 00 00 00 00 00

Page 30: Algoritmo Rijndael

En las posiciones que son multiplo de 4 (W4, W8,W12, …, W40) se realiza lo siguiente:1. Rotamos el primer elemento de la columna

hacia abajo.2. Aplicamos la sustitucion con la S-BOX

EjemploRotamos Aplicamos S-BOX

=

Generacion de SubClaves

09

CF

4F

3C

1.

CF

4F

3C

09

2.

8A

84

EB

01

Page 31: Algoritmo Rijndael

Paso numero uno para generar las subclaves: W4

Generacion de SubClaves

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

8A

84

EB

01

Aplicamos los dos pasos anteriores

Page 32: Algoritmo Rijndael

En el paso numero dos: W4

=

Generacion de SubClaves

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0

FA

FE

17

8A

84

EB

01

2B

7E

15

16

Primera columna de la tabla RCON

01

00

00

00

A0

FA

FE

17

Para calcular la siguiente columna luego de un multiplo de 4 (W4, W8,W12, …, W40) utilizamos una columna de la tabla RCON en la operación XOR, este proceso se realiza hasta llegar a W40 que es el ultimo multiplo de 4 dentro del proceso de las subclaves.

Page 33: Algoritmo Rijndael

Paso 3: W4

=

Generacion de SubClaves

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88

FA 54

FE 2C

17 B1

28

AE

D2

A6

A0

FA

FE

17

88

54

2C

B1

Page 34: Algoritmo Rijndael

Generacion de SubClaves

Paso 4: W4

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23

FA 54 A3

FE 2C 39

17 B1 39

AB

F7

15

88

23

A3

39

39

88

54

2C

B1

Page 35: Algoritmo Rijndael

Generacion de SubClaves

Paso 5: W4

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

09

CF

4F

3C

2A

6C

76

05

23

A3

39

39

Page 36: Algoritmo Rijndael

Paso 6: W4 W8

Clave Primera Subclave

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

Generacion de SubClaves

Page 37: Algoritmo Rijndael

Generacion de SubClaves

Paso 7: W4 w8

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

6C

76

05

2A

2A

6C

76

05

Realizamos lo mismoque en el paso 1

Rotamos

50

38

6B

E5

S-BOX

Page 38: Algoritmo Rijndael

Generacion de SubClaves

Paso 8: W4 w8

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

02

00

00

00

F2

C2

95

F2

50

38

6B

E5

F2

C2

95

F2

A0

FA

FE

17

Segunda columna Tabla RCON

Page 39: Algoritmo Rijndael

Generacion de SubClaves

Paso 9: W4 w8

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

F2 7A

C2 96

95 B9

F2 43

7A

96

B9

43

88

54

2C

B1

F2

C2

95

F2

Page 40: Algoritmo Rijndael

Generacion de SubClaves

Paso 10: W4 w8

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

F2 7A 59

C2 96 35

95 B9 80

F2 43 7A

59

35

80

7A

88

54

2C

B1

F2

C2

95

F2

Page 41: Algoritmo Rijndael

Generacion de SubClaves

Paso 11: W4 w8

=

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

F2 7A 59 73

C2 96 35 59

95 B9 80 F6

F2 43 7A 7F

73

59

F6

7F

88

54

2C

B1

F2

C2

95

F2

Page 42: Algoritmo Rijndael

Generacion de SubClaves

Paso 11: W4 W8

W12

Clave Primera Subclave Segunda Subclave

Este proceso se realiza hasta obtener las 10 subclaves que se utilizaran en el proceso de cifrado

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

F2 7A 59 73

C2 96 35 59

95 B9 80 F6

F2 43 7A 7F

Page 43: Algoritmo Rijndael

Generacion de SubClaves

2B 28 AB 09

7E AE F7 CF

15 D2 15 4F

16 A6 88 3C

A0 88 23 2A

FA 54 A3 6C

FE 2C 39 76

17 B1 39 05

F2 7A 59 73

C2 96 35 59

95 B9 80 F6

F2 43 7A 7F

3D 47 1E 6D

80 16 23 7ª

47 FE 7E 88

7D 3E 44 3B

Clave 1.

2. 3.

Page 44: Algoritmo Rijndael

Generacion de SubClaves

EF A8 B6 DB

44 52 71 0B

A5 5B 25 AD

A1 7F 3B 00

D4 7C CA 11

D1 83 F2 F9

C6 9D B8 15

F8 87 BC BC

6D 11 DB CA

88 0B F9 00

A3 3E 86 93

7A FD 41 FD

4E 5F 84 4E

54 5F A6 A6

F7 C9 4F DC

0E F3 B2 4F

4. 5.

6. 7.

Page 45: Algoritmo Rijndael

Generacion de SubClaves

EA B5 31 7F

D2 8D 2B 8D

73 BA F5 29

21 D2 60 2F

AC 19 28 57

77 FA D1 5C

66 DC 29 00

F3 21 41 6E

8. 9.

D0 C9 E1 B6

14 EE 3F 63

F9 25 0C 0C

A8 89 C8 A6

10.