15
Unidad: Modelamiento Matemático Docente: Ing. Luis Antonio Chamba Eras LOJA -ECUADOR 2010-2011 Estudiantes: Francisco Esteban Carrillo Yaguana Juana Catalina Malacatus Morocho Nataly del Cisne Ochoa Trelles Nadia Corina Proaño Fernández

algoritmos AES

Embed Size (px)

DESCRIPTION

IMPLEMENTACION DEL algoritmo AES EN JAVA

Citation preview

Page 1: algoritmos AES

Unidad: Modelamiento Matemático

Docente: Ing. Luis Antonio Chamba Eras

LOJA -ECUADOR

2010-2011

Estudiantes: Francisco Esteban Carrillo Yaguana Juana Catalina Malacatus Morocho Nataly del Cisne Ochoa Trelles

Nadia Corina Proaño Fernández

Page 2: algoritmos AES

Todo método criptográfico se ha asociado mucho a épocas en las que el envío de

mensajes ocultos era muy importante, como sucede en las guerras. Si alguien del bando

enemigo lograba interceptar un mensaje, las consecuencias podrían ser desastrosas.

Durante el imperio romano, por ejemplo, el problema tenía solución (un cambio de

estrategia), porque era muy fácil detectar que un mensaje había sido interceptado. En

nuestros días, esta situación cambia bastante, porque es posible interceptar un mensaje

sin que el emisor ni el receptor se den cuenta. Por esta razón, es importante proteger

mediante medios criptográficos la información privada, sobre todo si se la desea enviar

por la red.

Para cifrar un texto se debe aplicar un “algoritmo”, es decir, un procedimiento para

cifrar.

Por ejemplo, vamos a cifrar el texto “La acción será mañana en la plaza” para lo cual se

va a, “sumar 2 posiciones a todas las letras”:

texto original: "La acción será mañana en la plaza"

texto cifrado: "Nc ceekqo ugtc ñcpcoc go nc rncbc"

De esta manera se puede cifrar y descifrar cualquier texto de forma muy sencilla. Con

este ejemplo hemos podido ver los siguientes elementos dentro del cifrado:

1. El algoritmo empleado, en este caso “sumar”.

2. La clave utilizada, en este caso “2″. Si la clave fuese “5″, habría que sumar 5 para

cifrar y restar 5 para descifrar, por ejemplo.

3. El texto original.

4. El texto cifrado. texto original ---> algoritmo de cifrado ---> texto cifrado

clave

Esto era empleado por Julio César para enviar mensajes cifrados. Tiene el problema de que en

el otro lugar hacia donde se enviaba el mensaje, también necesitaban saber la clave con la que

ha sido cifrado para poder descifrarlo. Esto se resolvió utilizando pergaminos enrollados sobre

una vara de madera de diferente longitud. En función de esa longitud, el receptor del mensaje

ya sabía cuál había sido la clave empleada. Por ejemplo:

Longitud de la vara Clave

10 cm 1

11 cm 2

12 cm 3

13 cm 4

...

1. INTRODUCCIÓN

Page 3: algoritmos AES

Este truco sirvió en su momento, pero es bastante peligroso, porque cualquiera que se

diese cuenta de ello, podría descifrar todos los mensajes.

Ahí reside el problema fundamental de esta clase de algoritmos, necesitan que tanto el

emisor del mensaje como el receptor conozcan la clave que se ha utilizado. Por esto

mismo se los conoce como algoritmos simétricos o de “secreto compartido” (el secreto

es la clave utilizada).

La seguridad total no existe sin embargo podemos mejorar la seguridad de nuestros

ordenadores, archivos y datos fácilmente, sin mucho esfuerzo y aplicando algún

algoritmo simétrico o asimétrico.

Para demostración didáctica se ha creído conveniente aplicar AES que es mucho más

seguro que su predecesor DES, además es uno de los algoritmos más populares usados en

criptografía simétrica, fue adoptado como un estándar de cifrado por el gobierno de los

Estados Unidos y fue anunciado como el mejor por el Instituto Nacional de Estándares y

Tecnología (NIST) como FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de

noviembre de 2001 después de un proceso de estandarización que duró 5 años, AES es

rápido tanto en software como en hardware, es relativamente fácil de implementar, y

requiere poca memoria. Todo lo antes mencionado despertó nuestra curiosidad y nos

motivo para llevar a cabo la implementación del mismo

Page 4: algoritmos AES

CRIPTOSISTEMAS SIMÉTRICOS

