algoritmo aes

127
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

Upload: mina-glez-hdez

Post on 29-Nov-2015

80 views

Category:

Documents


10 download

TRANSCRIPT

Page 1: Algoritmo AES

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

Page 2: Algoritmo AES

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: ……/ ……/ ……

Page 3: Algoritmo AES

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

Page 4: Algoritmo AES

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

Page 5: Algoritmo AES

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

Page 6: Algoritmo AES

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

Page 7: Algoritmo AES

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

Page 8: Algoritmo AES

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

Page 9: Algoritmo AES

Í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

Page 10: Algoritmo AES

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

Page 11: Algoritmo AES

El Algoritmo Criptográfico AES para Protección de Datos

Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos

1

Page 12: Algoritmo AES

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

Page 13: Algoritmo AES

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

Page 14: Algoritmo AES

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

Page 15: Algoritmo AES

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

Page 16: Algoritmo AES

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

Page 17: Algoritmo AES

· 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

Page 18: Algoritmo AES

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

Page 19: Algoritmo AES

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

Page 20: Algoritmo AES

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

Page 21: Algoritmo AES

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

Page 22: Algoritmo AES

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

Page 23: Algoritmo AES

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

Page 24: Algoritmo AES

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

Page 25: Algoritmo AES

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

Page 26: Algoritmo AES

Figura 2

Velocidad de descifrado para diferentes plataformas.

Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos

16

Page 27: Algoritmo AES

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

Page 28: Algoritmo AES

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

Page 29: Algoritmo AES

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

Page 30: Algoritmo AES

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

Page 31: Algoritmo AES

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

Page 32: Algoritmo AES

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

Page 33: Algoritmo AES

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

Page 34: Algoritmo AES

à 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

Page 35: Algoritmo AES

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

Page 36: Algoritmo AES

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

Page 37: Algoritmo AES

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

Page 38: Algoritmo AES

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

Page 39: Algoritmo AES

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

Page 40: Algoritmo AES

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

Page 41: Algoritmo AES

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

Page 42: Algoritmo AES

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

Page 43: Algoritmo AES

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

Page 44: Algoritmo AES

ê ∗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

Page 45: Algoritmo AES

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

Page 46: Algoritmo AES

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

Page 47: Algoritmo AES

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

Page 48: Algoritmo AES

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

Page 49: Algoritmo AES

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

Page 50: Algoritmo AES

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

Page 51: Algoritmo AES

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

Page 52: Algoritmo AES

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

Page 53: Algoritmo AES

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

Page 54: Algoritmo AES

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

Page 55: Algoritmo AES

Finalmente la cuarta fila desplaza 3 bytes circularmente.

Figura 11

Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos

45

Page 56: Algoritmo AES

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

Page 57: Algoritmo AES

(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

Page 58: Algoritmo AES

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

Page 59: Algoritmo AES

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

Page 60: Algoritmo AES

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

Page 61: Algoritmo AES

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

Page 62: Algoritmo AES

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

Page 63: Algoritmo AES

à 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

Page 64: Algoritmo AES

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

Page 65: Algoritmo AES

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

Page 66: Algoritmo AES

ê ∗ 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

Page 67: Algoritmo AES

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

Page 68: Algoritmo AES

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

Page 69: Algoritmo AES

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

Page 70: Algoritmo AES

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

Page 71: Algoritmo AES

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

Page 72: Algoritmo AES

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

Page 73: Algoritmo AES

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

Page 74: Algoritmo AES

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

Page 75: Algoritmo AES

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

Page 76: Algoritmo AES

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

Page 77: Algoritmo AES

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

Page 78: Algoritmo AES

à 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

Page 79: Algoritmo AES

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

Page 80: Algoritmo AES

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

Page 81: Algoritmo AES

{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

Page 82: Algoritmo AES

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

Page 83: Algoritmo AES

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

Page 84: Algoritmo AES

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

Page 85: Algoritmo AES

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

Page 86: Algoritmo AES

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

Page 87: Algoritmo AES

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

Page 88: Algoritmo AES

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

Page 89: Algoritmo AES

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

Page 90: Algoritmo AES

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

Page 91: Algoritmo AES

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

Page 92: Algoritmo AES

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

Page 93: Algoritmo AES

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

Page 94: Algoritmo AES

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

Page 95: Algoritmo AES

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

Page 96: Algoritmo AES

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

Page 97: Algoritmo AES

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

Page 98: Algoritmo AES

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

Page 99: Algoritmo AES

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

Page 100: Algoritmo AES

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

Page 101: Algoritmo AES

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

Page 102: Algoritmo AES

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

Page 103: Algoritmo AES

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

Page 104: Algoritmo AES

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

Page 105: Algoritmo AES

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

Page 106: Algoritmo AES

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

Page 107: Algoritmo AES

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

Page 108: Algoritmo AES

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

Page 109: Algoritmo AES

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

Page 110: Algoritmo AES

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

Page 111: Algoritmo AES

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

Page 112: Algoritmo AES

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

Page 113: Algoritmo AES

Figura 25

PantallaMenú.

Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos

103

Page 114: Algoritmo AES

Figura 26

Pantalla Acerca del Autor.

Proyecto Fin de Carrera Algoritmo Criptográfico AES para protección de datos

104

Page 115: Algoritmo AES

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

Page 116: Algoritmo AES

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

Page 117: Algoritmo AES

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

Page 118: Algoritmo AES

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

Page 119: Algoritmo AES

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

Page 120: Algoritmo AES

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

Page 121: Algoritmo AES

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

Page 122: Algoritmo AES

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

Page 123: Algoritmo AES

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

Page 124: Algoritmo AES

[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

Page 125: Algoritmo AES

[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

Page 126: Algoritmo AES

[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

Page 127: Algoritmo AES

[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