martes, 6 de noviembre de 2012

DISEÑO DE UN ALGORITMO DE CRIPTOGRAFÍA SIMÉTRICA

DISEÑO DE UN ALGORITMO DE CRIPTOGRAFÍA SIMÉTRICA

INTRODUCCIÓN

La criptografía simétrica, también llamada criptografía de clave secreta  o criptografía de una clave, es un método criptográfico en el cual se usa una misma clave para cifrar y descifrar mensajes. Las dos partes que se comunican han de ponerse de acuerdo de antemano sobre la clave a usar. Una vez que ambas partes tienen acceso a esta clave, el remitente cifra un mensaje usando la clave, lo envía al destinatario, y éste lo descifra con la misma clave.

Los principales algoritmos basados en este método son: 
DES
AES
IDEA
BLOWFISH
TWOFISH
RC5

A continuación se presenta una tabla comparativa entre cada algoritmo, donde se logra apreciar las fortalezas y vulnerabilidades de cada uno.


PROTOCOLO
FORTALEZAS
VULNERABILIDADES
CAPACIDAD Y TIEMPO DE PROCESAMIENTO
REQUERIMIENTOS (FISICOS / LÓGICOS) PARA SU PROCESAMIENTO
DES
·          Algoritmo simétrico
·         Codifica bloques de 64 bits.
·         Consta de 16 rondas
·         Para descifrar  basta con usar le mismo algoritmo en orden inverso
·         Es muy rápido y fácil de implementar
·  Emplea una clave demasiado corta, lo cual hace que el avance actual de las computadoras los ataques con fuerza bruta se puedan llevar a acabo.
·  Tamaño de bloque pequeño.
·  43 Clocks/Byte
·       Lo mínimo que se puede usar para su implementación es una FPSLIC (Field Programmable System Level Integrated Circuit) Este dispositivo se basa en su familia de FPGAs AT40K a la que ha añadido un microprocesador RISC AVR de 8 bits y 20 MIPS (Mega Instruction perSecond) además de una memoria de programa de 36Kbytes.
AES
·         Cifrado por bloques
·         Soporta bloques y longitud de claves variables entre 128 a 256 bits
·         Combina la seguridad-eficiencia-velocidad, sencillez y flexibilidad
·  Este algoritmo reduce la longitud de la llave efectiva del algoritmo en 2 bits. Esto significa que las longitudes de las llaves de 128, 192 y 256 son reducidas a 126, 190 y 254. Pero quienes descubrieron esto dicen que no hay relevancia practica para este algoritmo 
·  Velocidad de Cifrado: 70.7 Mb/s
·  Velocidad de Descifrado: 71.5 Mb/s
·       Para su buen funcionamiento necesita trabajar en plataformas de 32 bits y procesadores de 8 bits
IDEA
·      El espacio de claves es mucho más grande: 2128 ≈ 3.4 x 1038
·      Todas las operaciones son algebraicas.
·      No hay operaciones a nivel bit, facilitando su programación en alto nivel.
·      Es más eficiente que los algoritmos de tipo Feistel, porque a cada vuelta se modifican todos los bits de bloque y no solamente la mitad.
·     Se pueden utilizar todos los modos de operación definidos para el DES
·      Han sometido al algoritmo IDEA a técnicas de criptoanálisis sin encontrar hasta el momento debilidad alguna en el algoritmo.
·   Ofrece una velocidad de cifrado de unos 880 Kbps, y en un VAX 9000 de unas cuatro veces más.
·       En un procesador Intel 386 a 33 Mhz
BLOWFISH
·   Tiene una estructura sencilla lo que lo hace fácil de utilizar.
·   Variables seguras, la longitud de la clave es variable y puede ser hasta de 448 bits, lo que permite negociar entre trabajar a alta velocidad y una alta seguridad.
·   Utiliza claves que van desde 32 hasta 448 bits.
· Existe una clase de llaves que pueden ser detectadas en 14 rondas o menos pero no rotas por el algoritmo Blowfish.
·  19.8 clocks / byte
·   Puede ejecutarse en menos de 5K de memoria.
·   Se necesita un total de 521 ejecuciones del algoritmo de cifrado Blowfish para producir las subclaves y las cajas S.
TWOFISH
·    Un sistema de cifrado 128-bit bloque simétrico.
·    Longitudes de clave de 128 bits, 192 bits y 256 bits.
·    No hay claves débiles.
·    Eficiencia, tanto en el Intel Pentium Pro y
·    otros programas y plataformas de hardware.
·    Diseño flexible, acepta llaves de longitud variable.
·    Alicable en una amplia variedad
·    de plataformas y aplicaciones, y Adecuado para un cifrado de flujo, la función hash y MAC.
·    Diseño sencillo, tanto para facilitar su análisis y facilidad de implementación.
·    Llave-horario relativamente compleja.
·  Hasta el momento no se han encontrado vulnerabilidades.
·  18.1 clocks / byte
·     Puede ser implementado en un micro de 8 bits con 64 bytes de RAM.
·     Antes de ejecutar el algoritmo, precomputar los valores de las tablas S-box.
·      
RC5
·         El número variable de iteraciones son vueltas r(0,1,2,...255) es otro de los parámetros que considera RC5.
·         La clave de longitud variable es una clave k (en octetos que van desde 1 hasta 255), y que da también la oportunidad de moverse entre alta velocidad y alta seguridad.
·         Su estructura permite que sea fácilmente implementado y de igual manera da la oportunidad de evaluar y determinar la con facilidad la robustez del algoritmo.
·         Proporciona alta seguridad la cual puede oscilar dependiendo de la selección de parámetros, de manera que eligiendo los adecuados, la seguridad será sumamente elevada.
·         Se incorporan rotaciones circulares de bits las cuales dependen de los datos introducidos, esto hace que RC5 sea más robusto aún, por consiguiente, que sea prácticamente irrompible para cualquier criptoanalista.
·         RC5 12-vueltas (con bloques de 64 bits) está sujeto a un ataque diferencial usando 244 textos escogidos (Biryukov y Kushilevitz, 1998)
·         Ya que el algoritmo tiene tres parámetros variables, el tiempo de procesamiento también lo es de acuerdo a lo complejo de los parámetros.