Son aquellos donde existe una clave (secreta) que deben compartir emisor y receptor.

Con la misma clave se cifra y se descifra, la seguridad reside en mantener la clave en

secreto.

ALGORITMOS DE CIFRADO SIMÉTRICO

Dentro de estos algoritmos distinguimos dos tipos de algoritmos en función de la

cantidad de datos de entrada que manejan a la vez: algoritmos de cifrado por bloques y

algoritmos de cifrado de flujo.

Cifrado por bloques

Los algoritmos de cifrado por bloques toman bloques de tamaño fijo del texto en claro y

producen un bloque de tamaño fijo de texto cifrado, generalmente del mismo tamaño que

la entrada. El tamaño del bloque debe ser lo suficientemente grande como para evitar

ataques de texto cifrado. La asignación de bloques de entrada a bloques de salida debe

ser uno a uno para hacer el proceso reversible y parecer aleatoria.

Para la asignación de bloques los algoritmos de cifrado simétrico realizan sustituciones y

permutaciones en el texto en claro hasta obtener el texto cifrado.

2. MARCO

REFERENCIAL

Page 5: algoritmos AES

La sustitución es el reemplazo de un valor de entrada por otro de los posibles valores de

salida, en general, si usamos un tamaño de bloque k, el bloque de entrada puede ser

sustituido por cualquiera de los 2k bloques posibles.

La permutación es un tipo especial de sustitución en el que los bits de un bloque de

entrada son reordenados para producir el bloque cifrado, de este modo se preservan las

estadísticas del bloque de entrada (el número de unos y ceros).

Los algoritmos de cifrado por bloques iterativos funcionan aplicando en sucesivas

rotaciones una transformación (función de rotación) a un bloque de texto en claro. La

misma función es aplicada a los datos usando una subclave obtenida de la clave secreta

proporcionada por el usuario. El número de rotaciones en un algoritmo de cifrado por

bloques iterativo depende del nivel de seguridad deseado.

Un tipo especial de algoritmos de cifrado por bloques iterativos son los denominados

algoritmos de cifrado de Feistel. En estos algoritmos el texto cifrado se obtiene del

texto en claro aplicando repetidamente la misma transformación o función de rotación.

El funcionamiento es como sigue: el texto a encriptar se divide en dos mitades, la

función de rotación se aplica a una mitad usando una subclave y la salida de la función se

emplea para hacer una o-exclusiva con la otra mitad, entonces se intercambian las

mitades y se repite la misma operación hasta la última rotación, en la que no hay

intercambio.

Una característica interesante de estos algoritmos es que la encriptación y

desencriptación son idénticas estructuralmente, aunque las subclaves empleadas en la

encriptación se toman en orden inverso en la desencriptación.

Para aplicar un algoritmo por bloques es necesario descomponer el texto de entrada en

bloques de tamaño fijo. Esto se puede hacer de varias maneras:

1. ECB (Electronic Code Book). Se parte el mensaje en bloques de k bits, rellenando el

ultimo si es necesario y se encripta cada bloque. Para desencriptar se trocea el texto

cifrado en bloques de k bits y se desencripta cada bloque. Este sistema es vulnerable

a ataques ya que dos bloques idénticos de la entrada generan el mismo bloque de

salida. En la práctica no se utiliza.

2. CBC (Cipher Block Chaining). Este método soluciona el problema del ECB haciendo

una o-exclusiva de cada bloque de texto en claro con el bloque anterior cifrado antes

de encriptar. Para el primer bloque se usa un vector de inicialización. Este es uno de

los esquemas más empleados en la práctica.

3. OFB (Output Feedback Mode). Este sistema emplea la clave de la sesión para crear

un bloque pseudoaleatorio grande (pad) que se aplica en o-exclusiva al texto en claro

para generar el texto cifrado. Este método tiene la ventaja de que el pad puede ser

generado independientemente del texto en claro, lo que incrementa la velocidad de

encriptación y desencriptación.

Page 6: algoritmos AES

4. CFB (Cipher Feedback Mode). Variante del método anterior para mensajes muy

largos.

Cifrado de flujo de datos

Generalmente operan sobre 1 bit (o sobre bytes o palabras de 16 ó 32 bits) de los datos

de entrada cada vez. El algoritmo genera una secuencia (secuencia cifrante o keystream

en inglés) de bits que se emplea como clave. La encriptación se realiza combinando la

secuencia cifrante con el texto en claro.

