Post on 29-Nov-2015
PROYECTO FIN DE CARRERA
EL ALGORITMO CRIPTOGRÁFICO AES PARA PROTECCIÓN DE DATOS
AUTOR: D. Miguel Vázquez Fernández Madrid Septiembre de 2007
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERO EN INFORMÁTICA
Autorizada la entrega del proyecto del alumno:
D. Miguel Vázquez Fernández
Madrid, 3 de septiembre de 2007
EL DIRECTOR DEL PROYECTO
Fdo.: Dr. D. Francisco Javier Rodríguez Gómez
Vº Bº del Coordinador de Proyectos
Fdo.: D. David Contreras Bárcena Fecha: ……/ ……/ ……
PROYECTO FIN DE CARRERA
EL ALGORITMO CRIPTOGRÁFICO AES PARA PROTECCIÓN DE DATOS
AUTOR: D. Miguel Vázquez Fernández
DIRECTOR: Dr. D. Francisco Javier Rodríguez Gómez
UNIVERSIDAD PONTIFICIA COMILLAS
ESCUELA TÉCNICA SUPERIOR DE INGENIERÍA (ICAI)
INGENIERO EN INFORMÁTICA
El Algoritmo Criptográfico AES paraProtección de Datos
Agradecimientos
A mi familia, por mostrarme su apoyo y su ayuda, animándome y protegiéndome. Por
enseñarme y dedicarme su gran esfuerzo para que todo esto fuera posible.
A mi Director y gran amigo, Francisco Javier Rodríguez Gómez, por su paciencia y
ayuda. Por todos los valores enseñados y su gran dedicación en todo momento.
I
Resumen
En el presente Proyecto se presentan unos estudios sobre el estándar de cifrado para
protección de datos, el algoritmo criptográfico AES, basado en el algoritmo Rijndael,
pretendiendo analizar y estudiar las bases matemáticas de este algoritmo, así como su
implementación y su aplicación gráfica para una mejor comprensión.
De esta manera el principal objetivo consistirá en desarrollar una descripción de los
fundamentos matemáticos y los métodos o algoritmos numéricos que cumplan con unas
condiciones especificadas utilizadas por el algoritmo.
A su vez se hará una amplia investigación de dichas condiciones específicas de los
elementos principales como son la clave, el cifrado y el descifrado, complementada con una
amplia documentación para una mejor comprensión y entendimiento.
Para comprobar y demostrar estos objetivos se ha desarrollado una serie de códigos y
aplicaciones que ayudarán a su mejor entendimiento y su integración en las diferentes aplicaciones
prácticas del mundo real.
Este Proyecto también sirve para demostrar y comprobar cómo mediante el procesamiento
matemático, numérico y simbólico, la importancia que este campo tiene en una disciplina tan
importante como es el de la seguridad y la protección de datos, tan significativo en nuestros días,
donde hay muchísimas posibilidades de acceso a una misma información.
La mayor importancia y motivación de este Proyecto reside en el gran interés que ha
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
II
despertado el mundo de la codificación, la protección de datos, la seguridad y la importancia que
estos campos tienen y tendrán en un futuro muy próximo en el mundo de la informática y las
comunicaciones. Máxime cuando se observa que estas disciplinas tecnológicas evolucionan a
pasos agigantados y se requieren teorías matemáticas más seguras.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
V
Índice
Índice... VI......................................................................................................................................
1. Introducción... 2........................................................................................................................ 1.1. Historia... 5................................................................................................................. 1.2 Objetivos del Proyecto... 17.......................................................................................... 2. Fundamentos Matemáticos... 19................................................................................................. 2.1. Campos Finitos GF(2^8)... 19...................................................................................... 2.2 Suma en GF(2^8)... 22.................................................................................................. 2.3 Multiplicacion en GF(2^8)... 23.................................................................................... 2.4 Multiplicacion de polinomios de 4 bytes en GF(2^8)... 25........................................... 3. Especificación del Algoritmo... 27............................................................................................. 3.1 Estructura del Algoritmo... 29....................................................................................... 3.2 Descripción del proceso de cifrado... 31....................................................................... 3.3 Funciones utilizadas para el cifrado... 35...................................................................... 3.3.1 Función AddRoundKey... 37........................................................................... 3.3.1.1 Cálculo de las subclaves... 39............................................................ 3.3.2 Función ByteSub... 40..................................................................................... 3.3.3 Función ShiftRow... 43.................................................................................... 3.3.4 Función MixColumns... 46.............................................................................. 3.3.5 Función KeySchedule... 48.............................................................................. 3.3.6 Ejemplo Explicativo del Algoritmo de cifrado... 52....................................... 3.4 Descripción del proceso de descifrado... 54.................................................................. 3.4.1 Función utilizada para el descifrado... 56........................................................ 3.5 Ejemplo de Cifrado y Descifrado... 58.......................................................................... 4. Aspectos en la Implementación... 65.......................................................................................... 4.1 Función Selección de clave... 65................................................................................... 4.2 Función de expansión de clave... 65.............................................................................. 4.3 Desarrollo del Algoritmo... 69....................................................................................... 5. Aplicaciones del algoritmo en la proteccion de datos... 75........................................................
6. Conclusiones y líneas futuras... 79.............................................................................................
7. Desarrollo de la aplicación... 82................................................................................................. 7.1. Ciclo de vida... 82......................................................................................................... 7.2. Identificación de necesidades... 90............................................................................... 7.3. Análisis de requisitos... 91............................................................................................ 7.4. Arquitectura técnica... 93..............................................................................................
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
VI
7.5. Diseño de la interfaz de usuario... 94........................................................................... 8. Valoración económica y planificación... 105............................................................................... 8.1. Introducción... 105.......................................................................................................... 8.2. Técnicas de estimación de costes... 105.................................................................................... 8.3. Planificación temporal del proyecto... 108..................................................................... 8.4. Costes del proyecto... 108...............................................................................................
9. Apéndice y Glosario... 110...........................................................................................................
Bibliografía... 113.............................................................................................................................
CD-ROM con el Proyecto Fin de Carrera y la estructura de archivos de la Aplicación Informática.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
VII
El Algoritmo Criptográfico AES para Protección de Datos
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
1
1. Introducción
Se puede definir la Criptografía como la ciencia que utiliza las matemáticas como
motor de trabajo a la hora de codificar y decodificar datos. De esta manera los datos o
información está almacenada y puede ser enviada entre usuarios de forma segura.
La Criptografía abarca muchos campos, tales como revisión de integridad, firmas
digitales, autenticación, etc. El campo central, sin embargo, es el cifrado, la tecnología
que permite mantener la confidencialidad de los datos.
Conviene hacer notar que la palabra Criptografía sólo hace referencia al uso de
códigos, por lo que no engloba a las técnicas que se usan para romper dichos códigos,
conocidas en su conjunto como Criptoanálisis. En cualquier caso ambas disciplinas están
íntimamente ligadas; debe tenerse en cuenta que cuando se diseña un sistema para cifrar
información, hay que tener muy presente su posible criptoanálisis. Finalmente, el término
Criptología, aunque no está recogido aún en el Diccionario, se emplea habitualmente para
agrupar Criptografía y Criptoanálisis.
Existen dos tipos fundamentales de criptosistemas:
Criptosistemas simétricos o de clave privada: Son aquéllos que emplean la misma
clave k tanto para cifrar como para descifrar. Presentan el inconveniente de que, para ser
empleados en comunicaciones, la clave k debe estar tanto en el emisor como en el
receptor, lo cual plantea la situación de elegir cómo transmitir la clave de forma segura.
Criptosistemas asimétricos o de clave pública: Estos emplean una doble clave
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
2
Hkp, kPL. kp se conoce como clave privada y kP se conoce como clave pública. Una de
ellas sirve para la transformación E de cifrado y la otra para la transformación D de
descifrado. En muchos casos son intercambiables, esto es, si se emplea una para cifrar la
otra sirve para descifrar y viceversa. Estos criptosistemas deben cumplir además que el
conocimiento de la clave pública kp no permita calcular la clave privada kP Ofrecen un
abanico superior de posibilidades, pudiendo emplearse para establecer comunicaciones
seguras por canales inseguros — puesto que únicamente viaja por el canal la clave
pública—, o para llevar a cabo autentificaciones.
En la práctica se emplea una combinación de estos dos tipos de criptosistemas,
puesto que los segundos presentan el inconveniente de ser computacionalmente mucho
más costosos que los primeros. En el mundo real se codifican los mensajes (largos)
mediante algoritmos simétricos, que suelen ser muy eficientes, y luego se hace uso de la
criptografía asimétrica para codificar las claves simétricas (cortas).
Hoy día hay un excelente desarrollo de las tecnologías de cifrado en organismos
gubernamentales altamente secretos que cuentan con enormes recursos y miles de
personas.
Conviene hacer una breve reseña histórica el NIST en 1977, Instituto Nacional de
Estándares y Tecnología comenzó el proceso de elección de un estándar de cifrado
avanzado que sustituyera el algoritmo DES mediante una convocatoria pública 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
características presentadas anteriormente.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
3
El AES (Advanced Encryption Standard) es probablemente un algoritmo de
cifrado de los más utilizados hoy en día pues es seguro y eficiente, de hecho es el estándar
de cifrado elegido por el Instituto Nacional de estándares y tecnología como estándar de
proceso de información federal.
El crecimiento explosivo de la informática y la convergencia entre ordenadores y
comunicaciones, hacen pensar que los algoritmos de cifrado corresponderán al código
ejecutable más popular en el futuro. Tiene aplicaciones en los negocios por Internet,
correo electrónico, dinero electrónico (tarjetas de crédito, tarjetas inteligentes), llaveros
electrónicos, chips de seguridad contra robos de coches, registros públicos. Todas esas
aplicaciones requieren el cifrado de cierta información. Más aún, en un mundo donde
todos los ordenadores están interconectados entre sí y todo puede ser accedido por todos,
los sistemas operativos del futuro cifrarán todos los ficheros que guardan en el disco duro
de manera automática para una mayor seguridad y eficacia.
En el presente proyecto se presentan el estudio del estándar de cifrado para
protección de datos —algoritmo AES (Advanced Encryption Standard)—, basado en el
algoritmo criptográfico Rinjdael, pretendiendo analizar y estudiar las bases matemáticas
de este algoritmo, así como su implementación práctica con una interfaz de usuario para
una mejor comprensión del mismo.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
4
1.1. Historia
Se puede empezar por ver el resumen básico de la evolucion del estándar de cifrado
en los ultimos años y posteriormente se detallará el proceso o procesos de evolución.
En 1999 DES, cuya longitud de clave era un tanto corta y podía ser un tanto
comprometida, fue sustituido por TDES o TDEA, que triplicaba la clave.
Finalmente en 2001 apareció AES basado en el algoritmo RINJDAEL, que fue el
algoritmo ganador del concurso convocado por NIST pues cumplía las características
requeridas perfectamente, garantizando la seguridad hasta los siguientes 20 años.
En el año 1997, el Instituto Nacional de Estándares y Tecnología de EEUU
(NIST), emprende un proceso abierto para la selección de un nuevo algoritmo de cifrado
(AES), que sustituya al antiguo estándar de cifrado (DES).
Este algoritmo es útil no sólo para proteger la información del Gobierno EE. UU.,
sino que también se espera que sea utilizado masivamente por el sector privado, y que sea
adoptado por el resto de países, incluso Europa, ya que es un algoritmo público. Las
características principales del nuevo algoritmo recaen en la: rapidez, seguridad, eficiencia y
facilidad de implementación.
a) Concurso público AES
En 1997, el Instituto Nacional de Estándares y Tecnología de EEUU (NIST)
inicia los primeros pasos para la consolidación de un Estándar de Cifrado Avanzado (AES),
que pueda permitir proteger los datos confidenciales del gobierno, así como la información
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
5
sensible de los ciudadanos.
El objetivo principal era desarrollar una especificación que permitiese
encontrar un algoritmo de cifrado que sustituya al obsoleto DES (inseguro actualmente
debido a su pequeña clave de 56 bits que permite ataques por fuerza bruta en tiempos
razonables, con máquinas específicas).
Los siguientes criterios de evaluación y requisitos mínimos de aceptación
fueron especificados:
1. El algoritmo debe ser público y estar:
a) Disponible gratuitamente.
b) Disponible bajo términos consistentes con la política de patentes del Instituto
Nacional Americano de Estándares (American National Standards Institute, ANSI)
2. Debe ser un algoritmo de cifrado en bloque simétrico.
3. Debe estar diseñado de manera que se pueda aumentar la longitud de clave según
las necesidades.
4. Debe ser implementable tanto en HW como en SW.
Los algoritmos que cumplieran esos requisitos serían juzgados de acuerdo con
algunos de los siguientes factores:
· Seguridad.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
6
· Eficiencia computacional.
· Requisitos de memoria.
· Adecuación HW y SW.
· Simplicidad de diseño.
· Flexibilidad.
Los algoritmos que se presentaron a este concurso además tenían que soportar
obligatoriamente una longitud de bloque de 128 bits como mínimo, y una longitud de clave
de 128, 192 y 256 bits, al margen de cualesquiera otras longitudes posibles.
La intención de este estándar es que sea robusto, por lo menos, hasta la mitad del
presente siglo. Aunque los últimos avances teóricos en computación cuántica hacen temer
que en un plazo breve, si se construyesen estos ingenios, los problemas numéricos hoy
considerados irresolubles en un tiempo razonable, como la factorización o los logaritmos
discretos, se podrán resolver mucho más rápido, tirando por tierra la seguridad de los
algoritmos criptográficos con longitudes de claves actuales.
En otras palabras, asumiendo las velocidades previstas, una máquina cuántica
tardaría el mismo tiempo en realizar una búsqueda exhaustiva en un espacio de claves de
256 bits que un ordenador digital actual en un espacio de claves de 128 bits.
Al soportar el estándar claves hasta 256 bits, en un futuro cuando se construyan
estos “ingenios” se podrá dotar de la misma seguridad que hoy día se daría con la clave de
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
7
128 bits, pero utilizando claves de 256 bits, con la gracia de utilizar el mismo algoritmo. En
el caso, de criptografía asimétrica este problema de aumentar la longitud de las claves, se
podría solucionar utilizando “Curvas Elípticas” ya que al necesitar de una clave más
pequeña que otros algoritmos, como por ejemplo RSA, para ofrecer la misma seguridad,
aunque aumentáramos su clave todavía su longitud seríarazonable para una transmisión.
NIST, propuso que cualquier organización, institución o persona pudiera participar
de forma activa en este concurso, ya fuera presentando algoritmos, o enviando informes o
pruebas de cualquier tipo para poner en evidencia las características de cualquier de los
algoritmos candidatos.
Para llevar a cabo la selección se propone crear dos rondas de selección:
· En la primera ronda se deben selecciona los 5 algoritmos mejores, que cumplan
las especificaciones iniciales.
· Y en una segunda ronda se decidirá el algoritmo ó algoritmos ganadores.
Para llevar a cabo estas rondas de selección, se convocan tres Conferencias, en
distintos lugares del mundo, en las que los algoritmos candidatos, puedan ser probados,
comentados y revisados con lupa por todo el mundo que lo desee.
Durante todo el desarrollo del proceso AES, todos los algoritmos y criterios de
diseño están disponibles de forma pública 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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
8
Se aceptaron quince candidatos durante la Primera Conferencia de Candidato que
fueron:
CAST-256 Entust Technologies, Inc. (C. Adams).
CRYPTION Future Systems, Inc. (Chae Hoon Lim).
DEAL L. Knudsen, R. Outerbridge.
DFC CNRS-Ecole Normale Superiere (S. Vaudenay).
E2 NTT Nippon Telegraph and Telephone Corporation (M. Kanda).
FROG TecApro International S.A. (D. Georgoudis, Leroux, Chaves).
HPC R. Schoeppel.
LOKI97 L. Brown, J. Pieprzyk, J.Seberry.
MAGENTA Deutshe Telekom AG (K. Huber).
MARS IBM (Nevenko Zunic).
RC6 RSA Laboratories (Rivest, M. Robshaw, Sidney, Yin).
Rijndael Joan Daemen, Vicent Rijmen.
SAFER+ Cylink Corporation (L. Chen).
SERPENT R. Anderson, E. Biham, L. Knudsen.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
9
TWOFISH B.Schneier, J.Kelsey, D.Whiting, D.Wagner, C. Hall, N. Ferguson.
La segunda conferencia de Candidatos a AES, se celebró para discutir los resultados
de las numerosas pruebas y criptoanálisis realizados por la comunidad criptográfica
mundial sobre los quince candidatos iniciales.
Basándose en estos comentarios y análisis, NIST seleccionó cinco candidatos
finalistas.
Los cinco algoritmos seleccionados para la siguiente ronda serían:
MARS.
RC6.
RIJNDAEL.
SERPENT.
TWOFISH.
Los asistentes presentaron nuevos documentos de evaluación y criptoanálisis de los
últimos cinco candidatos.
Por fin, el 2 de octubre de 2000, el NIST anunció el algoritmo ganador: Rijndael
propuesto por los belgas Vicent Rijmen y Joan Daemen.
Los motivos para seleccionar a “RIJNDAEL”, fue su buena combinación de
seguridad-velocidad-eficiencia, sencillez y flexibilidad.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
10
b) Comparativa de los algorimtos finalistas
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.
La seguridad de los algoritmos, fue el aspecto más importante que se tuvo en cuenta
en la segunda ronda del proceso de selección del NIST, para probar la seguridad de cada
algoritmo se lanzaron varios ataques a cada algoritmo, estos ataques han sido llevados a
cabo, tanto por los autores de algoritmos rivales, como por cualquier otra persona que
enviara la documentación pertinente al NIST.
En cualquiera de los casos, según los ataques publicados, los resultados obtenidos
en cada algoritmo fueron:
MARS: parece tener un margen de seguridad elevado. MARS recibió
críticas basadas en su complejidad, la cual puede haber obstaculizado su análisis de
seguridad durante el proceso de desarrollo del AES.
RC6: parece tener un margen de seguridad adecuado. Sin embargo, RC6
recibió alguna crítica debido a su bajo margen de seguridad respecto al que ofrecieron otros
finalistas. Por otro lado, RC6 ha sido elogiado por su simplicidad, la cual ha facilitado su
análisis de seguridad durante el tiempo especificado en el proceso de desarrollo del AES.
RIJNDAEL: parece tener un margen de seguridad adecuado. El margen
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
11
de seguridad es un poco difícil de medir, debido a que el número de rondas cambia con el
tamaño de la clave. Rijndael recibió críticas sobre su margen de seguridad, ya que es de los
más bajos, entre los finalistas, y que su estructura matemática puede conducir a ataques. Sin
embargo, su estructura es bastante simple, esto ha facilitado su análisis de seguridad
durante el tiempo especificado en el proceso de desarrollo del AES.
SERPENT: parece tener un margen de seguridad alto. Serpent también
tiene una estructura simple, que ha facilitado su análisis de seguridad durante el tiempo
especificado de desarrollo del AES.
TWOFISH: parece tener un margen de seguridad alto. El concepto de
margen de seguridad tiene menos significado para este algoritmo que para los demás
finalistas. La dependencia de las S-cajas de Twofish en solo K/2 bits de entropía en el caso
de clave K-bits ha producido algunas especulaciones acerca de que Twofish puede ser
sensible a un ataque divide y vencerás, aunque tal ataque no ha sido comprobado. Twofish
ha recibido alguna crítica por su complejidad, haciendo difícil su análisis durante el tiempo
establecido en el proceso de desarrollo del AES.
2. Velocidad.
La realización de SW de MARS, RC6 y SERPENT no varían
significativamente para los tres tamaños de clave de AES. Para Rijndael y Twofish, sin
embargo, la configuración de la clave es lógicamente, más lento para claves de 192 bits que
para claves de 128 bits, y más lento todavía para claves de 256 bits, aunque en estos casos
ofrecen una compensación en el incremento de la seguridad.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
12
Comportamiento de la velocidad en varias plataformas.
Hay mucha información 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 Señal Digital (DSP).
A continuación, se muestran los diferentes resultados obtenidos en cada plataforma,
para los 5 algoritmos finalistas, tanto para cifrar como para descifrar:
PROCESO DE CIFRADO
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
13
Figura 1
Velocidad de cifrado para diferentes plataformas.
PROCESO DE DESCIFRADO.
Leyenda 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
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
15
Figura 2
Velocidad de descifrado para diferentes plataformas.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
16
1.2 Objetivos del Proyecto
El proyecto se propuso inicialmente para cumplir y desarrollar con unos objetivos
que se han finalizado en su totalidad. El ánimo que ha gobernado todo el proyecto ha sido
predominantemente formativo y explicativo pues la principal intención ha sido la de
conseguir un software o aplicación que junto con un trabajo de estudio e investigación
pudiera explicar y dotar de ciertos conocimientos escasos en el ámbito de la Criptografía
moderna en clave pública y del propio algoritmo AES.
A continuación, se comentan los objetivos del proyecto y en qué nivel se han visto
satisfechos.
1º Realizar un software sobre Windows que permita realizar el cifrado y
descifrado de bloques de texto aplicando el algoritmo AES. Sin duda este ha sido el trabajo
más complejo, tanto por la búsqueda del algoritmo como su correcta implementación y su
puesta en funcionamiento.
2º Realizar un estudio detallado del algoritmo propuesto, es decir, los
principales elementos de los que está formado, las bases matemáticas 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 actuación, y por consiguiente el algoritmo será más adecuado
para ciertos problemas en función de la naturaleza de los parámetros de entrada, ya que se
abordará con métodos específicos para cada tipo de parámetros.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
17
3º Proponer y realizar casos de prueba que servirán como ejemplos de
utilización de los distintos casos explicativos del algoritmo, es decir, centrar los ejemplos
en las partes básicas 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 explicación para la mejor comprensión
de su funcionamiento.
4º Desarrollar una interfaz gráfica de usuario para la aplicación. Este objetivo
se ha visto modificado durante la realización del proyecto. Para ello se había utilizado el
paquete de criptografía basado en Java llamado Crypto, así como el propio algoritmo AES
también llamado RIJNDAEL, algoritmo de libre distribución, pero por una serie de
problemas y fallos del algoritmo su sustituyó por el lenguaje C++. La interfaz permite
ejecutar el algoritmo de manera fácil y sencilla para el usuario, ya que se puede utilizar
incluso sin tener grandes conocimientos del tema criptográfico. Y además, se ha
conseguido una aplicación de manejo sencillo que se espera que pueda tener un buen uso
didáctico e inteligible.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
18
2. Fundamentos Matemáticos
En este apartado se van a definir las operaciones matemáticas básicas que se van a
utilizar tanto en el cifrado como para descifrado de un código con el algoritmo Rijndael,
así como algunos conceptos referentes al tratamiento de polinomios.
2.1. Campos Finitos GF(28)
En álgebra abstracta, un cuerpo finito, campo finito o campo de Galois (llamado
así por Évariste Galois) es un cuerpo que contiene un número finito de elementos. Los
cuerpos finitos son importantes en teoría de números, geometría algebraica, teoría de
Galois, y Criptografía.
Dado que todo cuerpo de característica 0 contiene a los racionales y es por lo tanto
infinito, todos los campos finitos tienen característica prima, y por lo tanto, su tamaño (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 característica prima sea finito.
Para un primo p, los enteros módulo p forman un cuerpo de p elementos,
denotado por Zp, Z (pues su grupo aditivo es isomorfo al grupo cíclico de p elementos),
Fp, o GFHpL; en algunos casos se usa Z p, aunque esta notación es evitada por teoristas de
los números, pues puede crear confusión con el anillo de los números p - ádicos. Todo
cuerpo con p elementos es isomorfo a éste.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
19
Si q = pn es una potencia de un primo, existe (salvo isomorfismo) exactamente un
campo con q elementos, denotado por Fq o GFHqL. Se puede construir como sigue:
encuéntrese un polinomio irreducible f HX L de grado n con coeficientes en Fp, y defínase
Fq = Fp@X D ê f HTL >, donde Fp@X D denota el anillo de todos los polinomios con
coeficientes en Fp, f HX L > denota el ideal generado por f HX L, y la barra diagonal
indica el anillo cociente (definido de forma similar al grupo cociente). El polinomio f HX L
se puede hallar factorizando X q - X sobre Fp. El campo Fq contiene a (una copia de) Fp
como subcampo.
En este algoritmo todos los bytes se interpretan como elementos de un cuerpo
finito. Concretamente, se representan mediante Campos de Galois que se representan
como GFHkL. (“Galois Field”).
Los campos de Galois son muy interesantes en Criptografía, 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 aritmética real.
En nuestro caso, interesa utilizar una aritmética en módulo p sobre polinomios de
grado m, siendo p un número primo. Este campo de Galois queda representado como:
GFHpmL, en donde los elementos de GFHpmL se representan como polinomios con
coeficientes en Zp de grado menor que m, es decir:
(1)GFHpmL = 8l0 + l1 x + l2 x2 + ... + lm-1 x
m-1; l0, l1, l2, ..., lm-1 œ Zp<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
20
Cada elemento de GFHpmL es un resto módulo pHxL, donde pHxL es un polinomio
irreducible de grado m, esto es, que no puede ser factorizado en polinomios de grado menor
que m.
En el caso del algoritmo Rijndael, serán interesantes los campos del tipo GFH2mL
puesto que los coeficientes en este caso serán los restos del módulo 2, es decir, 0 y 1, lo que
permite una representación binaria. Por lo tanto, cada elemento del campo se representa con
m bits y el número de elementos será 2m.
Por ejemplo, para el campo GFH23L sus elementos son:
0, 1, x, x + 1, x2 + 1, x2 + x, x2 + x + 1,
que son precisamente todos los restos de un polinomio de grado m - 1 = 2.
En el caso del algoritmo Rijndael, se definen operaciones a nivel de byte, en el
campo GFH28L.
Un byte b consiste de los bits b7 b6 b5 b4 b3 b2 b1 b0 ; si se considera como un
polinomio con coeficientes en 80, 1<, se tiene el polinomio:
(2)b7 x7 + b6 x6 + b5 x
5 + b4 x4 + b3 x
3 + b2 x2 + b1 x + b0.
Por ejemplo, un byte con el valor hexadecimal “23”, en binario 00100011,
corresponde con el polinomio: x5 + x + 1.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
21
2.2 Suma en GF(28)
En GF(pm) hay que considerar que las operaciones matemáticas sobre los
coeficientes se hacen en módulo p con lo cual en GF(2m) se reducen los resultados de los
coeficientes de forma que tanto la suma como la resta se realizan utilizando un OR
exclusivo (XOR), esto es así porque coeficientes iguales darán como suma o resta un 0 y
coeficientes diferentes darán un 1.
Por tanto, para sumar dos polinomios, basta con aplicar la función XOR, a cada
elemento de los polinomios, dos a dos. La función XOR de dos bits, produce los siguientes
resultados:
(3)
0∆0 = 0
1∆0 = 1
0∆1 = 1
1∆1 = 0
Por tanto, para sumar dos polinomios, basta con aplicar la función XOR, a cada
elemento de los polinomios, dos a dos. La función XOR de dos bits, produce los siguientes
resultados.
à 1. Véase un ejemplo de suma de dos polinomios de tamaño byte.A = 5716 = 0101 0111B = 8316 = 1000 0011.
Expresados en polinomios dentro de GF(28) serán:
A = 0101 0111 = x6 + x4 + x2 + x + 1
B = 1000 0011 = x7 + x+ 1.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
22
Sumando:
A + B = Hx6 + x4 + x2 + x + 1L + Hx7 + x + 1Lmod 2
A + B = Hx7 + x6 + x4 + x2 + 2 x + 2Lmod 2
A + B = x7 + x6 + x4 + x2mod 2 = 1101 0100 = D416
El mismo resultado se obtiene utilizando XOR:
A + B = H0101 0111L∆ H1000 0011L = 1101 0100 = D416
A + B = 857<∆ 883< = 8D4<
2.3 Multiplicacion en GF(28)
En la multiplicación en GFH2mL, es posible que el resultado contenga elementos que
estén fuera del cuerpo del polinomio (potencias iguales o mayores que m) por lo que se
deben reducir los exponentes mediante un polinomio pHxL necesariamente irreducible y
grado m.
Para GFH28L (el que utiliza el algoritmo Rijndael), el grado del polinomio
irreducible será 8 (m = 8). Este polinomio irreducible (es irreducible porque sus únicos
divisores son el uno y el mismo polinomio) se representa por mHxL.
Para el algoritmo Rijndael, el polinomio irreductible es:
(4)mHxL = x8 + x4 + x3 + x + 1.
Se va a ver un ejemplo de multiplicación de polinomios:
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
23
à 2. Multiplicación de los polinomios que representan los númerosA = 5716 = 0101 0111B = 8316 = 1000 0011.
Expresados en polinomios dentro de GF(28) serán:
A = 0101 0111 = x6 + x4 + x2 + x + 1
B = 1000 0011 = x7 + x+ 1.
Sea mHxL = x8 + x4 + x3 + x + 1 ï x8 = x4 + x3 + x + 1.
A *B = Hx6 + x4 + x2 + x + 1L * Hx7 + x + 1L mod 2
A *B = Hx13 + x11 + x9 + x8 + 2 x7 + x6 + x5 + x4 + x3 + 2 x2 + 2 x + 1L mod 2
A *B = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1.
Este resultado hay que reducirlo por mHxL = x8 + x4 + x3 + x + 1 (Obsérvese cómo
x13, x11, x9, x8 están fuera del cuerpo de 8 bits). Operando se tiene,
A *B = x13 + x11 + x9 + x8 + x6 + x5 + x4 + x3 + 1
x13 = x5 * x8 = x5 * Hx4 + x3 + x + 1L = x9 + x8 + x6 + x5
x13 = x * Hx4 + x3 + x + 1L + Hx4 + x3 + x + 1L + x6 + x5
x13 = Hx5 + x4 + x2 + xL + Hx4 + x3 + x + 1L + x6 + x5
x13 mod 2 = x6 + x3 + x2 + 1
x11 = x3 * x8 = x3 * Hx4 + x3 + x + 1L
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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
Reemplazando los cálculos anteriores en la expresión:
A *B = Hx6 + x3 + x2 + 1L + Hx7 + x6 + x4 + x3L +
Hx5 + x4 + x2 + xL + Hx4 + x3 + x+ 1L + x6 + x5 + x4 + x3 + 1mod 2
A *B = x7 + x6 + 1 = 1100 0001 = C116
O lo que es lo mismo:
857< ÿ 883< = 8C1<.
2.4 Multiplicacion de polinomios de 4 bytes en
GF(28)
Dados dos polinomios de cuatro términos aHxL y bHxL, el resultante de la
multiplicación de ambos polinomios será cHxL, lo que se expresa de la siguiente forma:
(5)
aHxL = a3 x3 + a2 x
2 + a1 x + a0
bHxL = b3 x3 + b2 x
2 + b1 x + b0
cHxL = aHxL.bHxL = c6 x6 + c5 x5 + c4 x
4 + c3 x3 + c2 x
2 + c1 x + c0.
donde:
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
25
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.b3c5 = a3.b2∆a2.b3c6 = a3.b3
El resultado cHxL no representa una palabra de 4 bytes, asi que hay que reducir cHxL a
un polinomio de módulo menor que 4. Para el algoritmo Rijndael, se utilizará el polinomio
reductor x4 + 1.
La notacion para la multiplicación de polinomios es ƒ
Si se reduce a grado menor que 4, se define el polinomio dHxL:
(7)dHxL = aHxL≈bHxL = d3 x3 + d2 x
2 + d1 x + d0
donde:
(8)
d0 = a0.b0∆a3.b1∆a2.b2∆a1.b3d1 = a1.b0∆a0.b1∆a3.b2∆a2.b3d2 = a2.b0∆a1.b1∆a0.b2∆a3.b3d4 = a3.b0∆a2.b1∆a1.b2∆a0.b3.
Tambien puede expresarse en una matriz de estados de la siguiente manera:
(9)
i
k
jjjjjjjjjjjj
d0
d1
d2
d3
y
{
zzzzzzzzzzzz
=
i
k
jjjjjjjjjjjj
a0 a3 a2 a1
a1 a0 a3 a2
a2 a1 a0 a3
a3 a2 a1 a0
y
{
zzzzzzzzzzzz
.
i
k
jjjjjjjjjjjj
b0
b1
b2
b3
y
{
zzzzzzzzzzzz
.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
26
3. Especificación del Algoritmo
Se definen los principales requisitos del algoritmo criptográfico AES.
a) Ser público.
b) Ser un algoritmo de cifrado en bloque simétrico, es decir, el algoritmo utiliza un
método criptográfico 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
usándola, lo envía al destinatario, y éste lo descifra con la misma clave.
c) Estar diseñado de manera que se pueda aumentar la longitud de clave según las
necesidades, de manera que las claves podrán variar siempre y cuando el tamaño sea
múltiplo de 4 bytes. Las longitudes de clave utilizadas por defecto serán 128 bits, 192 bits y
256 bits.
d) A su vez está diseñado para que el tamaño de los bloques de datos también sea
variable dentro del mismo rango y con las mismas restricciones, es decir, bloques de datos
cuyo tamaño sea múltiplo de 4 bytes.
e) Su diseño también especifica que el algoritmo opere a nivel de byte, de manera que
estos sean interpretados como elementos de un cuerpo de Galois GFH28L.
f) Ser implementable tanto en hardware como en software.
g) Estar disponible gratuitamente, o bien disponible bajo términos consistentes con la
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
27
política de patentes del Instituto Nacional Americano de Estándares (American National
Standards Institute, ANSI).
En el siguiente gráfico se puede ver una idea básica del funcionamiento de
cualquier algoritmo criptográfico, en nuestro caso el algoritmo AES, simplemente como
ayuda para posteriores explicaciones más concretas.
Figura 3
Algoritmo criptográfico de cave simétrica.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
28
3.1 Estructura del Algoritmo
La estructura del algoritmo Rijndael está formado por un conjunto de rondas,
entendiendo por rondas un conjunto de iteraciones de cuatro funciones matemáticas
diferentes e invertibles.
Por tanto, el algoritmo se basa en aplicar un número de rondas determinado a una
información en claro para producir una información cifrada. La información generada por
cada función es un resultado intermedio, que se conoce como Estado, o si se prefiere
Estado Intermedio.
El algoritmo representa el Estado como un matriz rectangular de bytes, que posee
cuatro filas y Nb columnas. Siendo el número de columnas Nb en función del tamaño del
bloque:
(10)Nb = tamaño del bloque utilizado en bits ê32.
De esta manera, si se tiene un bloque con 128 bits se tendría una matriz de cuatro
filas y Nb = 128 ê32 = 4 columnas quedando una matriz de forma:
(11)
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
a30 a31 a32 a33
La clave del sistema se representa con una estructura análoga a la del Estado, es
decir, se representa mediante una matriz rectangular de bytes de cuatro filas y Nk columnas.
Siendo el número de columnas Nk en función del tamaño de la clave:
(12)Nk = tamaño de la clave en bits ê32.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
29
De esta manera, al igual que ocurría con el tamaño del bloque, si se tiene una clave
con 128 bits se dispondría de una matriz de cuatro filas y Nr = 128 ê32 = 4 columnas,
quedando una matriz de forma:
(13)
k00 k01 k02 k03
k10 k11 k12 k13
k20 k21 k22 k23
k30 k31 k32 k33
El número de iteraciones o vueltas de las cuatro transformaciones sobre la
información, o mejor dicho sobre la matriz de Estado Intermedio depende de la versión del
algoritmo que se utilice. Los autores definen que para tamaños de bloques y claves entre
128 y 256 bits (con incrementos de 32 bits) el número de vueltas Nr es determinado por la
siguiente expresión:
(14)Nr = máxHNk, NbL + 6.
De manera simplemente informativa se verá cómo quedarían las rondas para cada
uno de los posibles resultados, siendo la primera columna el tamaño de la clave y la
primera fila el tamaño del bloque:
Tabla 1
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
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
30
3.2 Descripción del proceso de cifrado
Después de ver la visión general del algoritmo, se va a profundizar en cómo se
utiliza para cifrar información. Gráficamente el proceso de cifrado se puede ver de la
siguiente manera:
Figura 4
Cifrado del algoritmoAES.
Se puede ver en el gráfico que el proceso de cifrado consiste en la aplicación de
cuatro funciones matemáticas invertibles sobre la información que se desea cifrar. Las
transformaciones se realizan de forma reiterativa para cada ronda o vuelta definida.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
31
Las funciones matemáticas realizadas son:
a) Función AddRoundKey.
Es la primera transformación que se ejecuta, es una suma XOR entre el texto plano
y la clave.
b) Función ByteSub.
La transformación ByteSub, es una sustitución no lineal, que opera
independientemente en cada byte de la matriz. Cada byte del bloque de entrada es invertido
sobre GFH28L y luego sufre una transformación afín. La operación completa puede
realizarse mediante una matriz de sustitución, conocida con el nombre de S-Box. La
transformación 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
número se transforma en el subíndice necesario para extraer un valor de la matriz S-box .
c) Función ShiftRow.
A continuación de ByteSub, se aplica la transformación ShiftRow. En la misma, los
bytes de las tres últimas filas son desplazados cíclicamente en distintas cantidades o
posiciones (offsets). En la primera fila el offset es nulo, es decir, que la fila no se desplaza.
En la segunda fila, el desplazamiento es de un byte hacia la izquierda, en la tercera es de
dos bytes y en la última es de tres bytes, también hacia la izquierda.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
32
d) Función MixColumn.
Se trata de la transformación siguiente a ShiftRow. MixColumns opera columna por
columna de la matriz, tomando a cada una como un polinomio de grado tres. Es decir, que
las columnas son consideradas como polinomios en el campo y cada una es multiplicada
por una fila de la siguiente matriz Ref(x).
En esencia, la información a cifrar se va transformando en la matriz de Estado.
Esta matriz de Estado se introduce al cifrador, y sufre una primera transformación, en la
ronda inicial, que consiste en una operación or-exclusiva (AddRoundKey) entre una
Subclave generada y la matriz de Estado. A continuación, a la matriz de Estado resultante
se le aplican cuatro transformaciones invertibles, repitiéndose este proceso Nr - 1 veces, en
lo que se conoce como Ronda Estándar. Finalmente, se le aplica una última ronda o vuelta
a la matriz de Estado resultante de las Nr - 1 rondas anteriores, aplicando las funciones
ByteSub, ShiftRow y AddRoundKey en este orden. El resultado de la ronda final produce el
bloque cifrado deseado.
En la figura se puede observar la evolución del cifrador, y cómo entra en juego la
clave del usuario generando subclaves que se utilizan para cada ronda.
Posteriormente, se va a profundizar en cada una de las funciones que configuran el
algoritmo cifrador Rijndael para comprender mejor su funcionamiento.
El codigo utilizado para el procedimiento de cifrado es el indicado a continuación.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
33
ê ∗Procedimiento para cifrar ∗ ê
int rijndaelEncrypt
Hunsigned char a @4D@4D, unsigned char rk @10 + 1D@4D@4DL
8
ê ∗ Encryption of one block ∗ ê
int r, BC, ROUNDS, i, j, k;
int B @8D, X @8D, Y @8D, XE;
BC = 4;
ROUNDS= 10;
KeyAddition Ha, rk @0D, BCL;
for Hr = 1; r < ROUNDS; r++L
8
Substitution Ha, S, BC L;
ShiftRow Ha, 0, BC L;
MixColumn Ha, BCL;
KeyAddition Ha, rk @r D, BCL;
gotoxy H6, 5 L;
printf H"CT@" L; printf H"%d", r L; printf H" D = " L;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < 4; j ++L
printf H"%02X ", a @j D@i DL;
getchar HL;
<
Substitution Ha, S, BC L;
ShiftRow Ha, 0, BC L;
KeyAddition Ha, rk @ROUNDSD, BCL;
printf H"\n\n\n" L;
printf H"Cipher Text CT = " L;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < 4; j ++L
printf H"%02X ", a @j D@i DL;
gotoxy H60, 24 L;
printf H"Press Enter...." L;
getchar HL;
clrscr HL;
return 0;
<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
34
3.3 Funciones utilizadas para el cifrado
En esta sección se da la descripción detallada del algoritmo AES.
Primero, recordar que AES trabaja con bloques de datos de 128 bits y longitudes de
claves de 128, 192, 256 bit. Además AES tiene 10, 12 ó 14 vueltas respectivamente. Cada
vuelta de AES consiste en la aplicación de una ronda estándar, que consiste en cuatro
transformaciones básicas. La última ronda es especial y consiste de tres operaciones
básicas, añadiendo siempre una ronda inicial. Por otro lado, se tiene el programa de claves
o extensión 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 más, y si es
de 256 se agregan cuatro columnas más.
De esta manera el bloque de datos, suponiendo que se dispone de un bloque de 128
bits, es de la manera siguiente:
(15)a00 a10 a20 a30 a01 a11 a21 a31 a02 a12 a22 a32 a03 a13 a23 a33.
Los cuatro primeros bytes conforman la primera columna. Así con los siguientes
grupos de cuatro bytes se irán completando las diferentes columnas de manera que se queda
una matriz de la siguiente manera.
(16)
i
k
jjjjjjjjjjjj
a00 a01 a02 a03
a10 a11 a12 a13
a20 a21 a22 a23
a30 a31 a32 a33
y
{
zzzzzzzzzzzz
.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
35
De esta misma manera se obtendrán 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:
(17)k00 k10 k20 k30 k01 k11 k21 k31 k02 k12 k22 k32 k03 k13 k23 k33.
Los cuatro primeros bytes conforman la primera columna y los siguientes grupos de
cuatro bytes irán completando las diferentes columnas de manera que se queda una matriz
de la siguiente manera.
(18)
i
k
jjjjjjjjjjjj
k00 k01 k02 k03
k10 k11 k12 k13
k20 k21 k22 k23
k30 k31 k32 k33
y
{
zzzzzzzzzzzz
.
A partir de esta matriz combinada, con las funciones que se pasa a explicar en los
siguientes apartados, se obtendrá una descripción detallada del algoritmo. Las funciones
que se explicarán tienen un propósito fijo y preciso:
è AddRoundKey o etapa de adición de clave.
è SubByte o sustituciones de bytes.
è ShiftRows o estapa de desplazamiento de filas.
è MixColumns o etapas de mezcla de columnas.
è KeySchedule o expansión de clave.
Para el mejor entendimiento de estas etapas se muestra un ejemplo en el apartado
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
36
3.3.6 Ejemplo especificativo, además de la explicación de cada una de ellas en cada
apartado específico.
3.3.1 Función AddRoundKey
En esta función, etapa o tratamiento se procede a realizar un XOR byte a byte entre
la matriz de estado o matriz intermedia y la matriz de la clave o subclave, dependiendo de
la ronda en la que se encuentre.
Figura 5
Matriz de estado XORMatriz Clave
De esta manera toma la matriz @ai jD y @ki jD y aplicando el XOR da como resultado
la matriz @ai j ∆ ki jD.
Una vez acaba la función MixColumns, se vuelve a a proceder con esta función de
AddRoundKey, creándose 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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
37
En este caso la matriz utilizada para realizar el XOR es la matriz de subclave, que
se explicará en el siguiente subapartado.
El código utilizado para esta función es el siguiente:
ê ∗Función que efectúa la transformación AddRoundKey ∗ ê
void KeyAddition
Hunsigned char a @4D@4D, unsigned char rk @4D@4D, unsigned char BC L
8
int i, j;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < BC; j ++L
a@i D@j D ^= rk @i D@j D;
<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
38
3.3.1.1 Cálculo de las subclaves
Basándose en el principio de la criptografía moderna, mediante el cual se establece
que la seguridad de un algoritmo sólo debe depender de la clave utilizada, se utilizan
diferentes subclaves Ki tanto en el cifrado como en el descifrado para que el resultado del
algoritmo dependa de una información externa al sistema: la clave del usuario.
Estas subclaves (RoundKeys) se derivan de la clave principal K mediante el uso de
dos funciones: una de expansión y otra de selección.
Siendo n el número de rondas que aplique el algoritmo, el número total de bits para
subclaves que se necesitan para todas las rondas es igual a el tamaño del bloque utilizado
multiplicado por n + 1. También se puede ver como 4 Hn + 1L *Nb bytes. Es decir, por
ejemplo, para un tamaño de bloque de 128 bits y 10 vueltas, se necesitan 1408 bits de
subclaves: H128 *11 = 1408 bitsL.
Por tanto, lógicamente, el número de claves que se generan depende del número de
rondas empleadas HNrL.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
39
3.3.2 Función ByteSub
En esta función, etapa o tratamiento se procede a realizar una sustitución no lineal
que se aplica a cada byte de la matriz de estado de forma independiente, generando un
nuevo byte, es decir, a cada elemento de la matriz de estado se le sustituye por otro byte
que depende del primero mencionado. Esta sustitución se lleva a cabo utilizando unas
tablas o matrices S-Box invertibles.
Esta sustitución tiene dos apartados o transformaciones:
1. Cada byte es considerado como un elemento del GFH28L que genera el polinomio
irreducible mHxL = x8 + x4 + x3 + x + 1 y sustituido por su inversa multiplicativa. El valor
cero en este caso no varía pues no tiene recíproco.
0 1 2 3 4 5 6 7 8 9 A B C D E F0 00 01 8 D F6 CB 52 7 B D1 E8 4 F 29 C0 B0 E1 E5 C7
1 74 B4 AA 4 B 99 2 B 60 5 F 58 3 F FD CC FF 40 EE B2
2 3 A 6 E 5 A F1 55 4 D A8 C9 C1 0 A 98 15 30 44 A2 C2
3 2 C 45 92 6 C F3 39 66 42 F2 35 20 6 F 77 BB 59 19
4 1 D FE 37 67 2 D 31 F5 69 A7 64 AB 13 54 25 E9 09
5 ED 5 C 05 CA 4 C 24 87 BF 18 3 E 22 F0 51 EC 61 17
6 16 5 E AF D3 49 A6 36 43 F4 47 91 DF 33 93 21 3 B
7 79 B7 97 85 10 B5 BA 3 C B6 70 D0 06 A1 FA 81 82
8 83 7 E 7 F 80 96 73 BE 56 9 B 9 E 95 D9 F7 02 B9 A4
9 DE 6 A 32 6 D D8 8 A 84 72 2 A 14 9 F 88 F9 DC 89 9 A
A FB 7 C 2 E C3 8 F B8 65 48 26 C8 12 4 A CE E7 D2 62
B 0 C E0 1 F EF 11 75 78 71 A5 8 E 76 3 D BD BC 86 57
C 0 B 28 2 F A3 DA D4 E4 0 F A9 27 53 04 1 B FC AC E6
D 7 A 07 AE 63 C5 DB E2 EA 94 8 B C4 D5 9 D F8 90 6 B
E B1 0 D D6 EB C6 0 E CF AD 08 4 E D7 E3 5 D 50 1 E B3
F 5 B 23 38 34 68 46 03 8 C DD 9 C 7 D A0 CD 1 A 41 1 C
Figura 6
Tabla de inversosmultiplicativos en hexadecimal.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
40
2. Después se aplica la siguiente transformación afín en GFH28L, siendo x0, x1, ..., x7
los bits del byte correspondiente, y a su vez y0, y1, ..., y7 los bits del byte correspondiente al
resultado.
(19)
i
k
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
y0
y1
y2
y3
y4
y5
y6
y7
y
{
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
=
i
k
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
1 0 0 0 1 1 1 1
1 1 0 0 0 1 1 11 1 1 0 0 0 1 11 1 1 1 0 0 0 11 1 1 1 1 0 0 0
0 1 1 1 1 1 0 00 0 1 1 1 1 1 00 0 0 1 1 1 1 1
y
{
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
.
i
k
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
x0
x1
x2
x3
x4
x5
x6
x7
y
{
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
+
i
k
jjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjj
1
1000
110
y
{
zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz
.
El resultado final de estas dos transformaciones se puede expresar en una tabla de
sustitución denominada S-Box aplicada a cada byte, sabiendo que este está expresado en
forma hexadecimal, de manera que el elemento más a la izquierda deberá situarse en la
columna amarilla y el elemento más a la derecha deberá colocarse en la fila azul, siendo el
resultado final el lugar donde coincidan o se unan.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
41
0 1 2 3 4 5 6 7 8 9 A B C D E F0 63 7 C 77 7 B F2 6 B 6 F C5 30 01 67 2 B FE D7 AB 76
1 CA 82 C9 7 D FA 59 47 F0 AD D4 A2 AF 9 C A4 72 C0
2 B7 FD 93 26 36 3 F F7 CC 34 A5 E5 F1 71 D8 31 15
3 04 C7 23 C3 18 96 05 9 A 07 12 80 E2 EB 27 B2 75
4 09 83 2 C 1 A 1 B 6 E 5 A A0 52 3 B D6 B3 29 E3 2 F 84
5 53 D1 00 ED 20 FC B1 5 B 6 A CB BE 39 4 A 4 C 58 CF
6 D0 EF AA FB 43 4 D 33 85 45 F9 02 7 F 50 3 C 9 F A8
7 51 A3 40 8 F 92 9 D 38 F5 BC B6 DA 21 10 FF F3 D2
8 CD 0 C 13 EC 5 F 97 44 17 C4 A7 7 E 3 D 64 5 D 19 73
9 60 81 4 F DC 22 2 A 90 88 46 EE B8 14 DE 5 E 0 B DB
A E0 32 3 A 0 A 49 06 24 5 C C2 D3 AC 62 91 95 E4 79
B E7 C8 37 6 D 8 D D5 4 E A9 6 C 56 F4 EA 65 7 A AE 08
C BA 78 25 2 E 1 C A6 B4 C6 E8 DD 74 1 F 4 B BD 8 B 8 A
D 70 3 E B5 66 48 03 F6 0 E 61 35 57 B9 86 C1 1 D 9 E
E E1 F8 98 11 69 D9 8 E 94 9 B 1 E 87 E9 CE 55 28 DF
F 8 C A1 89 0 D BF E6 42 68 41 99 2 D 0 F B0 54 BB 16
Figura 7
Tabla de sustitución S - Box.
El código utilizado para esta función es el indicado, a continuación.
ê ∗Función que efectúa la transformación SubBytes ∗ ê
void Substitution
Hunsigned char a @4D@4D, unsigned char box @256D, unsigned char BC L
8
int i, j;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < BC; j ++L
a@i D@j D = box @a@i D@j DD;
<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
42
3.3.3 Función ShiftRow
En esta función, etapa o tratamiento se procede a realizar un desplazamiento a la
izquierda cíclicamente de 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 transformación anterior a la
izquierda.
Cada fila se desplaza un número de posiciones diferentes, este número de vueltas o
rotaciones dependerá del tamaño del bloque Nb, explicado en la estructura del algoritmo.
De forma gráfica, en un bloque de 128, quedaría de la siguiente manera:
Figura 8
Matrices de Estado S y S£.
La primera fila que en este caso es la fila0 queda igual.
La segunda fila desplaza un byte, como se muestra en las figuras siguientes.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
43
Figura 9
La tercera columna desplaza dos bytes circularmente.
Figura 10
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
44
Finalmente la cuarta fila desplaza 3 bytes circularmente.
Figura 11
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
45
El código utilizado para esta funcion se escribe así:
ê ∗Función que efectúa la transformación ShiftRows ∗ ê void ShiftRow
Hunsigned char a @4D@4D, unsigned char d, unsigned char BC L
8unsigned char tmp @4D;
int i, j;
for Hi = 1; i < 4; i ++L
8for Hj = 0; j < BC; j ++L
tmp@j D = a@i D@Hj + shifts @HHBC− 4L >> 1LD@i D@dDL % BCD;
for Hj = 0; j < BC; j ++L
a@i D@j D = tmp@j D;
<
<
3.3.4 Función MixColumns
En esta función, etapa o tratamiento se procede sobre los bytes de una misma
columna de la matriz de estado resultante de la tranformacion anterior.
Las columnas son tratadas como polinomios, cuyos coeficientes pertenecen a
GFH28L.
La transformación consiste en multiplicar las columnas en módulo x4 + 1 por el
polinomio cHxL = 03 x3 + 01 x2 + 01 x + 02 . De forma matemática se expresa:
(20)S£HxL = cHxL≈ SHxL.
donde S ' HxL representa la matriz de estado resultante de esta etapa, SHxL representa la matriz
de estados de entrada.
Esta fórmula para comprenderla más fácilmente se puede expresar en forma
matricial de la siguiente manera.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
46
(21)
i
k
jjjjjjjjjjjjjj
S '0,CS '1,CS '2,CS '3,C
y
{
zzzzzzzzzzzzzz
=
i
k
jjjjjjjjjjjj
02 03 01 0101 02 03 0101 01 02 0303 01 01 02
y
{
zzzzzzzzzzzz
.
i
k
jjjjjjjjjjjjjj
S0,C
S1,C
S2,C
S3,C
y
{
zzzzzzzzzzzzzz
.
De forma gráfica, en un bloque de 128, quedaría de la siguiente manera:
Figura 12
El código utilizado en esta funcion es el que se muestra a continuación.
ê ∗Función que efectúa la transformación MixColumns ∗ ê
void MixColumn Hunsigned char a @4D@4D, unsigned char BC L
8
unsigned char b @4D@4D;
int i, j;
for Hj = 0; j < BC; j ++L
for Hi = 0; i < 4; i ++L
b@i D@j D = mul H2, a @i D@j DL^mul
H3, a @Hi + 1L % 4D@j DL^a@Hi + 2L % 4D@j D^a@Hi + 3L % 4D@j D;
for Hi = 0; i < 4; i ++L
for Hj = 0; j < BC; j ++L
a@i D@j D = b@i D@j D;
<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
47
3.3.5 Función KeySchedule
Aunque Rijndael está diseñado para manejar muchos casos de longitudes de claves
y de bloques, finalmente el algorirmo AES definido en el estándar determina que solo se
permiten los casos de bloques de 128 bits, y longitudes de claves de 128, 192 y 256.
Por otra parte la longitud de 128 bits, garantiza la seguridad del sistema hasta
después del año 2030, por lo que en este proyecto se considera sólo el caso de claves de
128 bits, aunque los algoritmos pueden ser extendidos fácilmente a los casos restantes.
La clave se expande a una matriz de 4 filas y NbHNr + 1L columnas:
El código utilizado para la extensión de clave se muestra a continuación.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
48
KeyExpansion Hbyte key @4 ∗NkD word @Nb∗HNr + 1LDL
8
For Hi = 0; i < Nk; i ++L
8
w@i D = Hkey @4 ∗ i D, key @4 ∗ i + 1D, key @4 ∗ i + 2D, key @4 ∗ i + 3DL;
<
For Hi = Nk; i < Nb; i ++L
8
temp = w@i ∼1D;
if Hi % Nk == 0L
temp = SubByte HRotByte HtempLL^Rcon @i êNkD;
w@i D = w@i ∼NkD^ temp;
<
...
<
En nuestro caso Nb = Nk = 4,y Nr = 10.
El primer For que nos encontramos lo que quiere decir es que las primeras 4
columnas de la extensión son la clave original.
à 3. Se toma como ejemplo un vector de prueba para el caso 128 bits.
Clave: 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 c7 4f 3c
Partiendo de la clave dada, se obtienen los valores para w0, w1,
w2 y w3, quedando de la siguientemanera :
w0=2b7e1516, w1=28aed2a6, w2=abf71588, w3=09c74f3c
Si se observa el código y si se ejecuta, se tendría como resultado del primer For:
For Hi = 0; i < Nk; i ++L
8
w@i D = Hkey @4 ∗ i D, key @4 ∗ i + 1D, key @4 ∗ i + 2D, key @4 ∗ i + 3DL;
<
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
49
W0 W1 W2 W3
2 b 28 ab 097 e ae f7 cf15 d2 15 4 f16 a6 88 3 c
Continuando con la ejecución del código, para nuestro caso, se tendrían bloques de
4 filas y 4 columnas, y por lo tanto 10 rondas. De esta manera se puede observar, también
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@i D = w@i ∼NkD^ temp;
<
En la primera ronda se pasará a calcular W @4D, como ya se citó con anterioridad. Al
al ser múltiplo de 4 se sigue un procedimiento especial aplicando una serie de operaciones:
1.- RotByte, es una rotación circular de el byte más arriba de la columna temporal:
en este caso es la columna formada por W @3D.
09cf4 f3 c
�
cf4 f3 c09
2.- SubByte, es la substitución de byte, de acuerdo con la tabla ya conocida S-Box.
cf4 f3 c09
⇒ S − Box ⇒
8 a84eb01
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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 êNkD, en este caso resulta:
temp ⊕ RCon@i ê NkD
cf4 f3 c09
xor
01000000
=
8 b84eb01
4.- Por último se tiene otro XOR de la columna temporal con W @i - 4D, en este caso
W @0D.
temp ⊕ w@i − 4D
8 b84eb01
xor
2 b7 e1516
=
a0fafe17
De esta manera, después de esta ronda la clave quedaría de la manera siguiente:
W0 W1 W2 W3 W4
2 b 28 ab 09 a07 e ae f7 cf fa15 d2 15 4 f fe16 a6 88 3 c 17
Las sigientes rondas hasta llegar a calcular W @8D, no siguen el procedimiento
especial explicado hasta ahora y simplemente realizará la última operación en la que se
realizará un XOR del temp, que como se sabe es la columna anterior W @i - 1D, y W @i - 4D.
De esta forma se obtiene W @5D, W @6D, W @7D.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
51
W @5D = W @4D XORW @1D
W @6D = W @5D XORW @2D
W @7D = W @6D XORW @3D
Tras estas 3 rondas la clave tendrá la forma:
W0 W1 W2 W3 W4 W5 W6 W7
2 b 28 ab 09 a0 88 23 2 a7 e ae f7 cf fa 54 a3 6 c15 d2 15 4 f fe 2 c 39 7616 a6 88 3 c 17 b1 39 05
En la ronda en la que se pasará a calcular W @8D ocurrirá como en W @4D, como ya se
citó con anterioridad al ser múltiplo de 4 se sigue un procedimiento especial.
Todas estas operaciones hasta rellenar las 44 columnas de las que está compuesta la
clave en este caso.
3.3.6 Ejemplo Explicativo del Algoritmo de cifrado
Para una mejor comprensin se va a pasar a exponer un ejemplo explicativo en el que
se vea cómo actúa cada una de estas funciones sobre una clave y un bloque de datos,
teniendo en cuenta que la ejecucion de las funciones es la siguiente:
AddRoundKeyØByteSubØShiftRowsØMixColumnsØAddRoundKey.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
52
à Ejemplo. Se aplica el algoritmo criptográfico AES con los siguientes datos:
Bloque de datos: 32 43 f6 a8 88 5a 30 8d 31 31 98 a2 e0 37 07 34Clave: 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 c7 4f 3c.
Se aplica la función AddKey.
i
k
jjjjjjjjjjjj
32 88 31 e043 5 a 31 37f6 30 98 07a8 8 d a2 34
y
{
zzzzzzzzzzzz
∆
i
k
jjjjjjjjjjjj
2 b 28 ab 097 e ae f7 c715 d2 15 4 f16 a6 88 3 c
y
{
zzzzzzzzzzzz=
i
k
jjjjjjjjjjjj
19 a0 9 a e93 d f4 c6 f8e3 e2 8 d 48be 2 b 2 a 08
y
{
zzzzzzzzzzzz
.
è bloque de entrada≈Clave = Estado Intermedio 1
Para cada elemento del bloque de entrada se realiza una operacion XOR con suequivalente en posicion del bloque de la clave.
Se aplica la función ByteSub.
i
k
jjjjjjjjjjjj
19 a0 9 a e93 d f4 c6 f8e3 e2 8 d 48
be 2 b 2 a 08
y
{
zzzzzzzzzzzz
⇒ S − box ⇒
i
k
jjjjjjjjjjjj
d4 e0 b8 1 e27 bf b4 4111 98 5 d 52
ae f1 e5 30
y
{
zzzzzzzzzzzz
.
è Estado Intermedio 1 fiS-boxfi Estado Intermedio 2
Para cada elememto se realizan dos operaiones, realmente equivalente a buscar enla tabla denominada S-BOX los dos digitos que forman cada elemento y se obtiene elbyte a sustituir.
Función ShiftRows.
i
k
jjjjjjjjjjjj
d4 e0 b8 1 e27 bf b4 41
11 98 5 d 52ae f1 e5 30
y
{
zzzzzzzzzzzz
ï
i
k
jjjjjjjjjjjj
d4 e0 b8 1 ebf b4 41 27
5 d 52 11 9830 ae f1 e5
y
{
zzzzzzzzzzzz
.
è Estado Intermedio 2 î Estado Intermedio 3
Dependiendo del numero de fila en el que se encuentre se realiza uno dos o ndesplazamientos (corriendo los elementos hacia la izquierda).
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
53
Aplicación de la función MixColumns.
i
k
jjjjjjjjjjjj
d4 e0 b8 1 e
bf b4 41 275 d 52 11 9830 ae f1 e5
y
{
zzzzzzzzzzzz
ï
i
k
jjjjjjjjjjjj
04 e0 48 28
66 cb f8 0681 19 d3 26e5 9 a 7 a 4 c
y
{
zzzzzzzzzzzz
.
è Estado Intermedio 3 î Estado Intermedio 4
Se realiza una operacion S£HxL =cHxL≈ SHxL dondecHxL = 03 x3 + 01 x2 + 01 x + 02, S y S' seran la matriz resultado y la matriz de entradarespectivamente.
3.4 Descripción del proceso de descifrado
El proceso de descifrado es muy similar al cifrado, sólo hay que hacer el proceso
inverso, es decir, invertir el orden de todas las operaciones realizadas, y hacer las
transformaciones inversas.
Durante el proceso de cifrado, se ha comentado como se realizaría el proceso
inverso de cada transformación, así que en este apartado únicamente se realizará una
descripción esquemática del algoritmo de descifrado.
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 gráfica:
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
54
Figura 13
Proceso de descifrado en AES.
El código utilizado para el procedimiento de descifrado es el que a continuación se
muestra.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
55
ê ∗ Procedimiento para descifrar ∗ ê
int rijndaelDecrypt
Hunsigned char a @4D@4D, unsigned char rk @10 + 1D@4D@4DL8
int r, BC, ROUNDS;
BC = 4;
ROUNDS= 10;
KeyAddition Ha, rk @ROUNDSD, BCL;
Substitution Ha, Si, BC L;
ShiftRow Ha, 1, BC L;
ê∗ ROUNDS− 1 ordinary rounds ∗ ê
for Hr = ROUNDS− 1; r > 0; r −−L
8
KeyAddition Ha, rk @r D, BCL;
InvMixColumn Ha, BCL;
Substitution Ha, Si, BC L;
ShiftRow Ha, 1, BC L;
<
KeyAddition Ha, rk @0D, BCL;
return 0;
<
3.4.1 Función utilizada para el descifrado
Como se ha mencionado en los apartados anteriores las funciones matemáticas
utilizadas eran invertibles, de esta forma a la hora de descifrar serán las inversas las
funciones utilizadas.
La función AddRoundKey desempeña la misma función salvo que en vez de
empezar en la primera ronda empezará por la última y acabará por la primera.
La función Inv-ByteSub realizará la aplicacion inversa de la correspondiente S-box
correspondiente a cada byte de la matriz de estado. De esta manera se obtiene otra tabla con
los valores inversos a los valores de la tabla S-box
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
56
0 1 2 3 4 5 6 7 8 9 A B C D E F0 52 09 6 A D5 30 36 A5 38 BF 40 A3 9 E 81 F3 D7 FB
1 7 C E3 39 82 9 B 2 F FF 87 34 8 E 43 44 C4 DE E9 CB
2 54 7 B 94 32 A6 C2 23 3 D EE 4 C 95 0 B 42 FA C3 4 E
3 08 2 E A1 66 28 D9 24 B2 76 5 B A2 49 6 D 8 B D1 25
4 72 F8 F6 64 86 68 98 16 D4 A4 5 C CC 5 D 65 B6 92
5 6 C 70 48 50 FD ED B9 DA 5 E 15 46 57 A7 8 D 9 D 84
6 90 D8 AB 00 8 C BC D3 0 A F7 E4 58 05 B8 B3 45 06
7 D0 2 C 1 E 8 F CA 3 F 0 F 02 C1 AF BD 03 01 13 8 A 6 B
8 3 A 91 11 41 4 F 67 DC EA 97 F2 CF CE F0 B4 E6 73
9 96 AC 74 22 E7 AD 35 85 E2 F9 37 E8 1 C 75 DF 6 E
A 47 F1 1 A 71 1 D 29 C5 89 6 F B7 62 0 E AA 18 BE 1 B
B FC 56 3 E 4 B C6 D2 79 20 9 A DB C0 FE 78 CD 5 A F4
C 1 F DD A8 33 88 07 C7 31 B1 12 10 59 27 80 EC 5 F
D 60 51 7 F A9 19 B5 4 A 0 D 2 D E5 7 A 9 F 93 C9 9 C EF
E A0 E0 3 B 4 D AE 2 A F5 B0 C8 EB BB 3 C 83 53 99 61
F 17 2 B 04 7 E BA 77 D6 26 E1 69 14 63 55 21 0 C 7 D
Figura 14
Tabla inversa a S -Box.
La función Inv-ShiftRow será inversa a la función ShiftRow en la que en vez de
desplazar las filas de la matriz hacia la izquierda se desplazarán a la derecha, el mismo
número de posiciones que se hubieran desplazado con anterioridad.
Por último la función Inv-MixColumns será la inversa de la función MixColumns
en la que se deberá operar sobre los bytes de una misma columna, considerando las
columnas como polinomios con coeficientes en GFH28L, que serán multiplicados por el
polinomio dHxL = 0 B x3 + 0 D x2 + 09 x + 0 E , que es el inverso de cHxL. De forma
matemática:
(22)SHxL = dHxL≈ S ' HxL.
donde SHxL representa la matriz de estado resultante de esta etapa, y S ' HxL representa la
matriz de estados de entrada.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
57
Esta fórmula para comprenderla más fácilmente se puede expresar en forma
matricial de la siguiente manera.
(23)
i
k
jjjjjjjjjjjjjj
S '0,CS '1,CS '2,CS '3,C
y
{
zzzzzzzzzzzzzz
=
i
k
jjjjjjjjjjjj
0 e 0 b 0 d 0909 0 e 0 b 0 d0 d 09 0 e 0 b0 b 0 d 09 0 e
y
{
zzzzzzzzzzzz
.
i
k
jjjjjjjjjjjjjj
S0,C
S1,C
S2,C
S3,C
y
{
zzzzzzzzzzzzzz
.
3.5 Ejemplo de Cifrado y Descifrado
Para una mejor comprensión de los apartados anteriores, que incluye el proceso de
el cifrado y el descrifrado, se propone el siguiente ejemplo. Sean los datos siguientes:
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:
Función AddRoundKey corresponde al estado_1.
Función ByteSub corresponde al estado_2.
Función ShiftRow corresponde al estado_3.
Función MixColumn corresponde al estado_4.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
58
Ronda[0]. Entrada00112233445566778899aabbccddeeff
Ronda[0]. Lista_Claves000102030405060708090a0b0c0d0e0f
Ronda[1]. Estado_100102030405060708090a0b0c0d0e0f0
Ronda[1]. Estado_263cab7040953d051cd60e0e7ba70e18c
Ronda[1]. Estado_36353e08c0960e104cd70b751bacad0e7
Ronda[1]. Estado_45f72641557f5bc92f7be3b291db9f91a
Ronda[1]. Lista_Clavesd6aa74fdd2af72fadaa678f1d6ab76fe
Ronda[2]. Estado_189d810e8855ace682d1843d8cb128fe4
Ronda[2]. Estado_2a761ca9b97be8b45d8ad1a611fc97369
Ronda[2]. Estado_3a7be1a6997ad739bd8c9ca451f618b61
Ronda[2]. Estado_4ff87968431d86a51645151fa773ad009
Ronda[2]. Lista_Clavesb692cf0b643dbdf1be9bc5006830b3fe
Ronda[3]. Estado_14915598f55e5d7a0daca94fa1f0a63f7
Ronda[3]. Estado_23b59cb73fcd90ee05774222dc067fb68
Ronda[3]. Estado_33bd92268fc74fb735767cbe0c0590e2d
Ronda[3]. Estado_44c9c1e66f771f0762c3f868e534df256
Ronda[3]. Lista_Clavesb6ff744ed2c2c9bf6c590cbf0469bf41
Ronda[4]. Estado_1fa636a2825b339c940668a3157244d17
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
59
Ronda[4]. Estado_22dfb02343f6d12dd09337ec75b36e3f0
Ronda[4]. Estado_32d6d7ef03f33e334093602dd5bfb12c7
Ronda[4]. Estado_46385b79ffc538df997be478e7547d691
Ronda[4]. Lista_Claves47f7f7bc95353e03f96c32bcfd058dfd
Ronda[5]. Estado_1247240236966b3fa6ed2753288425b6c
Ronda[5]. Estado_236400926f9336d2d9fb59d23c42c3950
Ronda[5]. Estado_336339d50f9b539269f2c092dc4406d23
Ronda[5]. Estado_4f4bcd45432e554d075f1d6c51dd03b3c
Ronda[5]. Lista_Claves3caaa3e8a99f9deb50f3af57adf622aa
Ronda[6]. Estado_1c81677bc9b7ac93b25027992b0261996
Ronda[6]. Estado_2e847f56514dadde23f77b64fe7f7d490
Ronda[6]. Estado_3e8dab6901477d4653ff7f5e2e747dd4f
Ronda[6]. Estado_49816ee7400f87f556b2c049c8e5ad036
Ronda[6]. Lista_Claves5e390f7df7a69296a7553dc10aa31f6b
Ronda[7]. Estado_1c62fe109f75eedc3cc79395d84f9cf5d
Ronda[7]. Estado_2b415f8016858552e4bb6124c5f998a4c
Ronda[7]. Estado_3b458124c68b68a014b99f82e5f15554c
Ronda[7]. Estado_4c57e1c159a9bd286f05f4be098c63439
Ronda[7]. Lista_Claves
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
60
14f9701ae35fe28c440adf4d4ea9c026
Ronda[8]. Estado_1d1876c0f79c4300ab45594add66ff41f
Ronda[8]. Estado_23e175076b61c04678dfc2295f6a8bfc0
Ronda[8]. Estado_33e1c22c0b6fcbf768da85067f6170495
Ronda[8]. Estado_4baa03de7a1f9b56ed5512cba5f414d23
Ronda[8]. Lista_Claves47438735a41c65b9e016baf4aebf7ad2
Ronda[9]. Estado_1fde3bad205e5d0d73547964ef1fe37f1
Ronda[9]. Estado_25411f4b56bd9700e96a0902fa1bb9aa1
Ronda[9]. Estado_354d990a16ba09ab596bbf40ea111702f
Ronda[9]. Estado_4e9f74eec023020f61bf2ccf2353c21c7
Ronda[9]. Lista_Claves549932d1f08557681093ed9cbe2c974e
Ronda[10]. Estado_1bd6e7c3df2b5779e0b61216e8b10b689
Ronda[10]. Estado_27a9f102789d5f50b2beffd9f3dca4ea7
Ronda[10]. Estado_37ad5fda789ef4e272bca100b3d9ff59f
Ronda[10]. Lista_Claves 13111d7fe3944a17f307a78b4d2b30c5
Ronda[10]. Salida69c4e0d86a7b0430d8cdb78070b4c55a
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
61
Función AddRoundKey corresponde al estado_1.
Función Inv-ByteSub corresponde al estado_2.
Función Inv-ShiftRow corresponde al estado_3.
Función Inv-MixColumn corresponde al estado_4.
Ronda[0]. entrada69c4e0d86a7b0430d8cdb78070b4c55a
Ronda[0]. Lista_Claves13111d7fe3944a17f307a78b4d2b30c5
Ronda[1]. Estado_17ad5fda789ef4e272bca100b3d9ff59f
Ronda[1]. Estado_27a9f102789d5f50b2beffd9f3dca4ea7
Ronda[1]. Estado_3bd6e7c3df2b5779e0b61216e8b10b689
Ronda[1]. Lista_Claves549932d1f08557681093ed9cbe2c974e
Ronda[1]. Estado_4e9f74eec023020f61bf2ccf2353c21c7
Ronda[2]. Estado_154d990a16ba09ab596bbf40ea111702f
Ronda[2]. Estado_25411f4b56bd9700e96a0902fa1bb9aa1
Ronda[2]. Estado_3fde3bad205e5d0d73547964ef1fe37f1
Ronda[2]. Lista_Claves47438735a41c65b9e016baf4aebf7ad2
Ronda[2]. Estado_4baa03de7a1f9b56ed5512cba5f414d23
Ronda[3]. Estado_13e1c22c0b6fcbf768da85067f6170495
Ronda[3]. Estado_23e175076b61c04678dfc2295f6a8bfc0
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
62
Ronda[3]. Estado_3d1876c0f79c4300ab45594add66ff41f
Ronda[3]. Lista_Claves14f9701ae35fe28c440adf4d4ea9c026
Ronda[3]. Estado_4 c57e1c159a9bd286f05f4be098c63439
Ronda[4]. Estado_1b458124c68b68a014b99f82e5f15554c
Ronda[4]. Estado_2b415f8016858552e4bb6124c5f998a4c
Ronda[4]. Estado_3c62fe109f75eedc3cc79395d84f9cf5d
Ronda[4]. Lista_Claves5e390f7df7a69296a7553dc10aa31f6b
Ronda[4]. Estado_49816ee7400f87f556b2c049c8e5ad036
Ronda[5]. Estado_1e8dab6901477d4653ff7f5e2e747dd4f
Ronda[5]. Estado_2e847f56514dadde23f77b64fe7f7d490
Ronda[5]. Estado_3c81677bc9b7ac93b25027992b0261996
Ronda[5]. Lista_Claves3caaa3e8a99f9deb50f3af57adf622aa
Ronda[5]. Estado_4f4bcd45432e554d075f1d6c51dd03b3c
Ronda[6]. Estado_136339d50f9b539269f2c092dc4406d23
Ronda[6]. Estado_236400926f9336d2d9fb59d23c42c3950
Ronda[6]. Estado_3247240236966b3fa6ed2753288425b6c
Ronda[6]. Lista_Claves47f7f7bc95353e03f96c32bcfd058dfd
Ronda[6]. Estado_46385b79ffc538df997be478e7547d691
Ronda[7]. Estado_12d6d7ef03f33e334093602dd5bfb12c7
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
63
Ronda[7]. Estado_22dfb02343f6d12dd09337ec75b36e3f0
Ronda[7]. Estado_3 fa636a2825b339c940668a3157244d17
Ronda[7]. Lista_Clavesb6ff744ed2c2c9bf6c590cbf0469bf41
Ronda[7]. Estado_44c9c1e66f771f0762c3f868e534df256
Ronda[8]. Estado_13bd92268fc74fb735767cbe0c0590e2d
Ronda[8]. Estado_23b59cb73fcd90ee05774222dc067fb68
Ronda[8]. Estado_34915598f55e5d7a0daca94fa1f0a63f7
Ronda[8]. Lista_Clavesb692cf0b643dbdf1be9bc5006830b3fe
Ronda[8]. Estado_4ff87968431d86a51645151fa773ad009
Ronda[9]. Estado_1a7be1a6997ad739bd8c9ca451f618b61
Ronda[9]. Estado_2a761ca9b97be8b45d8ad1a611fc97369
Ronda[9]. Estado_389d810e8855ace682d1843d8cb128fe4
Ronda[9]. Lista_Clavesd6aa74fdd2af72fadaa678f1d6ab76fe
Ronda[9]. Estado_45f72641557f5bc92f7be3b291db9f91a
Ronda[10]. Estado_1 6353e08c0960e104cd70b751bacad0e7
Ronda[10]. Estado_2 63cab7040953d051cd60e0e7ba70e18c
Ronda[10]. Estado_3 00102030405060708090a0b0c0d0e0f0
Ronda[10]. Lista_Claves000102030405060708090a0b0c0d0e0f
Ronda[10]. Salida00112233445566778899aabbccddeeff
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
64
4. Aspectos en la Implementación
4.1 Función Selección de clave
La función de selección simplemente toma consecutivamente de la secuencia
obtenida por la función de expansión de clave bytes que va asignado a cada subclave Ki.
para formar bloques del mismo tamaño que la matriz de estado. Es decir, coge Nb *4 bytes
para cada vuelta.
La generación de la claves (expansión de clave) para el proceso de descifrado se
hace forma idéntica al proceso de cifrado. La diferencia reside en la función de selección de
clave. En el proceso de descifrado se toman bytes de la lista de claves desde los valores
finales hasta llegar a los iniciales, que es la propia clave de usuario. Es decir, la última
subclave que se utilizó para cifrar, será la primera que se utilizará para descifrar.
4.2 Función de expansión de clave
La función de expansión de clave permite generar bytes útiles como subclaves a
partir de la clave de sistema K. Esta función de expansión se puede describir como un array
lineal, denominado W , de palabras de cuatro bytes y con una longitud de Nb * HNr + 1L.
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
65
Figura 15
Ejemplo de subclaves y clave de expansión.
Se observa cómo la función de expansión de clave depende del valor de Nk. Ante
este hecho los autores definieron dos versiones para esta función, una para Nk menor o
igual que 6 y otra para Nk mayor 6, por motivos de seguridad.
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:
(24)W HiL = W Hi – NkLXORW H i –1 L.
Para todo valor de i que sea multiplo de Nk se calculan como:
(25)W HiL = W Hi – NkLXOR @ByteSubHRotByte@W Hi- 1LDLXORRconHi êNkLD.
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 imod Nk = 4. En este caso las palabras de
subclaves se calculan como:
(26)W HiL = W Hi – NkLXORByteSub HW @i - 1DL.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
66
Una vez conocido el funcionamiento de la función de expansión de clave,veáse,para
finalizar con la explicaciónde la función un ejemplo real de generación de bytes de
subclaves para un algoritmoRijndaelcon clave de 128 bits.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
67
à Ejemplo. Se selecciona la clave de usuario.
Clave= 2b 7e 15 16 28 ae d2 a6 ab f7 15 88 09 cf 4f 3c HNk = 4L.
Se transforman a las cuatro primeras posiciones del array la clave del usuario:
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]:
i=4 (i múltiplo de Nk)
temp= W[3] = 09 cf 4f 3c
Se aplica función de rotación Rot ï temp = cf 4c 3c 09
Se aplica función ByteSub ï ByteSub (temp) = 8a 84 eb 01
Rcon[4/4]=Rcon[1]= [ x0,{00},{00},{00}] =[{01},{00},{00},{00}]
temp= Rcon[1]∆temp =8a 84 eb 01 ∆ 01 00 00 00 = 8b 84 eb 01
W[4] = W[0] ∆ temp = 2b 7e 15 16∆ 8b 84 eb 01 = a0 fa fe 17
Siguiendo todos los criterios descritos en esta función se podrían generar todos los
bytes de subclaves necesarios para la versión del algoritmo con la que se trabajará.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
68
4.3 Desarrollo del Algoritmo
/* Rijndael code August 01* rijndael-alg-ref.c v2.0 August '99* Reference ANSI C code*/
#include <stdio.h>#include <conio.h>#include <string.h>
/* Definición de funciones */int rijndaelKeySched (unsigned char k[4][4], unsigned char rk[10+1][4][4]);int rijndaelEncrypt (unsigned char a[4][4], unsigned char rk[10+1][4][4]);;int rijndaelDecrypt (unsigned char a[4][4], unsigned char rk[10+1][4][4]);
/* Definición de los Logaritmos de todos los elementos de GF(2^8) base 3 */unsigned char Logtable[256] = {0, 0, 25, 1, 50, 2, 26, 198, 75, 199, 27, 104, 51, 238, 223, 3, 100, 4, 224, 14, 52, 141, 129, 239, 76, 113, 8, 200, 248, 105, 28, 193,125, 194, 29, 181, 249, 185, 39, 106, 77, 228, 166, 114, 154, 201, 9, 120, 101, 47, 138, 5, 33, 15, 225, 36, 18, 240, 130, 69, 53, 147, 218, 142, 150, 143, 219, 189, 54, 208, 206, 148, 19, 92, 210, 241, 64, 70, 131, 56, 102, 221, 253, 48, 191, 6, 139, 98, 179, 37, 226, 152, 34, 136, 145, 16, 126, 110, 72, 195, 163, 182, 30, 66, 58, 107, 40, 84, 250, 133, 61, 186, 43, 121, 10, 21, 155, 159, 94, 202, 78, 212, 172, 229, 243, 115, 167, 87, 175, 88, 168, 80, 244, 234, 214, 116, 79, 174, 233, 213, 231, 230, 173, 232, 44, 215, 117, 122, 235, 22, 11, 245, 89, 203, 95, 176, 156, 169, 81, 160, 127, 12, 246, 111, 23, 196, 73, 236, 216, 67, 31, 45, 164, 118, 123, 183, 204, 187, 62, 90, 251, 96, 177, 134, 59, 82, 161, 108, 170, 85, 41, 157, 151, 178, 135, 144, 97, 190, 220, 252, 188, 149, 207, 205, 55, 63, 91, 209, 83, 57, 132, 60, 65, 162, 109, 71, 20, 42, 158, 93, 86, 242, 211, 171, 68, 17, 146, 217, 35, 32, 46, 137, 180, 124, 184, 38, 119, 153, 227, 165, 103, 74, 237, 222, 197, 49, 254, 24, 13, 99, 140, 128, 192, 247, 112, 7};
/* Definición de los potencias de todos los elementos de GF(2^8) base 3 */unsigned char Alogtable[256] = {1, 3, 5, 15, 17, 51, 85, 255, 26, 46, 114, 150, 161, 248, 19, 53, 95, 225, 56, 72, 216, 115, 149, 164, 247, 2, 6, 10, 30, 34, 102, 170, 229, 52, 92, 228, 55, 89, 235, 38, 106, 190, 217, 112, 144, 171, 230, 49, 83, 245, 4, 12, 20, 60, 68, 204, 79, 209, 104, 184, 211, 110, 178, 205, 76, 212, 103, 169, 224, 59, 77, 215, 98, 166, 241, 8, 24, 40, 120, 136, 131, 158, 185, 208, 107, 189, 220, 127, 129, 152, 179, 206, 73, 219, 118, 154, 181, 196, 87, 249, 16, 48, 80, 240, 11, 29, 39, 105, 187, 214, 97, 163, 254, 25, 43, 125, 135, 146, 173, 236, 47, 113, 147, 174, 233, 32, 96, 160, 251, 22, 58, 78, 210, 109, 183, 194, 93, 231, 50, 86, 250, 21, 63, 65, 195, 94, 226, 61, 71, 201, 64, 192, 91, 237, 44, 116, 156, 191, 218, 117, 159, 186, 213, 100, 172, 239, 42, 126, 130, 157, 188, 223, 122, 142, 137, 128, 155, 182, 193, 88, 232, 35, 101, 175, 234, 37, 111, 177, 200, 67, 197, 84, 252, 31, 33, 99, 165, 244, 7, 9, 27, 45, 119, 153, 176, 203, 70, 202, 69, 207, 74, 222, 121, 139, 134, 145, 168, 227, 62, 66, 198, 81, 243, 14, 18, 54, 90, 238, 41, 123, 141, 140, 143, 138, 133, 148, 167, 242, 13, 23, 57, 75, 221, 124, 132, 151, 162, 253, 28, 36, 108, 180, 199, 82, 246, 1};
/* Definición de la S-caja */unsigned char S[256] = {
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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};
/* Definición 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};
/* Definición de los valores de la función 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, };/* Definición de los valores desplazamiento correspondiente a cada casode 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};
/* Función 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)
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
70
{if (a && b)
return Alogtable[(Logtable[a] + Logtable[b])%255];else return 0;
}/* Función que efectúa la transformación 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];
}/* Función que efectúa la transformación 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];}
}/* Función que efectúa la transformación 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]] ;
}/* Función que efectúa la transformación 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];
}/* Función que efectúa la transformación 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++)
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
71
for(j = 0; j < BC; j++)a[i][j] = b[i][j];
}/* Función que genera la extención de la clave K*/int rijndaelKeySched (unsigned char k[4][4], unsigned char W[10+1][4][4]) { /* Calculate the necessary round keys the number of calculations dependson keyBits and blockBits*/
int KC, BC, ROUNDS, s;int i, j, t, rconpointer = 0;unsigned char tk[4][4];KC = 4;BC = 4;ROUNDS = 10;for(j = 0; j < KC; j++)
for(i = 0; i < 4; i++)tk[i][j] = k[i][j];
t = 0;/* copy values into round key array */
for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++)for(i = 0; i < 4; i++)
W[t / BC][i][t % BC] = tk[i][j];while (t < (ROUNDS+1)*BC) /* while not enough round key material
calculated */{
for(i = 0; i < 4; i++) tk[i][0] ^= S[tk[(i+1)%4][KC-1]];tk[0][0] ^= rcon[rconpointer++];for(j = 1; j < KC; j++)
for(i = 0; i < 4; i++) tk[i][j] ^= tk[i][j-1];
/******* copias la subclave r esima en el arreglo W **********/for(j = 0; (j < KC) && (t < (ROUNDS+1)*BC); j++, t++)
for(i = 0; i < 4; i++) {
W[t / BC][i][t % BC] = tk[i][j];};
}return 0;
}/* Procedimiento para cifrar */int rijndaelEncrypt (unsigned char a[4][4], unsigned char rk[10+1][4][4]){
/* Encryption of one block*/int r, BC, ROUNDS,i,j,k;int B[8],X[8],Y[8],XE;BC = 4;ROUNDS = 10;KeyAddition(a,rk[0],BC);for(r = 1; r < ROUNDS; r++) {
Substitution(a,S,BC);ShiftRow(a,0,BC);MixColumn(a,BC);KeyAddition(a,rk[r],BC);gotoxy(6,5);printf("CT[");printf("%d",r);printf("] = ");
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
72
for(i = 0; i < 4; i++)for(j = 0; j < 4; j++)
printf("%02X ",a[j][i]);getchar();
}Substitution(a,S,BC);ShiftRow(a,0,BC);KeyAddition(a,rk[ROUNDS],BC);printf("\n\n\n");printf("Cipher Text CT = ");for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)printf("%02X ",a[j][i]);
gotoxy(60,24); printf("Press Enter....");
getchar();clrscr();return 0;
}/* Procedimiento para descifrar */int rijndaelDecrypt (unsigned char a[4][4], unsigned char rk[10+1][4][4]){
int r, BC, ROUNDS;BC = 4;ROUNDS = 10;KeyAddition(a,rk[ROUNDS],BC);Substitution(a,Si,BC);ShiftRow(a,1,BC);/* ROUNDS-1 ordinary rounds*/for(r = ROUNDS-1; r > 0; r--) {
KeyAddition(a,rk[r],BC);InvMixColumn(a,BC);Substitution(a,Si,BC);ShiftRow(a,1,BC);
}KeyAddition(a,rk[0],BC);return 0;}
/* Ejemplo para cifrar y descifrar a A[][] con la clave clave[][] */int main () {
unsigned char clave[4][4]={0x00,0x04,0x08,0x0c,0x01,0x05,0x09,0x0d,0x02,0x06,0x0a,0x0e,0x03,0x07,0x0b,0x0f};
unsigned char A[4][4]={0x00,0x04,0x08,0x0c,0x01,0x05,0x09,0x0d,0x02,0x06,0x0a,0x0e,0x03,0x07,0x0b,0x0f};
unsigned char clave[4][4]={0x2b,0x28,0xab,0x09,0x7e,0xae,0xf7,0xcf,0x15,0xd2,0x15,0x4f,
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
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;
}
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
74
5. Aplicaciones del algoritmo en la proteccion de datos
En este apartado se mostrarán diferentes aplicaciones en las que se utiliza el
algoritmo AES o Rijndael para ver su importancia y expansión que como ya se sabe abarca
campos tan importantes como los negocios por Internet, correo electrónico, dinero
electrónico (tarjetas de crédito, tarjetas inteligentes), llaveros electrónicos, chips de
seguridad contra robos de coches, registros públicos, etc.
Creación de un sistema para codificar las comunicaciones móviles a través de Internet
Ingenieros alemanes del Instituto Fraunhofer (SIT) han desarrollado un sistema
para codificar las telecomunicaciones móviles sobre VoIP, es decir, a traves de internet.
Esto puede dar el impulso definitivo a la convergencia de los móviles con WiFi e Internet.
El prototipo se basa en la aplicación J2ME (Plataforma Java) y utiliza un algoritmo
Advanced Encryption Standard (AES) para codificar un canal reservado para las
comunicaciones móviles a través de IP. De esta manera puede analizar protocolos
criptográficos y las cualidades de funcionamiento de los teléfonos móviles,
independientemente de la calidad de la señal, lo que garantiza una comunicación segura a
través de Internet.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
75
Aplicación AES en las redes IEEE 802.11i, WPA2 o redes Wireless Lan
El estándar IEEE 802.11i, también conocido como WPA2, es una mejora al
estándar 802.11 que especifica mecanismos de seguridad para las redes inalámbricas. El
estándar fue ratificado y reemplazado por el protocolo WPA, que había sido introducido
previamente por la alianza WiFi como solución a las inseguridades de WEP.
WPA2 ó 802.11i hace uso del estándar de cifrado avanzado (AES) para
proporcionar autentificación de origen, integridad y confidencialidad a la red mediante el
cifrado en los propios routers.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
76
Utimaco - SafeGuard PrivateCrypto
Utimaco es el principal proveedor mundial de seguridad profesional de TI. Ofrecen
soluciones que protegen la información electrónica de las empresas y los gobiernos frente
al acceso no autorizado y garantizan que los procesos y procedimientos en el ámbito
electrónico se cumplan en todos los casos y se mantengan confidenciales.
La división de seguridad de dispositivos personales proporciona tecnologías y
soluciones para la seguridad móvil en las áreas de autenticación de alto nivel, incluidas
técnicas biométricas, cifrado y verificaciones de integridad, y la división de seguridad de
transacciones se especializa en soluciones de seguridad para aplicaciones electrónicas de
negocios, gubernamentales y de pagos por Internet.
Las principales características de seguridad y Criptografia que utiliza esta empresa
se basa en un cifrado seguro comprobado (algoritmoAES de 256 bits). Este algoritmo
protege la valiosa información de su compañía y su información personal, protege los
archivos en contra de accesos no autorizados y realiza un intercambio seguro de datos que
no requiere una infraestructura común.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
77
DWL-7100AP, Punto de acceso inalámbrico a 108Mbps
Punto de acceso inalámbrico multimodo que responde a los estándares 802.11a,
802.11b y 802.11g, con un rendimiento 15 veces superior, que incorpora mecanismos
adicionales de seguridad, tales como Wi-Fi Protected Access (WPA), Advanced Encryption
Standard (AES) y 802.1x. Servidor DHCP.
Figura 16
Módem DWL- 7100 AP.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
78
6. Conclusiones y líneas futuras
A lo largo de la elaboración del presente proyecto se ha tratado con numerosos
conceptos y métodos matemáticos, quedando demostrado que las matemáticas y la teoría de
números son la base principal de los criptosistemas utilizados en la actualidad y en concreto
de este algoritmo. Las conclusiones que se obtienen del presente proyecto son las siguientes:
1ª. La Criptografía, tanto antigua como moderna, debe su base, integridad y eficacia a
las matemáticas, que hacen posible el intercambio de mensajes de manera que sólo puedan
ser leídos por las personas a quienes van dirigidos. La aritmética modular, los campos
finitos, y otro gran número de métodos matemáticos son sólo algunos ejemplos en los que
se apoyan los algoritmos de codificación y descodificación.
2ª. El algoritmo AES o algoritmo Rijndael, al contrario que su predecesor DES, es
rápido tanto en software como en hardware, es relativamente fácil de implementar, y
requiere poca memoria. Es un cifrado por bloques no una red de Sustitución/Permutación.
Como nuevo estándar de cifrado, se está utilizando actualmente a gran escala, es decir es
uno de los más potentes y más utilizados tanto a nivel individual como a nivel mundial, por
su gran seguridad y estabilidad.
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 año 2010, claves de 112 bits hasta el
año 2020, y de 128 bits posteriormente. Aunque esta seguridad puede reducirse por el modo
de operación de los algoritmos en consideración. Para 80 bits de seguridad AES, es
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
79
equivalente a 1024 bits de RSA, y 163 de ECDSA.
4ª. En la actualidad y con la tecnología conocida atacar un sistema por fuerza bruta de
128, 192, 256 bits de clave como el algoritmo Rijndael es impracticable
computacionalmente.
5ª. La Criptografía ha ido adaptándose a nuestros días, orientándose fundamentalmente
a las aplicaciones informáticas. En el estado actual de AES caben mencionar que son
numerosas las aplicaciones que han asumido ese algorimto criptográfico en sus esquemas.
Entre las aplicaciones prácticas en diversas áreas están:
a) La protección de las comunicaciones digitales: Internet, TV digital,
comunicaciones móviles, redes de datos (IPSec) y de voz.
b) La transferencia de documentos EDI (Electronic Data Interchange) y el
comercio electrónico EC (Electronic Commerce). Transferencia de dinero por banca,
denominada EFT (Electronic Funds Transfer).
c) Garantizar la seguridad y protección del software.
d) La mensajería militar en la red de mando y control (S/MIME).
e) En la aplicación del DNI digital, con la firma digital, y en la firma digital de
documentos.
6ª. Como líneas futuras de análisis e investigación y como mejora posible a introducir
al actual Proyecto cabría reseñar:
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
80
a) Introducción y desarrollo de las funciones del algoritmo AES mediante las
técnicas de la Criptografía de Curvas Elípticas (CCE), como variante de la Criptografía
simétrica o de clave privada basada en las matemáticas de las Curvas Elípticas. Esta
metodología puede ser más rápida y usar claves más cortas pero más seguras que el método
de AES.
b) Una línea de investigación en el criptoanálisis eficiente en el futuro son los
ataques llamados algebraicos que en nuestros días no son operables, sin embargo, se
presume sean realidad en un futuro no lejano.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
81
7. Desarrollo de la aplicación
7.1 Ciclo de vida
Existen diferentes paradigmas de ciclo de vida, dependientes de la naturaleza del
proyecto a acometer, en este caso la metodología 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
aproximación y documentación de partida para la siguiente etapa o paquete de trabajo. Es el
tipo de metodología más lógico para aplicar a este proyecto, pues la parte de programación
consiste en el diseño y aplicación del algoritmo y en la mayoría dependen una de otra, pues
para entender ciertas partes del algoritmo es necesario asentar ciertos conocimientos
anteriores. Esta forma es la más apropiada para avanzar lo más correcta y específicamente
posible.
El estudio y división de las partes del proyecto se ha realizado en bloques,
siguiendo un orden razonable, apropiado para cada una de las partes para una mejor
cimentación de los conceptos, siendo el resultado:
1.- Estudio de los Campos de Galois GFH28L.
2.- Especificación del algoritmo basado en el cifrado, el descifrado, las funciones
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
82
que intervienen en estas dos operaciones y la importancia de la clave.
3.- Aspectos en la implementación como la longitud de la clave, las restricciones de
la clave o la parametrización en la longitud de la clave así como el tamaño del bloque.
Para poner en práctica el ciclo de vida evolutivo y en cascada se ha optado por
recurrir a una metodología de fases, tareas o paquetes. Consiste en especificar una serie de
etapas de trabajo en cuyo contenido se clasifican los pasos necesarios para poder ir
evolucionando a lo largo del proyecto.
A continuación, se muestra un grafico de dichas etapas de trabajo para una mejor
visualización y entendimiento.
.
Fase 0Gestión
Fase 1Conceptos Generales
Fase 2Codificación de Algoritmos
Fase 3Pruebas
Fase 4Interfaz de Usuario
Fase 5Conclusión
Fase 1.1Búsqueda de Documentación
Fase 1.2Organización de documentación
Algoritmo AES ParaProtección de Datos
Figura 17
Paquetes de trabajo.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
83
Fase 0.- Gestión
Definición: Lo que se asignará al paquete de gestión se basa principalmente en la
vigilancia y bien hacer del proyecto. Esta fase no va a realizarse en un periodo de tiempo
continuo y determinado. Básicamente las actividades desarrolladas consisten en una serie de
reuniones y entrevistas repartidas a lo largo de todo el proyecto con el fin de vigilar la
correcta realización del proyecto, tanto en contenidos como en correspondencia con el
tiempo estipulado del mismo. De tal forma que en esta fase se incluirá todo el trabajo que
tenga que ver con el seguimiento del correcto funcionamiento del proyecto.
Entradas: Entregables del proyecto en distintas fases o versiones de realización así
como las oportunas revisiones tanto documentales como de la planificación temporal y
económica.
Salidas: Las entradas revisadas, corregidas o modificadas en el caso en el que sea
oportuno dicha operación.
Fase 1.- Conceptos Generales
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 serán la
base o cimientos sobre los que se funde el presente proyecto.
Las subfases comprenden tanto la búsqueda, como la organización y estudio de la
información.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
84
Fase 1.1.- Búsqueda de Documentación
Definición: En esta fase concretamente se ocupa de buscar toda información que
sea de ayuda para llevar a cabo el proyecto, tanto datos puros que ayuden directamente,
como todo tipo de información anexa que permita adquirir un alto grado de comprensión de
la tarea que se va a llevar a cabo.
Esta búsqueda se ha realizado tanto en bibliotecas como publicaciones
especializadas, y dado el carácter didáctico y de investigación del proyecto, se ha dado
especial importancia a las nuevas fuentes de información, como Internet, ya que se las
considera, un buen banco de nuevas investigaciones.
Entradas: En este apartado las entradas básicas vienen de las primeras entrevistas o
reuniones, para conocer por dónde se debe encaminar la búsqueda información, de forma
más específica y detallada, para no perder tiempo e ir a lo que realmente es importante.
Propiamente hablando no es una entrada pues no se realiza ningún tipo de conversión de
información aunque sí es de gran ayuda.
Salidas: Como salida se obtiene una buena recopilación de documentación
debidamente catalogada, seleccionada y fundada bajo un orden de interés y calidad de
contenidos.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
85
Fase 1.2.- Organización de Documentación
Definición: Junto con la siguiente fase, este apartado es uno de los que más peso
tienen a la hora del desarrollo del proyecto.
Del apartado anterior se ha obtenido un número abundante de documentación y
junto a ella los pseudocódigos apropiados del algoritmo, que se implanta y sobre el que se
basa el proyecto. En esta fase se seleccionan aquellos pseudocódigos más elegantes que se
haya encontrado o aquéllos que por su estructura sean interesantes desde un punto de vista
original o educativo. De la misma manera se selecciona y estudia la correspondiente
documentación para formar y fundar unos documentos sobre los conceptos fundamentales
necesarios y apropiados para realizar una ilustración y explicación lo más clara e
instructiva posible. En el caso de no disponer de pseudocódigos completos, se
cumplimentarán por cuenta propia, gracias a los conceptos aprendidos, para poder alcanzar
el resultado final deseado.
Entradas: Documentación recopilada en la fase anterior Fase 1.1.
Salidas: Documentación perfectamente fundada, detallada y clara, junto con una
selección o un grupo pseudocódigos a implantar en posteriores etapas.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
86
Fase 2.- Codificación de algoritmos
Definición: 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 pseudocódigos al lenguaje de programación escogido, en este caso a la plataforma
Java J2EE que finalmente se sustituyó por el lenguaje C++. Estos códigos son el
fundamento y punto central de todo el proyecto, ya que serán los que permitirán explicar el
funcionamiento y la importancia del algoritmo.
Entradas: Pseudocódigos seleccionados.
Salidas: Algoritmo codificados y funcionando.
Fase 3.- Pruebas
Definición: 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 aplicación de ejemplos sobre el algoritmo y
hacer una idea de las principales aplicaciones o funcionamientos de la aplicación.
Entradas: Los códigos y ejemplos para su posterior verificación.
Salidas: Algoritmo probado y sin errores, listo para ser implantado como motor del
software.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
87
Fase 4.- Creación de la interfaz de usuario
Definición: Junto con la codificación del algoritmo, el diseño y la creación de la
interfaz de usuario son el punto fuerte de este proyecto, como anteriormente se cita.
Se debe tener en cuenta que la interfaz permita interactuar de forma fácil y sencilla,
es decir, que sirva, tanto para personas que estén familiarizadas con el algoritmo y el propio
mundo de la Criptografía, 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 cómo enfocar la interfaz a los
usuarios.
Salidas: Interfaz gráfica para el usuario en funcionamiento.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
88
Fase 5.- Conclusiones
Definición: En esta fase se redactan las conclusiones del proyecto. Se intentará que
no tengan un nivel muy avanzado y que sean de fácil comprensión con un lenguaje
adaptado a personas que no necesariamente tengan que estar muy preparadas en el campo
de la Criptografía y Teoría de Números. 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 visualización de líneas futuras acerca de la
evolución de la protección de datos, de la Criptografía y en particular de este algoritmo que
se presenta.
Entradas: Toda la información generada a lo largo del proyecto.
Salidas: El apartado de conclusiónes del proyecto.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
89
7.2. Identificación de necesidades
El objetivo principal del presente proyecto es desarrollar una aplicación que
proporcione una herramienta que permita al usuario sumergirse en el mundo de la
Criptografía y en este caso conocer y adquirir los conocimientos oportunos del nuevo
estándar de cifrado avanzado, como es AES o el algoritmo Rijndael. Utilizar el algoritmo
de una manera rápida y cómoda, consecuencia de una aplicación informática gráfica basada
en sistema de ventanas, donde la interacción es más sencilla.
En lo referente al alcance del proyecto, la aplicación se limitará a dar un resultado
en función de los datos de entrada y una clave introducida. El gran pilar del alcance se
encuentra dentro de la documentación donde se explican cada una de las funciones, rutinas
o algoritmos que se llevan a cabo a la hora de cifrar y descifrar texto, es decir, el detalle de
cada una de las funciones que están disponibles para la operación de cifrar, el detalle de las
funciones inversas, propias de la operación del descifrado. Cada parte o porción del código
que en su unión forman el algoritmo criptográfico. En ningún caso la aplicación
proporcionará alternativas en el punto de que los datos de entrada propuestos no sean
válidos. Además, como se ha mencionado a lo largo del proyecto, si los datos de entrada
son demasiado grandes como para poder tratarse computacionalmente en la máquina donde
se esté ejecutando la aplicación, el resultado será que el sistema no será capaz de
proporcionar una respuesta.
La tipología de usuario final abarca prácticamente 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 Criptografía. Un tema
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
90
de interés general, seguido por la explicación de cada uno de los métodos y funciones
matemáticas utilizadas a la hora de desarrollar los algoritmos e incorporarlos a una interfaz
de usuario muy intuitiva, hace que no existan barreras de tipo técnico 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 transición histórica de la Criptografía se centre en
el envío de mensajes de forma secreta entre un emisor y un receptor, hace de este proyecto
una aplicación 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.
Respecto a las restricciones o problemática que puedan afectar a la planificación del
proyecto, se puede situar como principal los periodos de tiempo y sus cumplimientos en el
que deben desarrollarse. Según el diagrama de Gantt mostrado más adelante, el plazo de
ejecución ha sido de ocho o nueve meses aproximadamente. Otras restricciones que
surgieron fueron los análisis de diversas funciones y métodos matemáticos de difícil
entendimiento por la poca documentación disponible y encontrada.
7.3. Análisis de requisitos
Los siguientes requisitos identificados para esta aplicación son de carácter
funcional, puesto que atienden a características propias de las funciones de Criptografía y
del algoritmo en cuestión.
RF001. Representación de un cuerpo finito o campo de Galois del tipo GFH28L.
RF002. Representación y cálculo de las operaciones de suma y multiplicación en GFH28L.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
91
RF003. Representación de un bloque de datos como una matriz de estado de 4 filas y Nb
columnas, dependientes del tamaño de dicho bloque (128, 192, ó 256 bits).
RF004. Representación de la clave, al igual que el bloque de texto, como una matriz de 4
filas y Nk columnas, dependientes del tamaño de dicha clave (128, 192, ó 256 bits).
RF005. Cálculo de operaciones XOR entre los bloques de texto y las claves.
RF006. Representación y establecimiento de las matrices de sustitución tanto para el
cifrado como para el descifrado.
RF007. Calcular el número de rondas necesarias para llevar acabo el algoritmo de cifrado o
de descifrado.
RF008. Calcular el texto cifrado después de aplicar las funciones necesarias para el cifrado.
RF009. Calcular el texto descifrado después 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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
92
7.4. Arquitectura técnica
La arquitectura precisa para esta aplicación es la básica de PC, sin requerir
características específicas adicionales.
Es imprescindible tener instalado un software para la compilación y contrucción del
proyecto en el lenguaje C++, por ejemplo el Visual .Net o el visual C++ 6.0, aunque la
aplicacion lleva consigo un ejecutable llamado AESTool que no necesitara de ingun
software necesario para su ejecución
Tambien es necesario un compilador Borland C++ versión 4.5 para la
comprobación y detalle de las rondas del algoritmo sobre una clave inventada,
funcionamiento propio de un router.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
93
7.5. Diseño de la interfaz de usuario
Como se ha mencionado en la introducción del ciclo de vida, la interfaz de usuario
se desarrolla de forma evolutiva, al igual que todo el desarrollo de este proyecto. Esta
manera de trabajar presenta como ventajas poder obtener resultados parciales a medida que
se completan los algoritmos y, en caso de tener que realizar modificaciones, éstas son más
fáciles de localizar y resolver.
La prioridad que se ha establecido a la hora de desarrollar la interfaz de usuario es
que sobre todo sea sencilla e intuitiva. Como antes se ha indicado, está sobre todo pensado
para el ámbito docente y por tanto el grado de conocimiento del usuario no tiene
necesariamente que ser avanzado.
Primero se presentan los elementos propios que componen la aplicación:
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, dígitos del 0 al 9 y caracteres de la A a la F.
Texto Cifrado: es una caja de texto, donde aparecerá el resultado de cifrar
un texto, o bien, donde se introduzca un texto en hexadecimal para descifrarlo.
Texto Descifrado: es una caja de texto, donde aparecerá el resultado de
descifrar un texto cifrado en hexadecimal.
Además de estos elementos existen otros que son lo botones que realizarán la
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
94
operación que su nombre indica.
Cifrar: botón que cifrará el texto de entrada.
Descifrar: botón que descifrará el texto en hexadecimal introducido.
Limpiar: botón que limpia las cajas de texto.
Por Defecto: botón que introduce unos valores por defecto en las cajas de
texto, únicamente para poner ejemplos de forma rapida
A continuación se presentan unos ejemplos del funcionamiento de la interfaz de
usuario.
Al iniciar la aplicación aparecerá la siguiente visual, en la que se puede comenzar a
interactuar, o bien cifrando un texto de entrada, o bien descifrando un texto en hexadecimal
que ya haya sido cifrado, teniendo siempre en cuenta la clave que se haya utilizado, pues
como se verá en uno de estas pantallas puede ocurrir un error de descifrado si la clave
introducida para descifrar no es la correcta.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
95
Figura 18
Pantalla Inicial.
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.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
96
Figura 19
Pantalla con ejemplo de cifrado.
Pantalla inicial con el texto listo para cifrar, junto con la clave, a la espera de que el
botón de cifrar sea pulsado para que el texto se codifique.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
97
Figura 20
Pantalla con el texto cifrado.
Pantalla tras la operación de cifrado que muestra el resultado de cifrar el texto de
entrada junto con la clave, en la caja de texto cifrado.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
98
Figura 21
Pantalla con ejemplo de descifrado.
Pantalla inicial con el texto listo para descifra, junto con la clave,a la espera de que
el botón de descifrar sea pulsado para que el texto se descodifique.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
99
Figura 22
Pantalla con el texto descifrado.
Pantalla tras la operación de descifrado que muestra el resultado de descifrar el
texto de entrada cifrado junto con la clave, en la caja de texto cifrado y muestra la solucion
en la caja de texto descifrado.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
100
Figura 23
Pantalla cuando se pulsa el botón Limpiar.
Pantalla tras pulsar el botón de limpiar donde se borraran los resultados intermedios
que puedan quedar entre una y otra operacion.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
101
Figura 24
Pantalla con ejemplo de descifrado erróneo.
Pantalla tras la operación de descifrado que muestra el resultado de descifrar el
texto de entrada cifrado junto con una clave errone, es decir, una clave que no corresponde
con la clave con la que se cifró el texto, de esta manera en la caja de texto donde se muestra
el resultado se observa una serie de caracteres sin ningún sentido.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
102
Figura 25
PantallaMenú.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
103
Figura 26
Pantalla Acerca del Autor.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
104
8. Valoración económica y planificación
8.1. Introducción
En este apartado se detalla la valoración económica o análisis de costes de cada
una de las actividades que comprenden la realización y puesta en funcionamiento del
proyecto.
El proyecto se ha descompuesto en actividades y tareas, indicadas en la valoración
económica.
8.2. Técnicas de estimación de costes
Las diferentes actividades o tareas que componen el proyecto y que se han
incluido en este análisis de costes se detallan a continuación.
1. Especificaciones y Desarrollo Software
Esta tarea se ha dividido en dos grandes fases debido a su gran peso e importancia
dentro del proyecto.
En primer lugar, aparece las especificaciones o fase de requisitos. Esta tarea
incluye las fases de especificación de requisitos, del análisis funcional de las necesidades
que se quieren alcanzar y de lo que ya se tiene junto con sus objetivos asi como un plan de
pruebas que serviran de guía.
En segundo lugar se tiene la fase de desarrollo del software. Esta fase es sin duda
la que ha supuesto más coste, en términos de tiempo, y la que distingue nuestro
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
105
presupuesto del de otro proyecto que comprenda el mismo ámbito o sea del mismo tipo.
Para cada una de las fases anteriores se reseñan los costes directos, expresados en
meses/hombre (meses completos dedicados para cada actividad), necesarios para
acometer cada una de ellas, indicándose la categoría 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 confusión con el significado de los
costes unitarios aquí expresados. Estos costes representan la valoración económica que
haría la empresa por poner a cargo de este proyecto a dicho Jefe de Proyecto o Analista en
su caso.
2. Instalación, Pruebas e Integración del Software
En este apartado se recogen los costes directos de las actividades de integración y
de pruebas del software en el entorno de desarrollo y en el de explotación, incluidos los
gastos adicionales, tales como los desplazamientos y las dietas. Estos costes han sido
calculados del mismo modo que en el apartado anterior.
3. Equipamiento y Licencias Software
Costes de todo el equipamiento e infraestructura, si fuera necesario. Así mismo, se
han de especificar en este apartado las licencias necesarias para el entorno de explotación,
es decir, las licencias necesarias de los programas que se van a utilizar y que servirán de
herramientas para el desarrollo de la aplicación.
Para la implementación de este software es necesario una licencia para el lenguaje
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
106
numérico y simbólico de Mathematica®, en concreto de la versión 5.2 aquí utilizada, así
como la licencia para poder explotar el lenguaje de programacion C++ y disponer de un
PC. Como la venta de estos software será con toda seguridad a una persona jurídica, no se
contempla en este presupuesto la adquisición de dichas plataformas hardware, debido a
que en los tiempos presentes cualquier empresa o persona jurídica dispone de un PC,
haciéndose sólo referencia a la licencia del programa Mathematica®.
4. Apoyo logístico (Formación)
En este concepto se ampara la formación a impartir a los posibles operadores y
administradores del sistema a implantar. Se incluye en la formación la entrega de toda la
documentación necesaria para el curso de formación.
5. 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 sumarán los impuestos correspondientes como IVA H16%L,
para la Península y Baleares, IGIC H5%L para las islas Canarias o IPSI H0%L para Ceuta y
Melilla.
Total proyecto
La suma del Total Importe sin IVA más la partida de Incrementos e IVA
determinan el importe total del desarrollo, implantación y puesta en servicio del proyecto.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
107
8.3. Planificación temporal del proyecto
En el diagrama de Gantt de actividades siguiente se reflejan las tareas e hitos más
importantes para el desarrollo y ejecución de este proyecto Fin de Carrera, así como la
planificación temporal final dedicada a cada uno de ellos.
8.4. Costes del proyecto
En función de lo explicado en el apartado de técnicas de estimación de costes y de
la planificación vista en el apartado anterior, se proceder a calcular los costes estimados
del presente proyecto.
El importe total del proyecto asciende a 20.550,79 € (VEINTE MIL
QUINIENTOS CINCUENTA EUROS CON SETENTA Y NUEVE CÉNTIMOS),
impuestos incluidos.
El detalle de cada una de las partidas vistas en el apartado anterior, se expresa en
la tabla siguente:
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
108
ALGORITMO AES PARA PROTECCIÓN DE DATOS P.1
Ítem ConceptoSuministrador/
Empresa
Unidad(Meses/Hombre)
Coste Unitario €
Coste Total €
Total por partidas €
1 Especificaciones y Desarrollo Software1. Especificaciones
P.1.1.1 Especificación de Requisitos y Análisis FuncionalJefe de Proyecto Desarrollo Inf. 0,04 7.847,53 274,66
Analista/Programador Desarrollo Inf. 0,20 5.762,31 1.152,46P.1.1.2 Plan de pruebas
Jefe de Proyecto Desarrollo Inf. 0,04 7.847,53 343,33Analista/Programador Desarrollo Inf. 0,25 5.762,31 1.440,58
2. Desarrollo software
P.1.1.3
Fundamentos Matemáticos: Campos finitos GF(2^8), Suma Y multiplicacion en GF(2^8),
Jefe de Proyecto Desarrollo Inf. 0,03 7.847,53 206,00Analista/Programador Desarrollo Inf. 0,15 5.762,31 864,35
P.1.1.4
Especificaciones del Algoritmo: Funciones de Cifrado, Funciones de Descifrado,
Jefe de Proyecto Desarrollo Inf. 0,04 7.847,53 288,40Analista/Programador Desarrollo Inf. 0,21 5.762,31 1.210,09
P.1.1.5 Desarrollo del AlgoritmoJefe de Proyecto Desarrollo Inf. 0,04 7.847,53 274,66
Analista/Programador Desarrollo Inf. 0,20 5.762,31 1.152,46
P.1.1.6 Desarrollo del Interfaz y aplicación graficaJefe de Proyecto Desarrollo Inf. 0,04 7.847,53 329,60
Analista/Programador Desarrollo Inf. 0,24 5.762,31 1.382,95
Subtotal 1 8.919,53
3 Equipamiento y Licencias
P.1.3.1 Licencia de Mathematica V. 5.2 para WindowsAddLink Sw. Científico 1 1.585,00 1.585,00
P.1.3.2 Licencia de Windows XP Microsoft Iberica 1 285,24 285,24P.1.3.3 PC Hewlett Packard 1 1.138,29 1.138,29
Subtotal 3 3.008,53
4 Ingeniería y Dirección del ProyectoP.1.4.1 Ingeniería y Dirección del Proyecto Desarrollo Inf.
Subtotal 4
5 Apoyo Logístico (Formación)
P.1.5.1Formación aplicación Ajuste de Funciones(Curso de 6 horas a 8 personas) Desarrollo Inf. 1 2.959,50 2.959,50
Subtotal 7 2.959,50
TOTAL COSTE DIRECTO 14.887,56
6 Incrementos e IVAGastos Generales Desarrollo Inf. 13% 14.887,56 1.935,38Beneficio Industrial Desarrollo Inf. 6% 14.887,56 893,25
TOTAL IMPORTE SIN IVA 17.716,20
IVA 16% 17.716,20 2.834,59
TOTAL EUROS 20.550,79
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
109
9. Apéndice y Glosario
AES (Advanced Encryption Standard). Algoritmo Estándar de Cifrado Avanzado.
Array Conjunto o agrupación de variables del mismo tipo cuyo acceso se realiza por
índices.
Bit Dígito del sistema de numeración binario que puede tomar los valores 0 ó 1.
Bloques (Block) Secuencia de dígitos binarios que forman parte de la entrada, la salida,
el estado, y la clave. La longitud de una secuencia es el número de bits que contiene. Los
bloques también son interpretados como las series de bytes.
Byte Grupo de 8 bits tratados como una entidad simple, es decir como una palabra o bien
como un vector de 8 bits.
Cifrado Inverso (Inverse Cipher) Serie de las transformaciones que convierten el texto
cifrado en el texto de entrada inicial sin cifrar mediante la utilización de la clave.
Cipher Series Número de transformaciones necesarias que convierte el texto de entrada en
un texto cifrado utilizando una clave especifica para el cifrado de Cifra.
Clave de Cifrado (Cipher Key) Clave secreta usada por la función de Extensión
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
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
110
cifrado o descifrado, se ve como una matriz de cuatro filas y Nb columnas.
Key Expansion Rutina de ampliación de la clave que genera una serie Round Key a
partir de la clave adicional.
Nb Nb es el número de columnas (formadas cada una de ella por 32 bytes) que forman
la matriz de estado Estado, por lo que variará su número dependiendo del tamaño del
bloque.
Nb = tamaño del bloque utilizado en bits ê32.
Nk Nk es el número de columnas (formadas cada una de ella por 32 bytes) que forman
la matriz de la clave, y de la misma manera variará su número dependiendo del tamaño de
la clave.
Nk = tamaño del bloque utilizado en bits ê32.
Nr Nr es el número de iteraciones o vueltas de las cuatro transformaciones sobre la
información, o mejor dicho sobre la matriz de Estado Intermedio. Su valor dependerá de la
versión del algoritmo que se utilice.
Nr = máx HNk, NbL+ 6.
Palabra (Word) Un grupo de 32 bits tratado como una entidad sola o como 4 bytes.
Rijndael Algoritmo Criptográfico base del Estándar de Cifrado Avanzado (AES).
Round Key Valores obtenidos a partir de la clave de cifrado mediante el uso de la
función o rutina Key Expansion, que se aplica tanto para el cifrado como para el descifrado.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
111
S-BOXCaja o matriz de sustitución usada en la función ByteSub o substitución de bytes y
en la función de Extensión Clave para realizar una a una la substitución de cada byte.
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.
Texto Plano (Plaintext) Entrada de datos a la hora de cifrar, es decir, texto que se
quiere cifrar, pero al igual que ocurre con el texto cifrado o Ciphertext, también es el texto
de salida o resultado de la función inversa al cifrado, el descifrado.
Transformación Afín (Affine Transformation) Consiste en la multiplicación de una
matriz seguida por la suma de un vector.
XOR Operación OR exclusivo y su representacion es ≈
ƒ Multiplicación de dos polinomios (cada uno con grado 4) módulo x4 + 1.
· Campo de multiplicación Finita.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
112
Bibliografía
[AES01] Fernoso Santos, Pablo; Fernández Díaz, José Mª,
Guerrero Fresneda, Vicente.
Algoritmos de Seguridad de última generación: Algoritmo AES.
Protección de la Información. (24/4/2001).
Ingeniería Técnica en Electrónica Industrial. Escuela Politécnica, UAH.
[AMG00] Álvarez Marañón, Gonzalo.
El nuevo estándar de ciftrado.
Revista Criptonomicón nº34 (2000).
[CCSFe] Martínez, Fernando.
Criptografía de clave secreta.
Matemática Aplicada II.
[CSS01] Lucena López, Manuel José.
Criptografía y Seguridad en Computadores. 3º Edición
(Versión 1.00) Junio 2001.
[COUPIE02] Nicolas Courtois, Josef Pieprzyk.
Cryptanalysis of Block Ciphers with Overdefined Systems of Equations.
ASIACRYPT 2002.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
113
[DES99] Muñoz Muñoz, Alfonso.
Estudio del Algoritmo Criptográfico: Data Encryption Standard (DES)
Sistemas de Telecomunicación. EUITT-UPM.
[FSE00] Niels Ferguson, John Kelsey, Stefan Lucks, Bruce Schneier.
Improved Cryptanalysis of Rijndael.
FSE 2000.
[FUST00] Fúster Sabater, Amparo; de la Guía Martínez, Dolores y otros.
Técnicas Criptográfica de protección de datos. 2ª edición.
Ed. Ra-Ma. Madrid, 2000.
[JNIST00] James Nechvatal, Elaine Barker, Lawrence Bassham, William Burr,
Morris Dworkin, James Foti, Edward Roback.
Report on the Development of the Advanced Encryption Standard
2000, NIST Website: http://aes.nist.gov/aes.
[LUCE07] Lucena López, Manuel J.
Criptografía y Seguridad en Computadores.
4ª Edición. Versión 0.7.3. 2007.
[MATE05] Mateos Salmador, Andrés. Proyecto Fin de Carrera:
Algoritmos para la Criptografía de Clave Pública.
Dirigido por el Dr. Fco. Javier Rodríguez Gómez.
Universidad Pontificia Comillas. Madrid, 2005.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
114
[MENE96] A. Menezes, P. Van Oorschot, and S. Vanstone,
Handbook of Applied Cryptography,
CRC Press, 1996. http://www.cacr.math.uwaterloo.ca/hac/
[PAST01] Pastor Franco, José; Sarasa López, Miguel Ángel;
Salazar Riaño, José Luis;
Criptografía Digital, Fundamentos y Aplicaciones.
2ª edición.
[PRO02] Joan Daemen, Vincent Rijmen
AES Proposal: Rijndael
[RIJN02] Joan Daemen and Vincent Rijmen.
The Design of Rijndael: AES The Advanced Encryption Standard.
Springer-Verlag, 2002.
[ROME04] Romero Luezas, Rafael. Proyecto Fin de Carrera:
Criptografía Asimétrica de Clave Pública.
Dirigido por el Dr. Fco. Javier Rodríguez Gómez.
Universidad Pontificia Comillas. Madrid, 2004.
[SEI02] Ramió Aguirre, Jorge.
Seguridad Informática. Libro Electrónico en diapositivas
Madrid, Febrero 2002.
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
115
[WILL99] Stallings, Williams.
Cryptography and Network Security: Principles and Practice.
Second Edition. Prentice Hall, New Jersey, 1999.
URL’s
[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
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
116
[13] http://www.tendencias21.net/
[14] http://www.cacr.math.uwaterloo.ca/hac/
[15] http://www.aes.nist.gov/aes
Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos
117