·         Ejemplo: Para una clave de 128: Velocidad de Cifrado 243 Mb/s
·         Adecuado para ser implementado en hardware o software, ya que utiliza computación básica y operaciones que comúnmente se encuentran en microprocesadores.
·         Sus requerimientos de mínimo espacio de memoria hacen que sean un algoritmo apropiado para su uso en tarjetas.
·         Adaptable a procesadores de diferentes tamaños de palabra ya que uno de los parámetros que utiliza es el tamaño de la palabra w (16,32 o 64 bits).
CCMP
[no es un algoritmo, es una implementación]
·         Se remplazó el vector de inicialización por un campo “Número de paquete” y se duplicó su tamaño a 48 bits.
·         El cálculo de suma de comprobación cifrado con WEP se remplazó por el algoritmo AES CBC-MAC, que está diseñado para proporcionar una sólida integridad de los datos.
·          El algoritmo CBC-MAC calcula un valor de 128 bits y WPA2 utiliza los 64 bits de orden superior como un código de integridad de mensaje (MIC).
·         Cifra el MIC con el cifrado de modo contador de AES.
·         Usa un conjunto de claves temporales derivadas de una clave principal y otros valores. La clave principal se origina en el proceso de autenticación 802.1X mediante Protocolo de autenticación extensible-Seguridad de la capa de transporte (EAP-TLS) o EAP protegido (PEAP).
·         Reasigna claves automáticamente para crear nuevos conjuntos de claves temporales.
·         Usa el campo Número de paquete como contador para ofrecer protección contra la reproducción.
·         Aunque se han descubierto algunas pequeñas debilidades en WPA/ WPA2, ningu­na de ellas es peligrosa si se siguen recomendaciones mínimas  de seguridad.
·         La vulnerabilidad más práctica es el ataque contra la clave PSK de WPA/WPA2.
·         Velocidad de Cifrado 1537.9.7 Mb/s
·         Velocidad de Descifrado 1519.9 Mb/s
·         Plataforma: PPro 200 MHz
·         Lenguaje: C
·         Longitud de clave: 128