El paradigma de este tipo de algoritmos es el One Time Pad, que funciona aplicando una

XOR (o-exclusiva) a cada bit de la entrada junto con otro generado aleatoriamente para

obtener cada bit de la salida. La secuencia de bits aleatorios es la clave de la sesión,

secuencia de cifrado o el pad, que es del mismo tamaño que la entrada y la salida. Para

recuperar el texto original el texto cifrado debe pasar por el mismo proceso empleado

para encriptar usando el mismo pad.

Este algoritmo es conocido por ser el único incondicionalmente seguro, aunque, como las

claves son del mismo tamaño que la entrada, es de poca utilidad práctica.

Los algoritmos de este tipo son intentos de conseguir algoritmos prácticos que se

aproximen al funcionamiento del one time pad.

Dentro de los algoritmos de cifrado simétrico tenemos los siguientes:

DES

Triple-DES

AES

RC2

RC4

RC5

IDEA

SAFER

Blowfish

ADVANCED ENCRYPTION STANDARD (AES)

También conocido como Rijndael, es un esquema de cifrado por bloques adoptado como

un estándar de cifrado por el gobierno de los Estados Unidos. Se espera que sea usado

en el mundo entero y analizado exhaustivamente, como fue el caso de su predecesor, el

Data Encryption Standard (DES).

El AES fue anunciado por el Instituto Nacional de Estándares y Tecnología (NIST) como

FIPS PUB 197 de los Estados Unidos (FIPS 197) el 26 de noviembre de 2001 después de

un proceso de estandarización que duró 5 años (véase proceso de Advanced Encryption

Standard para más detalles). Se transformó en un estándar efectivo el 26 de mayo de

2002. Desde 2006, el AES es uno de los algoritmos más populares usados en

criptografía simétrica.

Page 7: algoritmos AES

El cifrador fue desarrollado por dos criptólogos belgas, Joan Daemen y Vincent Rijmen,

ambos estudiantes de la Katholieke Universiteit Leuven, y enviado al proceso de

selección AES bajo el nombre "Rijndael", un portmanteau empaquetado de los nombres

de los inventores. Rijndael puede ser pronunciado "Raindael", (IPA: [?aindael]).

Rijndael fue un refinamiento de un diseño anterior de Daemen y Rijmen, Square; Square

fue a su vez un desarrollo de Shark.

Al contrario que su predecesor DES, Rijndael es una red de sustitución-permutación, no

una red de Feistel. AES es rápido tanto en software como en hardware, es

relativamente fácil de implementar, y requiere poca memoria. Como nuevo estándar de

cifrado, se está utilizando actualmente a gran escala.

Descripción del cifrado

Estrictamente hablando, AES no es precisamente Rijndael (aunque en la práctica se los

llama de manera indistinta) ya que Rijndael permite un mayor rango de tamaño de

bloques y longitud de claves; AES tiene un tamaño de bloque fijo de 128 bits y tamaños

de llave de 128, 192 ó 256 bits, mientras que Rijndael puede ser especificado por una

clave que sea múltiplo de 32 bits, con un mínimo de 128 bits y un máximo de 256 bits. La

clave se expande usando el esquema de claves de Rijndael. La mayoría de los cálculos del

algoritmo AES se hacen en un campo finito determinado.

AES opera en una matriz de 4×4 bytes, llamada state (algunas versiones de Rijndael con

un tamaño de bloque mayor tienen columnas adicionales en el state). Para el cifrado, cada

ronda de la aplicación del algoritmo AES (excepto la última) consiste en cuatro pasos:

1. SubBytes — en este paso se realiza una sustitución no lineal donde cada byte es

reemplazado con otro de acuerdo a una tabla de búsqueda.

2. ShiftRows — en este paso se realiza una transposición donde cada fila del

«state» es rotada de manera cíclica un número determinado de veces.

3. MixColumns — operación de mezclado que opera en las columnas del «state»,

combinando los cuatro bytes en cada columna usando una transformación lineal.

4. AddRoundKey — cada byte del «state» es combinado con la clave «round»; cada

clave «round» se deriva de la clave de cifrado usando una iteración de la clave.

La ronda final reemplaza la fase MixColumns por otra instancia de AddRoundKey.

Etapa SubBytes- Substitución de bits

En la etapa SubBytes, cada byte en la matriz es actualizado usando la caja-S de Rijndael

de 8 bits. Esta operación provee la no linealidad en el cifrado. La caja-S utilizada

