algoritmo rijndael
TRANSCRIPT
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.
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
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
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
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
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
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:
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
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
S-BOX
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
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
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
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
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.
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
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
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
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
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
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
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
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
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
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.
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
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
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.
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
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
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
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.
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
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
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
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
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
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
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
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
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
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
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.
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.
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.