OBJETIVO 
Diseñar e implementar un algoritmo de cifrado simétrico propio, utilizando las fortalezas de los algoritmos vistos en clase para conformar un algoritmo mucho más robusto, capaz de soportar las vulnerabilidades ya conocidas para AES, DES, IDEA, BLOWFISH y TWOFISH.

ANÁLISIS


El algoritmo que proponemos llamado madDog basa su funcionalidad en AES, ya que consideramos que es un algoritmo suficientemente robusto que puede incrementar su robustez añadiendo características específicas de TwoFish y Blowfish; otros dos algoritmos que hasta el momento han demostrado su fortaleza ante ataques.

Para su mayor entendimiento, hemos dividido nuestro algoritmo en bloques, mismos que serán descritos a continuación.


CIFRADO

Bloque Whitenning
Unas de las vulnerabilidades de AES es el manejo en claro tanto de la llave como del mensaje a cifrar, por lo que madDog  propone aplicar una transformación a cada elemento, llave y mensaje.
Lllave (K):
1.        Empleando las tablas P de Blowfish, se realiza la siguiente operación:     K XOR P
2.       El resultado obtenido formará la Matriz Round Key.
Mensaje en Claro (Mcla):
1.        Empleando las tablas Sbox de Blowfish y Twofish, se aplica la siguiente operación:
2.       Se divide el mensaje en claro en grupos de 32 bits.
3.       Cada byte se sustituye por su valor correspondiente en las tablas S-box, tomando en cuenta que cada byte utilizará una tabla S-box distinta.
4.      Después de haber expandido el mensaje, en grupos de 64 bits, se realizarán operaciones de SUMA-XOR-SUMA, en ese orden, con el objetivo de reducir los 64 bits a 16 bits.
5.       El resultado obtenido formará la Matriz de inicio de ronda.
Bloque Matriz Inicio de Ronda.
Para obtener la Matriz de Inicio de ronda o matriz de entrada se realiza la siguiente operación:
1.        Matriz de inicio de ronda del bloque whitening  XOR Matriz Round Key del bloque whitening.
2.       Se transpone la matriz obtenida.
Nota: Esta operación aplica a partir de la primera ronda.
Bloque Matriz SubBytes.
Los valores se obtienen con ayuda de una matriz establecida para AES

Bloque Matriz ShiftColumns
A diferencia del algoritmo de AES, en madDog  el corrimiento se realiza por columnas, siguiendo la siguiente regla:


Columna
Corrimientos por columna
0
0
1
1
2
2
3
3

Bloque MixClumns
Respetando el algoritmo de AES, esta matriz se obtiene de realizar la siguiente operación:
Matriz fija de AES  X Matriz ShiftColumns
Bloque Matriz Round Key
Al igual que en el bloque anterior, para el cálculo de esta matriz se respeta el cálculo que realiza el algoritmo AES.



DESCIFRADO
El proceso para descifrar es exactamente igual para cifrar, únicamente se invierte el orden de las claves, comenzando con la última usada para cifrar.



Enlaces de descarga

Ejecutable de Java: {Pendiente}

Documentacion del programa: https://www.dropbox.com/sh/wo6aek53yy9ucui/qFKkMdzEwu

https://www.dropbox.com/s/sarb2l1kj9jdxp1/build.xml

No hay comentarios:

Publicar un comentario