proviene de la función inversa alrededor del GF(28), conocido por tener grandes

propiedades de no linealidad.

Page 8: algoritmos AES

Para evitar ataques basados en simples propiedades algebraicas, la caja-S se construye

por la combinación de la función inversa con una transformación afín inversible. La caja-

S también se elige para evitar puntos estables (y es por lo tanto un derangement), y

también cualesquiera puntos estables opuestos.

En la fase de SubBytes, cada byte en el state es reemplazado con su entrada en una

tabla de búsqueda fija de 8 bits, S; bij = S(aij).

Etapa ShiftRows-Desplazar filas

El paso ShiftRows opera en las filas del state; rota de manera cíclica los bytes en cada

fila por un determinado offset. En AES, la primera fila queda en la misma posición. Cada

byte de la segunda fila es rotado una posición a la izquierda. De manera similar, la

tercera y cuarta filas son rotadas por los offsets de dos y tres respectivamente. De

esta manera, cada columna del state resultante del paso ShiftRows está compuesta por

bytes de cada columna del state inicial. (variantes de Rijndael con mayor tamaño de

bloque tienen offsets distintos).

En el paso ShiftRows, los bytes en cada fila del state son rotados de manera cíclica

hacia la izquierda. El número de lugares que cada byte es rotado difiere para cada fila.

Etapa MixColumns- Mezclar columnas

En el paso MixColumns, los cuatro bytes de cada columna del state se combinan usando

una transformación lineal inversible. La función MixColumns toma cuatro bytes como

entrada y devuelve cuatro bytes, donde cada byte de entrada influye todas las salidas

de cuatro bytes. Junto con ShiftRows, MixColumns implica difusión en el cifrado.

Page 9: algoritmos AES

Cada columna se trata como un polinomio GF(28) y luego se multiplica el módulo x4 + 1

con un polinomio fijo c(x). El paso MixColumns puede verse como una multiplicación

matricial en el campo finito de Rijndael.

En el paso MixColumns, cada columna del state es multiplicada por un polinomio

constante c(x).

Etapa AddRoundKey- Cálculo de las subclaves

En el paso AddRoundKey, la subclave se combina con el state. En cada ronda se obtiene

una subclave de la clave principal, usando la iteración de la clave; cada subclave es del

mismo tamaño del state. La subclave se agrega combinando cada byte del state con el

correspondiente byte de la subclave usando XOR.

En el paso AddRoundKey, cada byte del state se combina con un byte de la subclave

usando la operación XOR .

Optimización del cifrado

En sistemas de 32 bits o de mayor tamaño de palabra, es posible acelerar la ejecución de

este algoritmo mediante la conversión de las transformaciones SubBytes, ShiftRows y

MixColumn en tablas.

Page 10: algoritmos AES

Se tienen cuatro tablas de 256 entradas de 32 bits que utilizan un total de 4 kilobytes

(4096 bytes) de memoria, un Kb cada tabla. De esta manera, una ronda del algoritmo

consiste en 16 búsquedas en una tabla seguida de 16 operaciones XOR de 32 bits en el

paso AddRoundKey. Si el tamaño de 4 kilobytes de la tabla es demasiado grande para una

plataforma determinada, la operación de búsqueda en la tabla se puede realizar

mediante una sola tabla de 256 entradas de 32 bits mediante el uso de rotaciones

circulares.

Seguridad

Hasta Mayo del 2009, no se ha encontrado ningún ataque exitoso contra el AES. La

Agencia de Seguridad Nacional de los Estados Unidos (NSA) revisó todos los finalistas

candidatos al AES, incluyendo el Rijndael, y declaró que todos ellos eran suficientemente

seguros para su empleo en información no clasificada del gobierno de los Estados Unidos.

En junio de 2003, el gobierno de los Estados Unidos anunció que el AES podía ser usado

para información clasificada.

Este hecho marca la primera vez que el público ha tenido acceso a un cifrador aprobado

por la NSA para información super secreta (TOP SECRET). Es interesante notar que

muchos productos públicos usan llaves de 128 bits por defecto; es posible que la NSA

sospeche de una debilidad fundamental en llaves de este tamaño, o simplemente

prefieren tener un margen de seguridad para documentos super secretos (que deberían

conservar la seguridad durante décadas en el futuro).

El método más común de ataque hacia un cifrador por bloques consiste en intentar varios

ataques sobre versiones del cifrador con un número menor de rondas. El AES tiene 10

