Documentos de Académico
Documentos de Profesional
Documentos de Cultura
EL ALGORITMO CRIPTOGRFICO
AES PARA PROTECCIN DE DATOS
AUTOR:
Madrid
Fecha: / /
AUTOR:
DIRECTOR:
Agradecimientos
A mi familia, por mostrarme su apoyo y su ayuda, animndome y protegindome. Por
ensearme y dedicarme su gran esfuerzo para que todo esto fuera posible.
Resumen
En el presente Proyecto se presentan unos estudios sobre el estndar de cifrado para
proteccin de datos, el algoritmo criptogrfico AES, basado en el algoritmo Rijndael,
pretendiendo analizar y estudiar las bases matemticas de este algoritmo, as como su
implementacin y su aplicacin grfica para una mejor comprensin.
Este Proyecto tambin sirve para demostrar y comprobar cmo mediante el procesamiento
matemtico, numrico y simblico, la importancia que este campo tiene en una disciplina tan
importante como es el de la seguridad y la proteccin de datos, tan significativo en nuestros das,
donde hay muchsimas posibilidades de acceso a una misma informacin.
II
III
Abstract
This project presents a study about the Standard for an encrypted protection of data, AES
the advanced cryptographic algorithm, which is based on the Rijndael algorithm. It is intended to
analyze and to study the mathematical bases of this algorithm, at the same time as the
implementation and the graphical application for a better understanding.
In this connection, the main objective will consist in developing a description of the
mathematical foundations and the methods or numerical algorithms that meet specific conditions
used by the algorithm.
Also, such specific conditions- key, encrypted and decrypted will be subject to a large
investigation which will be complemented with the full documentation for its better
comprehension and understanding.
To test and substantiate such objectives, a series of codes and applications have been
developed in order to help its understanding and its integration into practical applications in the
real world.
This project also pretends to test and show, the importance of mathematical, numerical
and symbolic process knowledge in the field of security and the data protection discipline, key
knowledge in today world with many ways to access information
The importance and motivation of this project respond to the significant interest that the
world of codification, data protection and information security currently have. Moreover, greater
IV
interest are expected in the near future, in everything related to the world of communications and
computer science, as this technological discipline evolve at a rapid pace that requires very secure
mathematical developments.
ndice
ndice......................................................................................................................................... VI
1. Introduccin........................................................................................................................... 2
1.1. Historia.................................................................................................................... 5
1.2 Objetivos del Proyecto............................................................................................. 17
2. Fundamentos Matemticos....................................................................................................
2.1. Campos Finitos GF(2^8).........................................................................................
2.2 Suma en GF(2^8).....................................................................................................
2.3 Multiplicacion en GF(2^8).......................................................................................
2.4 Multiplicacion de polinomios de 4 bytes en GF(2^8)..............................................
19
19
22
23
25
27
29
31
35
37
39
40
43
46
48
52
54
56
58
4. Aspectos en la Implementacin.............................................................................................
4.1 Funcin Seleccin de clave......................................................................................
4.2 Funcin de expansin de clave.................................................................................
4.3 Desarrollo del Algoritmo..........................................................................................
65
65
65
69
VI
82
82
90
91
93
VII
1. Introduccin
Se puede definir la Criptografa como la ciencia que utiliza las matemticas como
motor de trabajo a la hora de codificar y decodificar datos. De esta manera los datos o
informacin est almacenada y puede ser enviada entre usuarios de forma segura.
Conviene hacer notar que la palabra Criptografa slo hace referencia al uso de
cdigos, por lo que no engloba a las tcnicas que se usan para romper dichos cdigos,
conocidas en su conjunto como Criptoanlisis. En cualquier caso ambas disciplinas estn
ntimamente ligadas; debe tenerse en cuenta que cuando se disea un sistema para cifrar
informacin, hay que tener muy presente su posible criptoanlisis. Finalmente, el trmino
Criptologa, aunque no est recogido an en el Diccionario, se emplea habitualmente para
agrupar Criptografa y Criptoanlisis.
Conviene hacer una breve resea histrica el NIST en 1977, Instituto Nacional de
Estndares y Tecnologa comenz el proceso de eleccin de un estndar de cifrado
avanzado que sustituyera el algoritmo DES mediante una convocatoria pblica que
garantizara una gran seguridad, mayor que la proporcionada por los algoritmos ya
existentes. El concurso const de tres rondas de mbito eliminatorio dependientes de las
caractersticas presentadas anteriormente.
1.1. Historia
Se puede empezar por ver el resumen bsico de la evolucion del estndar de cifrado
en los ultimos aos y posteriormente se detallar el proceso o procesos de evolucin.
En 1999 DES, cuya longitud de clave era un tanto corta y poda ser un tanto
comprometida, fue sustituido por TDES o TDEA, que triplicaba la clave.
Este algoritmo es til no slo para proteger la informacin del Gobierno EE. UU.,
sino que tambin se espera que sea utilizado masivamente por el sector privado, y que sea
adoptado por el resto de pases, incluso Europa, ya que es un algoritmo pblico. Las
caractersticas principales del nuevo algoritmo recaen en la: rapidez, seguridad, eficiencia y
facilidad de implementacin.
a)
a) Disponible gratuitamente.
3. Debe estar diseado de manera que se pueda aumentar la longitud de clave segn
las necesidades.
Los algoritmos que cumplieran esos requisitos seran juzgados de acuerdo con
algunos de los siguientes factores:
Seguridad.
Eficiencia computacional.
Requisitos de memoria.
Adecuacin HW y SW.
Simplicidad de diseo.
Flexibilidad.
Los algoritmos que se presentaron a este concurso adems tenan que soportar
obligatoriamente una longitud de bloque de 128 bits como mnimo, y una longitud de clave
de 128, 192 y 256 bits, al margen de cualesquiera otras longitudes posibles.
La intencin de este estndar es que sea robusto, por lo menos, hasta la mitad del
presente siglo. Aunque los ltimos avances tericos en computacin cuntica hacen temer
que en un plazo breve, si se construyesen estos ingenios, los problemas numricos hoy
considerados irresolubles en un tiempo razonable, como la factorizacin o los logaritmos
discretos, se podrn resolver mucho ms rpido, tirando por tierra la seguridad de los
algoritmos criptogrficos con longitudes de claves actuales.
128 bits, pero utilizando claves de 256 bits, con la gracia de utilizar el mismo algoritmo. En
el caso, de criptografa asimtrica este problema de aumentar la longitud de las claves, se
podra solucionar utilizando Curvas Elpticas ya que al necesitar de una clave ms
pequea que otros algoritmos, como por ejemplo RSA, para ofrecer la misma seguridad,
aunque aumentramos su clave todava su longitud serarazonable para una transmisin.
Durante todo el desarrollo del proceso AES, todos los algoritmos y criterios de
diseo estn disponibles de forma pblica y abierta, por lo que el escrutinio al que han sido
sometidos todos los finalistas ha sido enorme, acorde con la importancia del nuevo AES.
Todos los participantes han contribuido al proceso, analizando las posibles vulnerabilidades
de sus competidores.
HPC R. Schoeppel.
MARS.
RC6.
RIJNDAEL.
SERPENT.
TWOFISH.
10
b)
En este apartado se pretende exponer los resultados obtenidos por los cinco
algoritmos finalistas, en algunos aspectos importantes, como seguridad, rapidez
en
diferentes plataformas.
1.
Seguridad.
En cualquiera de los casos, segn los ataques publicados, los resultados obtenidos
en cada algoritmo fueron:
11
de seguridad es un poco difcil de medir, debido a que el nmero de rondas cambia con el
tamao de la clave. Rijndael recibi crticas sobre su margen de seguridad, ya que es de los
ms bajos, entre los finalistas, y que su estructura matemtica puede conducir a ataques. Sin
embargo, su estructura es bastante simple, esto ha facilitado su anlisis de seguridad
durante el tiempo especificado en el proceso de desarrollo del AES.
2.
Velocidad.
La
realizacin
de
SW
de
MARS,
RC6
SERPENT
no
varan
significativamente para los tres tamaos de clave de AES. Para Rijndael y Twofish, sin
embargo, la configuracin de la clave es lgicamente, ms lento para claves de 192 bits que
para claves de 128 bits, y ms lento todava para claves de 256 bits, aunque en estos casos
ofrecen una compensacin en el incremento de la seguridad.
12
Hay mucha informacin sobre la velocidad de los algoritmos finalistas, en una gran
variedad de plataformas. Las plataformas para las que se han hecho las pruebas son
procesadores de 32 bits (implementaciones en C y Java), procesadores de 64 bits (C y
ensambladores), procesadores de 8 bits (C y ASM), tarjetas smartcard de 32 bits (ARM), y
Procesadores de Seal Digital (DSP).
Leyenda: A: Intel Pentium II, C. B: Linux/GCC-2.7.2.2/Pentium 133 Mhz MMX,C. C: Intel Pentium III 600
Mhz, C. D: Apple G4 PowerPC, C. E: Intel Pentium II/III, C. F: Intel Pentium Pro 200, Symantec Visual Caf 2.5 a,
Java G: Intel Pentium Pro 200, JDK 1.3, Java H: UltraSPARC-1, JDK 1.2, Java I: HP PA-RISC. ASM J: HP IA-64, C
K:Compaq Alpha 21164a 500 Mhz, C. L: Compag Alpha 21264,C M: SGI 300 Mhz R12000.C N: Motorola 6805 CPU
core. C O: Z80 CPU+coprocesor.
13
14
500 Mhz, C. L: Compag Alpha 21264,C M: SGI 300 Mhz R12000.C N: Motorola 6805 CPU core. C O: Z80
CPU+coprocesor.
15
16
intencin ha sido la de
descifrado de bloques de texto aplicando el algoritmo AES. Sin duda este ha sido el trabajo
ms complejo, tanto por la bsqueda del algoritmo como su correcta implementacin y su
puesta en funcionamiento.
principales elementos de los que est formado, las bases matemticas que lo fundamentan y
sobre las que se basa, las transformaciones o funciones que hay que llevar a cabo, as como
entender por qu en unos casos es preferible utilizar una longitud de clave en lugar de otra,
aunque en principio persigan obtener el mismo resultado. Por lo tanto, s que se encuentran
diferencias en el modo de actuacin, y por consiguiente el algoritmo ser ms adecuado
para ciertos problemas en funcin de la naturaleza de los parmetros de entrada, ya que se
abordar con mtodos especficos para cada tipo de parmetros.
17
utilizacin de los distintos casos explicativos del algoritmo, es decir, centrar los ejemplos
en las partes bsicas y fundamentales del funcionamiento y de sus principales elementos
como son las claves y los bloques de entrada, o texto a cifrar y descifrar proporcionando
una serie de problemas resueltos con su pertinente explicacin para la mejor comprensin
de su funcionamiento.
se ha visto modificado durante la realizacin del proyecto. Para ello se haba utilizado el
paquete de criptografa basado en Java llamado Crypto, as como el propio algoritmo AES
tambin llamado RIJNDAEL, algoritmo de libre distribucin, pero por una serie de
problemas y fallos del algoritmo su sustituy por el lenguaje C++. La interfaz permite
ejecutar el algoritmo de manera fcil y sencilla para el usuario, ya que se puede utilizar
incluso sin tener grandes conocimientos del tema criptogrfico. Y adems, se ha
conseguido una aplicacin de manejo sencillo que se espera que pueda tener un buen uso
didctico e inteligible.
18
2. Fundamentos Matemticos
En este apartado se van a definir las operaciones matemticas bsicas que se van a
utilizar tanto en el cifrado como para descifrado de un cdigo con el algoritmo Rijndael,
as como algunos conceptos referentes al tratamiento de polinomios.
Dado que todo cuerpo de caracterstica 0 contiene a los racionales y es por lo tanto
infinito, todos los campos finitos tienen caracterstica prima, y por lo tanto, su tamao (o
cardinalidad) es de la forma pn , para p primo y n > 0 entero (pues el campo es un
espacio vectorial sobre el subcuerpo de cardinalidad p generado por el elemento 1). No es
en general cierto, sin embargo, que todo cuerpo de caracterstica prima sea finito.
19
Los campos de Galois son muy interesantes en Criptografa, gracias a que existe
un inverso aditivo y multiplicativo que permite cifrar y descifrar en el mismo cuerpo Zk ,
eliminando as los problemas de redondeo o truncamiento de valores si tales operaciones
de cifrado y descifrado se hubiesen realizado en aritmtica real.
20
(1)
(2)
21
Por tanto, para sumar dos polinomios, basta con aplicar la funcin XOR, a cada
elemento de los polinomios, dos a dos. La funcin XOR de dos bits, produce los siguientes
resultados:
00 = 0
10 = 1
01 = 1
11 = 0
(3)
Por tanto, para sumar dos polinomios, basta con aplicar la funcin XOR, a cada
elemento de los polinomios, dos a dos. La funcin XOR de dos bits, produce los siguientes
resultados.
1. Vase un ejemplo de suma de dos polinomios de tamao byte.
A = 5716 = 0101 0111
B = 8316 = 1000 0011.
Expresados en polinomios dentro de GF(28 ) sern:
A = 0101 0111 = x6 + x4 + x2 + x + 1
B = 1000 0011 = x7 + x + 1.
22
Sumando:
A + B = Hx6 + x4 + x2 + x + 1L + Hx7 + x + 1L mod 2
A + B = Hx7 + x6 + x4 + x2 + 2 x + 2L mod 2
A + B = x7 + x6 + x4 + x2 mod 2 = 1101 0100 = D416
(4)
23
24
x11 mod 2 = x7 + x6 + x4 + x3
x9 = x * x8 = x * Hx4 + x3 + x + 1L
x9 mod 2 = x5 + x4 + x2 + x
De donde
A * B = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1
25
(5)
c0 = a0 .b0 ,
c1 = a1 .b0 a0 .b1 ,
c2 = a2 .b0 a1 .b1 a0 .b2 ,
c3 = a3 .b0 a2 .b1 a1 .b2 a0 .b3 ,
c4 = a3 .b1 a2 .b2 a1 .b3
c5 = a3 .b2 a2 .b3
c6 = a3 .b3
El resultado cHxL no representa una palabra de 4 bytes, asi que hay que reducir cHxL a
un polinomio de mdulo menor que 4. Para el algoritmo Rijndael, se utilizar el polinomio
reductor x4 + 1.
La notacion para la multiplicacin de polinomios es
(7)
(8)
donde:
a3
a0
a1
a2
a2
a3
a0
a1
a1 y i b0 y
zz jj zz
a2 zzzz jjjj b1 zzzz
z.j z.
a3 zzzz jjjj b2 zzzz
zj z
a0 { k b3 {
(9)
26
a)
Ser pblico.
b)
mtodo criptogrfico que usa una misma clave para cifrar y para descifrar mensajes. Las
dos partes que se comunican han de ponerse de acuerdo sobre la clave a usar, de esta
manera una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje
usndola, lo enva al destinatario, y ste lo descifra con la misma clave.
c)
Estar diseado de manera que se pueda aumentar la longitud de clave segn las
necesidades, de manera que las claves podrn variar siempre y cuando el tamao sea
mltiplo de 4 bytes. Las longitudes de clave utilizadas por defecto sern 128 bits, 192 bits y
256 bits.
d)
A su vez est diseado para que el tamao de los bloques de datos tambin sea
variable dentro del mismo rango y con las mismas restricciones, es decir, bloques de datos
cuyo tamao sea mltiplo de 4 bytes.
e)
Su diseo tambin especifica que el algoritmo opere a nivel de byte, de manera que
f)
g)
27
28
(10)
De esta manera, si se tiene un bloque con 128 bits se tendra una matriz de cuatro
filas y Nb = 128 32 = 4 columnas quedando una matriz de forma:
a00
a10
a20
a30
a01
a11
a21
a31
a02
a12
a22
a32
a03
a13
a23
a33
(11)
La clave del sistema se representa con una estructura anloga a la del Estado, es
decir, se representa mediante una matriz rectangular de bytes de cuatro filas y Nk columnas.
Siendo el nmero de columnas Nk en funcin del tamao de la clave:
Nk = tamao de la clave en bits 32.
29
(12)
De esta manera, al igual que ocurra con el tamao del bloque, si se tiene una clave
con 128 bits se dispondra de una matriz de cuatro filas y Nr = 128 32 = 4 columnas,
quedando una matriz de forma:
k00
k10
k20
k30
k01
k11
k21
k31
k02
k12
k22
k32
k03
k13
k23
k33
(13)
(14)
De manera simplemente informativa se ver cmo quedaran las rondas para cada
uno de los posibles resultados, siendo la primera columna el tamao de la clave y la
primera fila el tamao del bloque:
Clave bloque Nb = 4 H128 bitsL Nb = 6 H192 bitsL Nb = 8 H256 bitsL
Nk = 4 H128 bitsL
10
12
14
Nk = 6 H192 bitsL
12
12
14
Nk = 8 H256 bitsL
14
14
14
Tabla 1
30
31
a)
Funcin AddRoundKey.
Es la primera transformacin que se ejecuta, es una suma XOR entre el texto plano
y la clave.
b)
Funcin ByteSub.
La
transformacin
ByteSub,
es
una
sustitucin
no
lineal,
que
opera
independientemente en cada byte de la matriz. Cada byte del bloque de entrada es invertido
sobre GFH28 L y luego sufre una transformacin afn. La operacin completa puede
realizarse mediante una matriz de sustitucin, conocida con el nombre de S-Box. La
transformacin ByteSub por medio del uso de dicha matriz, consiste en tomar el elemento
(byte) de la matriz A de cuatro filas por cuatro columnas, en formato hexadecimal. Dicho
nmero se transforma en el subndice necesario para extraer un valor de la matriz S-box.
c)
Funcin ShiftRow.
32
d)
Funcin MixColumn.
33
34
Primero, recordar que AES trabaja con bloques de datos de 128 bits y longitudes de
claves de 128, 192, 256 bit. Adems AES tiene 10, 12 14 vueltas respectivamente. Cada
vuelta de AES consiste en la aplicacin de una ronda estndar, que consiste en cuatro
transformaciones bsicas. La ltima ronda es especial y consiste de tres operaciones
bsicas, aadiendo siempre una ronda inicial. Por otro lado, se tiene el programa de claves
o extensin de la clave.
Recordar que AES interpreta el bloque de entrada de 128 bits, como una matriz
4 x 4 de entradas de bytes. Si el bloque es de 192 bits se agregan dos columnas ms, y si es
de 256 se agregan cuatro columnas ms.
(15)
Los cuatro primeros bytes conforman la primera columna. As con los siguientes
grupos de cuatro bytes se irn completando las diferentes columnas de manera que se queda
una matriz de la siguiente manera.
ij a00
jj
jj a10
jj
jj a
jjj 20
k a30
a01
a11
a21
a31
a02
a12
a22
a32
a03 y
zz
a13 zzzz
z.
a23 zzzz
z
a33 {
(16)
35
De esta misma manera se obtendrn las matrices respectivas para los bloques de
192 y 256 bits, siendo las matrices de 6 de 8 columnas, respectivamente.
De esta manera la clave, suponiendo se tiene como ejemplo una de 128 bits, es de la
manera indicada:
k00 k10 k20 k30 k01 k11 k21 k31 k02 k12 k22 k32 k03 k13 k23 k33 .
(17)
Los cuatro primeros bytes conforman la primera columna y los siguientes grupos de
cuatro bytes irn completando las diferentes columnas de manera que se queda una matriz
de la siguiente manera.
ij k00
jj
jj k10
jj
jj k
jjj 20
k k30
k01
k11
k21
k31
k02
k12
k22
k32
k03 y
zz
k13 zzzz
z.
k23 zzzz
z
k33 {
(18)
A partir de esta matriz combinada, con las funciones que se pasa a explicar en los
siguientes apartados, se obtendr una descripcin detallada del algoritmo. Las funciones
que se explicarn tienen un propsito fijo y preciso:
36
Una vez acaba la funcin MixColumns, se vuelve a a proceder con esta funcin de
AddRoundKey, crendose de nuevo un estado intermedio 1 pero en la siguiente ronda, o
bien de estar en la ltima ronda se crear el bloque de salida.
37
En este caso la matriz utilizada para realizar el XOR es la matriz de subclave, que
se explicar en el siguiente subapartado.
38
Siendo n el nmero de rondas que aplique el algoritmo, el nmero total de bits para
subclaves que se necesitan para todas las rondas es igual a el tamao del bloque utilizado
multiplicado por n + 1. Tambin se puede ver como 4 Hn + 1L * Nb bytes. Es decir, por
ejemplo, para un tamao de bloque de 128 bits y 10 vueltas, se necesitan 1408 bits de
subclaves: H128 * 11 = 1408 bitsL.
Por tanto, lgicamente, el nmero de claves que se generan depende del nmero de
rondas empleadas HNr L.
39
1.
Cada byte es considerado como un elemento del GFH28 L que genera el polinomio
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
00
01
8D
F6
CB
52
7B
D1
E8
4F
29
C0
B0
E1
E5
C7
74
B4
AA
4B
99
2B
60
5F
58
3F
FD
CC
FF
40
EE
B2
3A
6E
5A
F1
55
4D
A8
C9
C1
0A
98
15
30
44
A2
C2
2C
45
92
6C
F3
39
66
42
F2
35
20
6F
77
BB
59
19
1D
FE
37
67
2D
31
F5
69
A7
64
AB
13
54
25
E9
09
ED
5C
05
CA
4C
24
87
BF
18
3E
22
F0
51
EC
61
17
16
5E
AF
D3
49
A6
36
43
F4
47
91
DF
33
93
21
3B
79
B7
97
85
10
B5
BA
3C
B6
70
D0
06
A1
FA
81
82
83
7E
7F
80
96
73
BE
56
9B
9E
95
D9
F7
02
B9
A4
DE
6A
32
6D
D8
8A
84
72
2A
14
9F
88
F9
DC
89
9A
FB
7C
2E
C3
8F
B8
65
48
26
C8
12
4A
CE
E7
D2
62
0C
E0
1F
EF
11
75
78
71
A5
8E
76
3D
BD
BC
86
57
0B
28
2F
A3
DA
D4
E4
0F
A9
27
53
04
1B
FC
AC
E6
7A
07
AE
63
C5
DB
E2
EA
94
8B
C4
D5
9D
F8
90
6B
B1
0D
D6
EB
C6
0E
CF
AD
08
4E
D7
E3
5D
50
1E
B3
5B
23
38
34
68
46
03
8C
DD
9C
7D
A0
CD
1A
41
1C
40
2.
los bits del byte correspondiente, y a su vez y0 , y1, ..., y7 los bits del byte correspondiente al
resultado.
ij y0 yz i 1
jj zz jj
jj y1 zz jj 1
jjj zzz jjj
jj y2 zz jj 1
jjj zzz jjj
jj y3 zz jj 1
jjj zzz = jjj
jj zz jj 1
jjj y4 zzz jjj
jj zz jj 0
jjj y5 zzz jjj
jj zz jj
jjj y6 zzz jjj 0
j z
k y7 { k 0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
0
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1
1
1
1
0
0
0
1
1
1 y ij x0 yz i 1 y
zz jj zz jj zz
1 zzzz jjjj x1 zzzz jjjj 1 zzzz
zj z j z
1 zzzz jjjj x2 zzzz jjjj 0 zzzz
zj z j z
1 zzzz jjjj x3 zzzz jjjj 0 zzzz
z.j z + j z.
0 zzzz jjjj x4 zzzz jjjj 0 zzzz
zj z j z
0 zzzz jjjj x5 zzzz jjjj 1 zzzz
z jj zz j z
0 zzzz jjj x6 zzz jjjj 1 zzzz
z jj zz j z
1 { k x7 { k 0 {
(19)
41
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
63
7C
77
7B
F2
6B
6F
C5
30
01
67
2B
FE
D7
AB
76
CA
82
C9
7D
FA
59
47
F0
AD
D4
A2
AF
9C
A4
72
C0
B7
FD
93
26
36
3F
F7
CC
34
A5
E5
F1
71
D8
31
15
04
C7
23
C3
18
96
05
9A
07
12
80
E2
EB
27
B2
75
09
83
2C
1A
1B
6E
5A
A0
52
3B
D6
B3
29
E3
2F
84
53
D1
00
ED
20
FC
B1
5B
6A
CB
BE
39
4A
4C
58
CF
D0
EF
AA
FB
43
4D
33
85
45
F9
02
7F
50
3C
9F
A8
51
A3
40
8F
92
9D
38
F5
BC
B6
DA
21
10
FF
F3
D2
CD
0C
13
EC
5F
97
44
17
C4
A7
7E
3D
64
5D
19
73
60
81
4F
DC
22
2A
90
88
46
EE
B8
14
DE
5E
0B
DB
E0
32
3A
0A
49
06
24
5C
C2
D3
AC
62
91
95
E4
79
E7
C8
37
6D
8D
D5
4E
A9
6C
56
F4
EA
65
7A
AE
08
BA
78
25
2E
1C
A6
B4
C6
E8
DD
74
1F
4B
BD
8B
8A
70
3E
B5
66
48
03
F6
0E
61
35
57
B9
86
C1
1D
9E
E1
F8
98
11
69
D9
8E
94
9B
1E
87
E9
CE
55
28
DF
8C
A1
89
0D
BF
E6
42
68
41
99
2D
0F
B0
54
BB
16
42
Matrices de Estado S y S .
Figura 8
La primera fila que en este caso es la fila0 queda igual.
43
Figura 9
La tercera columna desplaza dos bytes circularmente.
Figura 10
44
Figura 11
45
(20)
donde S ' HxL representa la matriz de estado resultante de esta etapa, SHxL representa la matriz
de estados de entrada.
46
ij S '0,C yz ij 02
jj
z
jj S '1,C zzz jjjj 01
jj
zz = jj
jj
z
jj S '2,C zzz jjjj 01
jj
zz j
k S '3,C { k 03
03
02
01
01
01
03
02
01
01 y ij S0,C yz
zz j
z
01 zzzz jjjj S1,C zzzz
zz.
z.jj
03 zzzz jjj S2,C zzz
zz
z jj
02 { k S3,C {
Figura 12
El cdigo utilizado en esta funcion es el que se muestra a continuacin.
Funcin que efecta la transformacin MixColumns
void MixColumn Hunsigned char a@4D@4D, unsigned char BCL
8
unsigned char b@4D@4D;
int i, j;
for Hj = 0; j < BC; j ++L
for Hi = 0; i < 4; i ++L
b@iD@jD = mul H2, a@iD@jDL ^ mul
H3, a@Hi + 1L % 4D@jDL ^ a@Hi + 2L % 4D@jD ^ a@Hi + 3L % 4D@jD;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < BC; j ++L
a@iD@jD = b@iD@jD;
<
47
(21)
Por otra parte la longitud de 128 bits, garantiza la seguridad del sistema hasta
despus del ao 2030, por lo que en este proyecto se considera slo el caso de claves de
128 bits, aunque los algoritmos pueden ser extendidos fcilmente a los casos restantes.
La clave se expande a una matriz de 4 filas y Nb HNr + 1L columnas:
48
El primer For que nos encontramos lo que quiere decir es que las primeras 4
columnas de la extensin son la clave original.
3. Se toma como ejemplo un vector de prueba para el caso 128 bits.
Clave:
Partiendo
2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 c7 4f 3c
de
la
clave
dada,
se
obtienen
los
valores
para
w0 ,
49
w1 ,
W0 W1 W2 W3
2b
7e
15
16
28
ae
d2
a6
ab 09
f7 cf
15 4 f
88 3 c
Continuando con la ejecucin del cdigo, para nuestro caso, se tendran bloques de
4 filas y 4 columnas, y por lo tanto 10 rondas. De esta manera se puede observar, tambin
en nuestro caso, que si i es multiplo de 4 se sigue un procedimiento espacial.
For Hi = Nk; i < Nb; i ++L
8
temp = w@i 1D;
if Hi % Nk == 0L
temp = SubByte HRotByte HtempLL ^ Rcon@i NkD;
w@iD = w@i NkD ^ temp;
<
S Box
8a
84
eb
01
50
3.- Temp XOR Rcon[4/4]: se aplica un XOR entre el Temp, es decir la columna que
sale de las anteriores operaciones, y el Rcon@i Nk D, en este caso resulta:
temp RCon@i NkD
cf
4f
3c
09
01
00
xor
00
00
8b
84
eb
01
4.- Por ltimo se tiene otro XOR de la columna temporal con W @i - 4D, en este caso
W @0D.
temp w@i 4D
8b
84
eb
01
2b
7e
xor
=
15
16
a0
fa
fe
17
2b
7e
15
16
28
ae
d2
a6
ab 09
f7 cf
15 4 f
88 3 c
a0
fa
fe
17
51
W1 W2 W3
W4 W5
W6 W7
2b
7e
15
16
28
ae
d2
a6
a0 88
fa 54
fe 2 c
17 b1
23 2 a
a3 6 c
39 76
39 05
ab 09
f7 cf
15 4 f
88 3 c
Todas estas operaciones hasta rellenar las 44 columnas de las que est compuesta la
clave en este caso.
AddRoundKeyByteSubShiftRowsMixColumnsAddRoundKey.
52
Ejemplo.
Bloque de datos: 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34
Clave:
2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 c7 4f 3c.
Se aplica
32 88
i
j
j
j
43 5 a
j
j
j
j
j
j f6 30
j
j
k a8 8 d
la funcin AddKey.
31 e0 y i 2 b 28
z j
j
z
j
31 37 z
7 e ae
z
j
z
j
z
j
z
j
z
j
15 d2
98 07 z
z j
z j
j
a2 34 { k 16 a6
ab
f7
15
88
09 y i 19 a0 9 a e9 y
z
z j
j
j
z
z
3 d f4 c6 f8 z
c7 z
j
z
z
j
z
z
z.
z=j
j
j
z
z
4fz
e3 e2 8 d 48 z
j
z
z
j
z
z
z
z j
3 c { k be 2 b 2 a 08 {
e0
bf
98
f1
b8 1 e y
z
z
b4 41 z
z
z
z.
z
5 d 52 z
z
z
z
e5 30 {
e0
b4
52
ae
b8
41
11
f1
1ey
z
z
27 z
z
z
z.
z
98 z
z
z
z
e5 {
53
Aplicacin de
d4 e0 b8
i
j
j
j
bf b4 41
j
j
j
j
j
j 5 d 52 11
j
j
k 30 ae f1
la funcin MixColumns.
1 e y i 04 e0 48 28 y
z j
z
j
z
j
z
27 z
66 cb f8 06 z
z
j
z
z
j
z
z
z
j
z
j
z.
z
j
98 z
z j
j 81 19 d3 26 z
z
z
z j
z
e5 { k e5 9 a 7 a 4 c {
Destacar que en este proceso, las subclaves utilizadas, van desde la ltima generada
en el proceso de cifrado hasta la primera (que corresponder con bytes de la clave elegida
para cifrar).
De forma grfica:
54
55
56
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
52
09
6A
D5
30
36
A5
38
BF
40
A3
9E
81
F3
D7
FB
7C
E3
39
82
9B
2F
FF
87
34
8E
43
44
C4
DE
E9
CB
54
7B
94
32
A6
C2
23
3D
EE
4C
95
0B
42
FA
C3
4E
08
2E
A1
66
28
D9
24
B2
76
5B
A2
49
6D
8B
D1
25
72
F8
F6
64
86
68
98
16
D4
A4
5C
CC
5D
65
B6
92
6C
70
48
50
FD
ED
B9
DA
5E
15
46
57
A7
8D
9D
84
90
D8
AB
00
8C
BC
D3
0A
F7
E4
58
05
B8
B3
45
06
D0
2C
1E
8F
CA
3F
0F
02
C1
AF
BD
03
01
13
8A
6B
3A
91
11
41
4F
67
DC
EA
97
F2
CF
CE
F0
B4
E6
73
96
AC
74
22
E7
AD
35
85
E2
F9
37
E8
1C
75
DF
6E
47
F1
1A
71
1D
29
C5
89
6F
B7
62
0E
AA
18
BE
1B
FC
56
3E
4B
C6
D2
79
20
9A
DB
C0
FE
78
CD
5A
F4
1F
DD
A8
33
88
07
C7
31
B1
12
10
59
27
80
EC
5F
60
51
7F
A9
19
B5
4A
0D
2D
E5
7A
9F
93
C9
9C
EF
A0
E0
3B
4D
AE
2A
F5
B0
C8
EB
BB
3C
83
53
99
61
17
2B
04
7E
BA
77
D6
26
E1
69
14
63
55
21
0C
7D
(22)
donde SHxL representa la matriz de estado resultante de esta etapa, y S ' HxL representa la
matriz de estados de entrada.
57
0b
0e
09
0d
0d
0b
0e
09
09
0d
0b
0e
(23)
Nb = Nk = 4, Nr = 10.
Entrada:
00112233445566778899aabbccddeeff
Clave:
000102030405060708090a0b0c0d0e0f
Cifrado
Se ha de tener en cuenta que los estados que se repiten en cada una de las rondas
corresponden a las distintas funciones o etapas que se llevan a cabo, es decir, las distintas
transformaciones:
58
Ronda[0]. Entrada
00112233445566778899aabbccddeeff
Ronda[0]. Lista_Claves
000102030405060708090a0b0c0d0e0f
Ronda[1]. Estado_1
00102030405060708090a0b0c0d0e0f0
Ronda[1]. Estado_2
63cab7040953d051cd60e0e7ba70e18c
Ronda[1]. Estado_3
6353e08c0960e104cd70b751bacad0e7
Ronda[1]. Estado_4
5f72641557f5bc92f7be3b291db9f91a
Ronda[1]. Lista_Claves
d6aa74fdd2af72fadaa678f1d6ab76fe
Ronda[2]. Estado_1
89d810e8855ace682d1843d8cb128fe4
Ronda[2]. Estado_2
a761ca9b97be8b45d8ad1a611fc97369
Ronda[2]. Estado_3
a7be1a6997ad739bd8c9ca451f618b61
Ronda[2]. Estado_4
ff87968431d86a51645151fa773ad009
Ronda[2]. Lista_Claves
b692cf0b643dbdf1be9bc5006830b3fe
Ronda[3]. Estado_1
4915598f55e5d7a0daca94fa1f0a63f7
Ronda[3]. Estado_2
3b59cb73fcd90ee05774222dc067fb68
Ronda[3]. Estado_3
3bd92268fc74fb735767cbe0c0590e2d
Ronda[3]. Estado_4
4c9c1e66f771f0762c3f868e534df256
Ronda[3]. Lista_Claves
b6ff744ed2c2c9bf6c590cbf0469bf41
Ronda[4]. Estado_1
fa636a2825b339c940668a3157244d17
59
Ronda[4]. Estado_2
2dfb02343f6d12dd09337ec75b36e3f0
Ronda[4]. Estado_3
2d6d7ef03f33e334093602dd5bfb12c7
Ronda[4]. Estado_4
6385b79ffc538df997be478e7547d691
Ronda[4]. Lista_Claves
47f7f7bc95353e03f96c32bcfd058dfd
Ronda[5]. Estado_1
247240236966b3fa6ed2753288425b6c
Ronda[5]. Estado_2
36400926f9336d2d9fb59d23c42c3950
Ronda[5]. Estado_3
36339d50f9b539269f2c092dc4406d23
Ronda[5]. Estado_4
f4bcd45432e554d075f1d6c51dd03b3c
Ronda[5]. Lista_Claves
3caaa3e8a99f9deb50f3af57adf622aa
Ronda[6]. Estado_1
c81677bc9b7ac93b25027992b0261996
Ronda[6]. Estado_2
e847f56514dadde23f77b64fe7f7d490
Ronda[6]. Estado_3
e8dab6901477d4653ff7f5e2e747dd4f
Ronda[6]. Estado_4
9816ee7400f87f556b2c049c8e5ad036
Ronda[6]. Lista_Claves
5e390f7df7a69296a7553dc10aa31f6b
Ronda[7]. Estado_1
c62fe109f75eedc3cc79395d84f9cf5d
Ronda[7]. Estado_2
b415f8016858552e4bb6124c5f998a4c
Ronda[7]. Estado_3
b458124c68b68a014b99f82e5f15554c
Ronda[7]. Estado_4
c57e1c159a9bd286f05f4be098c63439
Ronda[7]. Lista_Claves
60
14f9701ae35fe28c440adf4d4ea9c026
Ronda[8]. Estado_1
d1876c0f79c4300ab45594add66ff41f
Ronda[8]. Estado_2
3e175076b61c04678dfc2295f6a8bfc0
Ronda[8]. Estado_3
3e1c22c0b6fcbf768da85067f6170495
Ronda[8]. Estado_4
baa03de7a1f9b56ed5512cba5f414d23
Ronda[8]. Lista_Claves
47438735a41c65b9e016baf4aebf7ad2
Ronda[9]. Estado_1
fde3bad205e5d0d73547964ef1fe37f1
Ronda[9]. Estado_2
5411f4b56bd9700e96a0902fa1bb9aa1
Ronda[9]. Estado_3
54d990a16ba09ab596bbf40ea111702f
Ronda[9]. Estado_4
e9f74eec023020f61bf2ccf2353c21c7
Ronda[9]. Lista_Claves
549932d1f08557681093ed9cbe2c974e
Ronda[10]. Estado_1
bd6e7c3df2b5779e0b61216e8b10b689
Ronda[10]. Estado_2
7a9f102789d5f50b2beffd9f3dca4ea7
Ronda[10]. Estado_3
7ad5fda789ef4e272bca100b3d9ff59f
Ronda[10]. Lista_Claves
13111d7fe3944a17f307a78b4d2b30c5
Ronda[10]. Salida
69c4e0d86a7b0430d8cdb78070b4c55a
Descifrado
Al igual que ocurre en el cifrado, se debe tener presente que los estados que se
repiten en cada una de las rondas corresponden a las distintas funciones o etapas que se
llevan a cabo, es decir, las distintas transformaciones: en esta caso inversas a las del cifrado.
61
62
Ronda[3]. Estado_3
d1876c0f79c4300ab45594add66ff41f
Ronda[3]. Lista_Claves
14f9701ae35fe28c440adf4d4ea9c026
Ronda[3]. Estado_4
c57e1c159a9bd286f05f4be098c63439
Ronda[4]. Estado_1
b458124c68b68a014b99f82e5f15554c
Ronda[4]. Estado_2
b415f8016858552e4bb6124c5f998a4c
Ronda[4]. Estado_3
c62fe109f75eedc3cc79395d84f9cf5d
Ronda[4]. Lista_Claves
5e390f7df7a69296a7553dc10aa31f6b
Ronda[4]. Estado_4
9816ee7400f87f556b2c049c8e5ad036
Ronda[5]. Estado_1
e8dab6901477d4653ff7f5e2e747dd4f
Ronda[5]. Estado_2
e847f56514dadde23f77b64fe7f7d490
Ronda[5]. Estado_3
c81677bc9b7ac93b25027992b0261996
Ronda[5]. Lista_Claves
3caaa3e8a99f9deb50f3af57adf622aa
Ronda[5]. Estado_4
f4bcd45432e554d075f1d6c51dd03b3c
Ronda[6]. Estado_1
36339d50f9b539269f2c092dc4406d23
Ronda[6]. Estado_2
36400926f9336d2d9fb59d23c42c3950
Ronda[6]. Estado_3
247240236966b3fa6ed2753288425b6c
Ronda[6]. Lista_Claves
47f7f7bc95353e03f96c32bcfd058dfd
Ronda[6]. Estado_4
6385b79ffc538df997be478e7547d691
Ronda[7]. Estado_1
2d6d7ef03f33e334093602dd5bfb12c7
63
Ronda[7]. Estado_2
2dfb02343f6d12dd09337ec75b36e3f0
Ronda[7]. Estado_3
fa636a2825b339c940668a3157244d17
Ronda[7]. Lista_Claves
b6ff744ed2c2c9bf6c590cbf0469bf41
Ronda[7]. Estado_4
4c9c1e66f771f0762c3f868e534df256
Ronda[8]. Estado_1
3bd92268fc74fb735767cbe0c0590e2d
Ronda[8]. Estado_2
3b59cb73fcd90ee05774222dc067fb68
Ronda[8]. Estado_3
4915598f55e5d7a0daca94fa1f0a63f7
Ronda[8]. Lista_Claves
b692cf0b643dbdf1be9bc5006830b3fe
Ronda[8]. Estado_4
ff87968431d86a51645151fa773ad009
Ronda[9]. Estado_1
a7be1a6997ad739bd8c9ca451f618b61
Ronda[9]. Estado_2
a761ca9b97be8b45d8ad1a611fc97369
Ronda[9]. Estado_3
89d810e8855ace682d1843d8cb128fe4
Ronda[9]. Lista_Claves
d6aa74fdd2af72fadaa678f1d6ab76fe
Ronda[9]. Estado_4
5f72641557f5bc92f7be3b291db9f91a
Ronda[10]. Estado_1 6353e08c0960e104cd70b751bacad0e7
Ronda[10]. Estado_2 63cab7040953d051cd60e0e7ba70e18c
Ronda[10]. Estado_3 00102030405060708090a0b0c0d0e0f0
Ronda[10]. Lista_Claves
000102030405060708090a0b0c0d0e0f
Ronda[10]. Salida
00112233445566778899aabbccddeeff
64
4. Aspectos en la Implementacin
4.1 Funcin Seleccin de clave
La funcin de seleccin simplemente toma consecutivamente de la secuencia
obtenida por la funcin de expansin de clave bytes que va asignado a cada subclave Ki.
para formar bloques del mismo tamao que la matriz de estado. Es decir, coge Nb * 4 bytes
para cada vuelta.
Las primeras Nk palabras de este array contienen la clave de cifrado, ya que la clave
del usuario se transforma tal cual al array W , mientras que el resto de palabras se van
generando a partir de estas primeras Nk palabras.
65
Para las palabras con Nk menor o igual que 6 cuyo valor de i que no sea multiplo de
Nk las subclaves se calculan como:
W HiL = W Hi Nk L XOR W H i 1 L.
(24)
(25)
El funcionamiento para Nk > 6 es igual que para Nk menor o igual que 6, salvo
cuando el valor de la variable i satisface que i mod Nk = 4. En este caso las palabras de
subclaves se calculan como:
W HiL = W Hi NkL XOR ByteSub HW @i - 1DL.
66
(26)
67
Ejemplo.
W[0]=2b 7e 15 16
W[1]=28 ae d2 a6
W[2]=ab f7 15 88
W[3]=09 cf 4f 3c
A partir de este momento se empieza a generar bytes de subclaves.
Calcular W[4]:
temp= W[3] = 09 cf 4f 3c
Siguiendo todos los criterios descritos en esta funcin se podran generar todos los
bytes de subclaves necesarios para la versin del algoritmo con la que se trabajar.
68
69
99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130,
201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147,
38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5,
154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214,
179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76,
88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81,
163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19,
236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42,
144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211,
172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234,
101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189,
139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225,
248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137,
13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22};
/* Definicin de la S-caja inversa (para el descifrado) */
unsigned char Si[256] = {
82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57,
130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166,
194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178,
118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164,
92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167,
141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247, 228, 88, 5, 184, 179, 69, 6,
208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65,
79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231,
173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197,
137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219,
192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39,
128, 236, 95, 96, 81, 127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156,
239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43,
4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125};
/* Definicin de los valores de la funcin rcon */
unsigned long rcon[30] = {
0x01,0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d,
0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef,
0xc5, 0x91, };
/* Definicin de los valores desplazamiento correspondiente a cada caso
de longitud del bloque o de cifrado y descifrado */
static unsigned char shifts[3][4][2] = {
0, 0,
1, 3,
2, 2,
3, 1,
0, 0,
1, 5,
2, 4,
3, 3,
0, 0,
1, 7,
3, 5,
4, 4
};
/* Funcin que multiplica dos elementos del campo finito GF(2^8)
usando las tablas Logtable[ ] y Alogtable[ ] */
unsigned char mul(unsigned char a, unsigned char b)
70
{
if (a && b)
return Alogtable[(Logtable[a] + Logtable[b])%255];
else return 0;
}
/* Funcin que efecta la transformacin AddRoundKey */
void KeyAddition(unsigned char a[4][4], unsigned char rk[4][4], unsigned char BC)
{
int i, j;
for(i = 0; i < 4; i++)
for(j = 0; j < BC; j++)
a[i][j] ^= rk[i][j];
}
/* Funcin que efecta la transformacin ShiftRows */
void ShiftRow(unsigned char a[4][4], unsigned char d, unsigned char BC)
{
unsigned char tmp[4];
int i, j;
for(i = 1; i < 4; i++)
{
for(j = 0; j < BC; j++)
tmp[j] = a[i][(j + shifts[((BC - 4) >> 1)][i][d]) % BC];
for(j = 0; j < BC; j++)
a[i][j] = tmp[j];
}
}
/* Funcin que efecta la transformacin SubBytes */
void Substitution(unsigned char a[4][4], unsigned char box[256], unsigned char BC)
{
int i, j;
for(i = 0; i < 4; i++)
for(j = 0; j < BC; j++)
a[i][j] = box[a[i][j]] ;
}
/* Funcin que efecta la transformacin MixColumns */
void MixColumn(unsigned char a[4][4], unsigned char BC)
{
unsigned char b[4][4];
int i, j;
for(j = 0; j < BC; j++)
for(i = 0; i < 4; i++)
b[i][j] = mul(2,a[i][j])^ mul(3,a[(i + 1) % 4][j])^ a[(i + 2) % 4][j]
^ a[(i + 3) % 4][j];
for(i = 0; i < 4; i++)
for(j = 0; j < BC; j++)
a[i][j] = b[i][j];
}
/* Funcin que efecta la transformacin MixColumns para el descifrado */
void InvMixColumn(unsigned char a[4][4], unsigned char BC)
{
unsigned char b[4][4];
int i, j;
for(j = 0; j < BC; j++)
for(i = 0; i < 4; i++)
b[i][j] = mul(0xe,a[i][j])^ mul(0xb,a[(i + 1) % 4][j])
^ mul(0xd,a[(i + 2) % 4][j])^ mul(0x9,a[(i + 3) % 4][j]);
for(i = 0; i < 4; i++)
71
72
73
0x16,0xa6,0x88,0x3c};
unsigned char A[4][4]={
0x32,0x88,0x31,0xe0,
0x43,0x5a,0x31,0x37,
0xf6,0x30,0x98,0x07,
0xa8,0x8d,0xa2,0x34};
unsigned char W[10+1][4][4];
int s,i,j;
memset(W,0,sizeof(W));
rijndaelKeySched (clave,W);
rijndaelEncrypt (A,W);
printf(" Cipher Text ");
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
printf("%02X ",A[j][i]);
printf("\n\n\n");
printf(" In the decipher procces, we apply the inverse transformations.\n");
printf(" \n\n");
rijndaelDecrypt (A,W);
printf("\n");
printf(" Decipher Text ");
for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
printf("%02X ",A[j][i]);
gotoxy(50,24);
printf("Press Enter to End");
getchar();
return 0;
}
74
las
cualidades
de
funcionamiento
de
los
telfonos
mviles,
75
Aplicacin AES en las redes IEEE 802.11i, WPA2 o redes Wireless Lan
El estndar IEEE 802.11i, tambin conocido como WPA2, es una mejora al
estndar 802.11 que especifica mecanismos de seguridad para las redes inalmbricas. El
estndar fue ratificado y reemplazado por el protocolo WPA, que haba sido introducido
previamente por la alianza WiFi como solucin a las inseguridades de WEP.
WPA2 802.11i hace uso del estndar de cifrado avanzado (AES) para
proporcionar autentificacin de origen, integridad y confidencialidad a la red mediante el
cifrado en los propios routers.
76
77
78
1.
las matemticas, que hacen posible el intercambio de mensajes de manera que slo puedan
ser ledos por las personas a quienes van dirigidos. La aritmtica modular, los campos
finitos, y otro gran nmero de mtodos matemticos son slo algunos ejemplos en los que
se apoyan los algoritmos de codificacin y descodificacin.
2.
3.
El algoritmo AES tiene los niveles de seguridad con claves de 80, 112, 128, 192, y
256 bits. Usar claves de 80 bits ser seguro hasta el ao 2010, claves de 112 bits hasta el
ao 2020, y de 128 bits posteriormente. Aunque esta seguridad puede reducirse por el modo
de operacin de los algoritmos en consideracin. Para 80 bits de seguridad AES, es
79
4.
128,
256
bits
de
clave
como el
algoritmo
Rijndael
es
impracticable
computacionalmente.
5.
a las aplicaciones informticas. En el estado actual de AES caben mencionar que son
numerosas las aplicaciones que han asumido ese algorimto criptogrfico en sus esquemas.
Entre las aplicaciones prcticas en diversas reas estn:
a)
b)
c)
d)
e)
documentos.
6.
80
a)
b)
ataques llamados algebraicos que en nuestros das no son operables, sin embargo, se
presume sean realidad en un futuro no lejano.
81
7. Desarrollo de la aplicacin
7.1 Ciclo de vida
Existen diferentes paradigmas de ciclo de vida, dependientes de la naturaleza del
proyecto a acometer, en este caso la metodologa o paradigma a seguir elegida ha sido una
mezcla entre el modelo lineal o en cascada y el modelo incremental o evolutivo. De esta
manera se comienza a desarrollar una etapa inicial donde se satisfagan una serie de
requisitos para partir de una base estable y bien fundada. Una vez que cada etapa es
finalizada, se proceder a realizar un documento revisado, validado y aprobado, de forma
que se pueda ir evolucionando fase a fase de forma incremental, sirviendo esta ltima como
aproximacin y documentacin de partida para la siguiente etapa o paquete de trabajo. Es el
tipo de metodologa ms lgico para aplicar a este proyecto, pues la parte de programacin
consiste en el diseo y aplicacin del algoritmo y en la mayora dependen una de otra, pues
para entender ciertas partes del algoritmo es necesario asentar ciertos conocimientos
anteriores. Esta forma es la ms apropiada para avanzar lo ms correcta y especficamente
posible.
82
.
Algoritmo AES Para
Proteccin de Datos
Fase 0
Gestin
Fase 1
Conceptos
Generales
Fase 2
Codificacin de
Algoritmos
Fase 1.1
Bsqueda de
Documentacin
Fase 1.2
Organizacin de
documentacin
Paquetes de trabajo.
Figura 17
83
Fase 3
Pruebas
Fase 4
Interfaz de
Usuario
Fase 5
Conclusin
Antes de entrar en la fase que llevar el gran peso del proyecto ser necesario
prepararla convenientemente. Para este fin se han establecido esta fase que a su vez esta
dividida en dos subfases imprescindibles a la hora de la creacion del proyecto pues sern la
base o cimientos sobre los que se funde el presente proyecto.
84
Entradas: En este apartado las entradas bsicas vienen de las primeras entrevistas o
reuniones, para conocer por dnde se debe encaminar la bsqueda informacin, de forma
ms especfica y detallada, para no perder tiempo e ir a lo que realmente es importante.
Propiamente hablando no es una entrada pues no se realiza ningn tipo de conversin de
informacin aunque s es de gran ayuda.
85
Definicin: Junto con la siguiente fase, este apartado es uno de los que ms peso
tienen a la hora del desarrollo del proyecto.
explicacin lo ms clara e
86
Definicin: Esta fase es, junto con la subfase anterior, la fase con mayor
peso dentro del presente proyecto, igual que cualquier proyecto de este mbito. Aqu se
pasan los pseudocdigos al lenguaje de programacin escogido, en este caso a la plataforma
Java J2EE que finalmente se sustituy por el lenguaje C++. Estos cdigos son el
fundamento y punto central de todo el proyecto, ya que sern los que permitirn explicar el
funcionamiento y la importancia del algoritmo.
Definicin: Es otro punto o fase importante, punto fundamental del proyecto que
permite, una vez desarrollado el algoritmo AES, llevarlo a examen para comprobarlo y ver
los posibles errores o problemas mediante la aplicacin de ejemplos sobre el algoritmo y
hacer una idea de las principales aplicaciones o funcionamientos de la aplicacin.
Salidas: Algoritmo probado y sin errores, listo para ser implantado como motor del
software.
87
Se debe tener en cuenta que la interfaz permita interactuar de forma fcil y sencilla,
es decir, que sirva, tanto para personas que estn familiarizadas con el algoritmo y el propio
mundo de la Criptografa, como para personas que no tengan esos conocimientos
adquiridos. De esta forma se intenta que el proyecto y el trabajo realizado no queden
ocultos sino que en un futuro sean de utilidad.
Entradas: La propia estructura del proyecto y el algoritmo que cumple con esta
estructura, ya que sirven de base para hacer el estudio de cmo enfocar la interfaz a los
usuarios.
88
Definicin: En esta fase se redactan las conclusiones del proyecto. Se intentar que
no tengan un nivel muy avanzado y que sean de fcil comprensin con un lenguaje
adaptado a personas que no necesariamente tengan que estar muy preparadas en el campo
de la Criptografa y Teora de Nmeros. El contenido de estas conclusiones es la
perspectiva del tema en tiempo presente, la gran importancia adquirida hasta ahora y la que
adquirir con el tiempo, as como una posible visualizacin de lneas futuras acerca de la
evolucin de la proteccin de datos, de la Criptografa y en particular de este algoritmo que
se presenta.
89
La tipologa de usuario final abarca prcticamente todas las posibles como bien se
define en el punto 7.1 Ciclo de vida en el apartado Fase 4, aunque vaya dirigida
inicialmente a personas que se encuentren ligadas con el mundo de la Criptografa. Un tema
90
de inters general, seguido por la explicacin de cada uno de los mtodos y funciones
matemticas utilizadas a la hora de desarrollar los algoritmos e incorporarlos a una interfaz
de usuario muy intuitiva, hace que no existan barreras de tipo tcnico por las que usuarios
no introducidos en la materia puedan usar y entender la herramienta. El hecho de que la
seguridad sea un tema de actualidad y la transicin histrica de la Criptografa se centre en
el envo de mensajes de forma secreta entre un emisor y un receptor, hace de este proyecto
una aplicacin interesante para sus usuarios sean o no expertos en el tema. Por ello se
espera que el rango de usuarios finales sea amplio, desde estudiantes y profesores hasta
interesados en la materia.
91
RF004. Representacin de la clave, al igual que el bloque de texto, como una matriz de 4
filas y Nk columnas, dependientes del tamao de dicha clave (128, 192, 256 bits).
RF005. Clculo de operaciones XOR entre los bloques de texto y las claves.
RF007. Calcular el nmero de rondas necesarias para llevar acabo el algoritmo de cifrado o
de descifrado.
RF008. Calcular el texto cifrado despus de aplicar las funciones necesarias para el cifrado.
RF009. Calcular el texto descifrado despus de aplicar las funciones necesarias para el
descifrado.
RF010. Comprobar los resultados de aplicar el algoritmo sobre el mismo texto aplicando
diferentes valores de clave.
RF011. Comprobar los resultados de aplicar el algoritmo sobre el mismo texto aplicando
diferentes longitudes de clave.
92
93
Texto sin cifrar: es una caja de texto, donde se introduce el texto que se
quiere cifrar.
Clave: es una caja de texto, en este caso solo se podr introducir caracteres
hexadecimales, es decir, dgitos del 0 al 9 y caracteres de la A a la F.
Adems de estos elementos existen otros que son lo botones que realizarn la
94
Por Defecto: botn que introduce unos valores por defecto en las cajas de
texto, nicamente para poner ejemplos de forma rapida
95
Pantalla Inicial.
Figura 18
Pantalla inicial lista para introducir el texto a cifrar o descifrar en el lugar adecuado
en cada caso, es decir, en las correspondientes cajas de texto, junto con la clave,
imprescindible para realizar las operaciones antes especificadas.
96
97
98
99
100
101
102
Pantalla Men.
Figura 25
103
104
8. Valoracin econmica y
planificacin
8.1. Introduccin
En este apartado se detalla la valoracin econmica o anlisis de costes de cada
una de las actividades que comprenden la realizacin y puesta en funcionamiento del
proyecto.
En segundo lugar se tiene la fase de desarrollo del software. Esta fase es sin duda
la que ha supuesto ms coste, en trminos de tiempo, y la que distingue nuestro
105
presupuesto del de otro proyecto que comprenda el mismo mbito o sea del mismo tipo.
Para cada una de las fases anteriores se resean los costes directos, expresados en
meses/hombre (meses completos dedicados para cada actividad), necesarios para
acometer cada una de ellas, indicndose la categora del realizador: Jefe de Proyecto o
Analista/Programador. La actividad del Jefe de Proyecto se ha estimado en un 17,5%
respecto de la actividad del Analista/Programador.
Por ltimo, cabe destacar que no debe haber confusin con el significado de los
costes unitarios aqu expresados. Estos costes representan la valoracin econmica que
hara la empresa por poner a cargo de este proyecto a dicho Jefe de Proyecto o Analista en
su caso.
2.
han de especificar en este apartado las licencias necesarias para el entorno de explotacin,
es decir, las licencias necesarias de los programas que se van a utilizar y que servirn de
herramientas para el desarrollo de la aplicacin.
106
Incrementos e IVA
Se parte de la suma de las partidas (1), (2), (3), y (4) formando el Coste Directo
del proyecto. A este Coste Directo se le aplican los Gastos Generales H13 %L y el
Beneficio Industrial H6 %L. La suma de los conceptos de Coste Directo, Gastos Generales
y Beneficio Industrial constituyen el Total Importe sin IVA.
A este importe se le sumarn los impuestos correspondientes como IVA H16 %L,
para la Pennsula y Baleares, IGIC H5 %L para las islas Canarias o IPSI H0 %L para Ceuta y
Melilla.
Total proyecto
Incrementos e IVA
determinan el importe total del desarrollo, implantacin y puesta en servicio del proyecto.
107
108
Unidad
(Meses/
Hombre)
Desarrollo Inf.
Desarrollo Inf.
0,04
0,20
7.847,53
5.762,31
274,66
1.152,46
Desarrollo Inf.
Desarrollo Inf.
0,04
0,25
7.847,53
5.762,31
343,33
1.440,58
Jefe de Proyecto
Analista/Programador
Desarrollo Inf.
Desarrollo Inf.
0,03
0,15
7.847,53
5.762,31
206,00
864,35
Jefe de Proyecto
Analista/Programador
Desarrollo Inf.
Desarrollo Inf.
0,04
0,21
7.847,53
5.762,31
288,40
1.210,09
Jefe de Proyecto
Analista/Programador
Desarrollo Inf.
Desarrollo Inf.
0,04
0,20
7.847,53
5.762,31
274,66
1.152,46
Desarrollo Inf.
Desarrollo Inf.
0,04
0,24
7.847,53
5.762,31
329,60
1.382,95
tem
P.1.1.1
P.1.1.2
P.1
Concepto
Coste Unitario
Coste Total
Total por
partidas
P.1.1.3
P.1.1.4
P.1.1.5
P.1.1.6
Fundamentos Matemticos:
Campos finitos GF(2^8),
Suma Y multiplicacion en GF(2^8),
Subtotal 1
3
Equipamiento y Licencias
P.1.3.1
P.1.3.2
P.1.3.3
Licencia de Windows XP
PC
AddLink Sw.
Cientfico
1.585,00
1.585,00
Microsoft Iberica
Hewlett Packard
1
1
285,24
1.138,29
285,24
1.138,29
Subtotal 3
4
P.1.4.1
8.919,53
3.008,53
Desarrollo Inf.
Subtotal 4
5
P.1.5.1
Desarrollo Inf.
2.959,50
2.959,50
Subtotal 7
Incrementos e IVA
Gastos Generales
Beneficio Industrial
Desarrollo Inf.
Desarrollo Inf.
13%
6%
14.887,56
14.887,56
16%
17.716,20
TOTAL EUROS
109
14.887,56
1.935,38
893,25
2.959,50
17.716,20
2.834,59
20.550,79
9. Apndice y Glosario
AES (Advanced Encryption Standard). Algoritmo Estndar de Cifrado Avanzado.
Array Conjunto o agrupacin de variables del mismo tipo cuyo acceso se realiza por
ndices.
Bit
Dgito del sistema de numeracin binario que puede tomar los valores 0 1.
Bloques (Block)
el estado, y la clave. La longitud de una secuencia es el nmero de bits que contiene. Los
bloques tambin son interpretados como las series de bytes.
Byte
Grupo de 8 bits tratados como una entidad simple, es decir como una palabra o bien
Cifrado Inverso (Inverse Cipher) Serie de las transformaciones que convierten el texto
cifrado en el texto de entrada inicial sin cifrar mediante la utilizacin de la clave.
Clave para generar un juego de claves; se puede ver como una matriz de vectores o matriz
de cuatro filas y Nk columnas. K es su representacion a lo largo del algoritmo.
Estado (State Intermediate) Es el resultado intermedio de cada una de las funciones del
110
Key Expansion
Nb es el nmero de columnas (formadas cada una de ella por 32 bytes) que forman
la matriz de estado Estado, por lo que variar su nmero dependiendo del tamao del
bloque.
Nb = tamao del bloque utilizado en bits 32.
Nk es el nmero de columnas (formadas cada una de ella por 32 bytes) que forman
Nk
Palabra (Word)
Rijndael
Round Key
funcin o rutina Key Expansion, que se aplica tanto para el cifrado como para el descifrado.
111
Texto Cifrado (Ciphertext) Salida de datos cifrados, es decir, resultado del cifrado del
bloque o texto de entrada o bien datos de entrada a la hora de realizar el inverso al cifrado,
es decir, datos de entrada a la hora de realizar el descifrado.
quiere cifrar, pero al igual que ocurre con el texto cifrado o Ciphertext, tambin es el texto
de salida o resultado de la funcin inversa al cifrado, el descifrado.
112
Bibliografa
[AES01]
[AMG00]
[CCSFe]
Martnez, Fernando.
Criptografa de clave secreta.
Matemtica Aplicada II.
[CSS01]
113
[DES99]
[FSE00]
[FUST00]
[JNIST00]
[LUCE07]
[MATE05]
114
[MENE96]
[PAST01]
[PRO02]
[RIJN02]
[ROME04]
[SEI02]
115
[WILL99]
Stallings, Williams.
Cryptography and Network Security: Principles and Practice.
Second Edition. Prentice Hall, New Jersey, 1999.
URLs
[1]
http://csrc.nist.gov/CryptoToolkit/aes/
[2]
http://www.williamstallings.com
[3]
http://www.kriptopolis.com/
[4]
http://www.esat.kuleuven.ac.be/~rijmen/rijndael/
[5]
http://es.wikipedia.org
[6]
http://www.htmlweb.net/seguridad/cripto/cripto_2.html
[7]
http://gaussianos.com/criptografia-cifrado-de-clave-publica-i/
[8]
http://www.google.com/
[9]
http://www.lawebdelprogramador.com/
[10]
http://java.sun.com/developer/technicalArticles/Security/AES/AES_v1.html
[11]
http://www.koders.com/java
[12]
http://www.cs.ucdavis.edu/~rogaway/ocb/ocb-java/Rijndael.java
116
[13]
http://www.tendencias21.net/
[14]
http://www.cacr.math.uwaterloo.ca/hac/
[15]
http://www.aes.nist.gov/aes
117