rondas para llaves de 128 bits, 12 rondas para llaves de 192 bits, y 14 rondas para llaves

de 256 bits. Hasta 2005, los mejores ataques conocidos son sobre versiones reducidas a

7 rondas para llaves de 128 bits, 8 rondas para llaves de 192 bits, y 9 rondas para llaves

de 256 bits (Ferguson et al, 2000).

Algunos criptógrafos muestran preocupación sobre la seguridad del AES. Ellos sienten

que el margen entre el número de rondas especificado en el cifrador y los mejores

ataques conocidos es muy pequeño. El riesgo es que se puede encontrar alguna manera de

mejorar los ataques y de ser así, el cifrado podría ser roto. En el contexto criptográfico

se considera "roto" un algoritmo si existe algún ataque más rápido que una búsqueda

exhaustiva (ataque por fuerza bruta). De modo que un ataque contra el AES de llave de

128 bits que requiera 'sólo' 2120 operaciones sería considerado como un ataque que

"rompe" el AES aun tomando en cuenta que por ahora sería un ataque irrealizable. Hasta

el momento, tales preocupaciones pueden ser ignoradas. El ataque de fuerza bruta más

largamente publicitado y conocido ha sido contra una clave de 64 bits RC5 por

distributed.net.

Page 11: algoritmos AES

Pseudocódigo AES

Expansión de la clave usando el esquema de claves de Rijndael.

Etapa inicial:

1. AddRoundKey

Rondas:

1. SubBytes — en este paso se realiza una sustitución no lineal donde cada byte

es reemplazado con otro de acuerdo a una tabla de búsqueda.

2. ShiftRows — en este paso se realiza una transposición donde cada fila del

«state» es rotada de manera cíclica un número determinado de veces.

3. MixColumns — operación de mezclado que opera en las columnas del «state»,

combinando los cuatro bytes en cada columna usando una transformación

lineal.

4. AddRoundKey — cada byte del «state» es combinado con la clave «round»;

cada clave «round» se deriva de la clave de cifrado usando una iteración de la

clave.

Etapa final:

1. SubBytes

2. ShiftRows

3. AddRoundKey

3. DESCRIPCIÓN DE LA

SOLUCIÓN

Page 12: algoritmos AES

Prototipado:

Al iniciar el programa se presenta la siguiente ventana:

Fig. 1.

Luego aparece la ventana ( Fig. 2. ) Para encriptar el texto primero se lo escribe como en

el siguiente ejemplo:

Fig. 2.

Page 13: algoritmos AES

Luego se escribe la contraseña de 16 caracteres como mínimo para que sea bien segura,

se presiona el botón encriptar y en la parte inferíor aparecerá el texto cifrado:

Fig. 3.

Para descifrar se escribe el texto cifrado como en el siguiente ejemplo:

Fig. 4.

Page 14: algoritmos AES

Luego se escribe la contraseña se presiona el botón desencriptar y en la parte inferíor

aparecerá el texto descifrado:

Fig. 5.

Si se selecciona el menú Ayuda aparecerá Acerca de.., donde se señala el nombre de los

desarrolladores.

Fig. 6.

Page 15: algoritmos AES

Se utilizo el lenguaje de programación Java y el IDE NetBeans.

La forma segura de mantener la información es mediante el cifrado, pero se debe

escoger el algoritmo adecuado ya que es de nuestro conocimiento que algunas

personas pueden infringir los mismos (hackers), inclusive existen programas para

romper la seguridad y ver la información.

El algoritmo AES es uno de los más seguros ya que hasta Mayo del 2009, no se ha

logrado quebrantarlo.

Para trabajos futuros trabajos, se recomienda implementarlo en un lenguaje diferente.

GARAIZAR Pablo, Manual de supervivencia en Internet (I): Cifrar el correo

electrónico, [en línea], véase en: http://blog.txipinet.com/2006/08/08/16-

manual-de-supervivencia-en-internet-i-cifrar-el-correo-electronico/ [Fecha de

consulta: 2010-12-16]

ANF AC , Algoritmos de Cifrado Simétrico, [en línea], véase en:

http://www.anf.es/anf/doc/sime.doc, [Fecha de consulta: 2010-12-16]

Evolsystem Community Tecnology Preview, AES Rijndael [en línea], véase en:

http://aes.evolsystem.cl/default.aspx, [Fecha de consulta: 2010-12-16]

4. HERRAMIENTAS

INFORMÁTICAS

5. CONCLUSIONES

6. WEBGRAFÍA