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

domingo, 14 de octubre de 2012

Bienvenidos


INTRODUCCIÓN


La criptología (del griego krypto y logos, significa el estudio de lo oculto, lo escondido) es la ciencia que trata los problemas teóricos relacionados con la seguridad en el intercambio de mensajes en clave entre un emisor y un receptor a través de un canal de comunicaciones (en términos informáticos, ese canal suele ser una red de computadoras).

Esta ciencia está dividida en dos grandes ramas: la criptografía, ocupada del cifrado de mensajes en clave y del diseño de criptosistemas, y el  criptoanálisis, que trata de descifrar los mensajes en clave, rompiendo así el criptosistema.

La criptografía es la disciplina que se encarga del estudio de códigos secretos o llamados también códigos cifrados (en griego kriptos significa secreto y gráhos, escritura).

La criptografía es una disciplina muy antigua, sus orígenes se remontan al nacimiento de nuestra civilización. En origen, su único objetivo era el proteger la confidencialidad de informaciones militares y políticas. Sin embargo, en la actualidad es una ciencia interesante no sólo en esos campos, sino para cualquier otro que esté interesado en la confidencialidad de unos determinados datos.

Aunque el objetivo original de la criptografía era mantener en secreto un mensaje, en la actualidad no se persigue únicamente la privacidad o confidencialidad de los datos, sino que se busca además garantizar la autenticación de los mismos (el emisor del mensaje es quien dice ser, y no otro), su integridad (el mensaje que leemos es el mismo que nos enviaron) y su no repudio (el emisor no puede negar el haber enviado el mensaje).

Existen dos grandes grupos de criptosistemas: los algoritmos que utilizan una única clave tanto en el proceso de cifrado como en el de descifrado y los que utilizan una clave para cifrar mensajes y una clave distinta para descifrarlos. Los primeros se denominan sistemas simétricos o de clave simétrica y son la base de los algoritmos de cifrado clásico. Los segundos se denominan sistemas asimétricos, de clave asimétrica o de clave pública y clave privada y forman el núcleo de las técnicas de cifrado modernas.

Con frecuencia los procesos de cifrado y descifrado se encuentran en la literatura como encriptado y desencriptado, aunque ambos son neologismos -anglicismos de los términos ingleses encrypt y decrypt- todavía sin reconocimiento académico. Hay quien hace distinción entre "cifrado/descifrado" y "encriptado / desencriptado" según esté hablando de criptografía simétrica o asimétrica, pero la mayoría de los expertos en el mundo académico prefiere evitar ambos neologismos. Por otro lado, podríamos haber de cifrado y descifrado como acciones legales o correctas, mientras la palabra desencriptado podemos entenderla como una acción no autorizada, propia de un cripto-analista.

OBJETIVO


El objetivo del presente documento consiste en reforzar la importancia de la Criptografía en la época actual, debido a que actualmente la información  tiene un alto costo de importancia tanto para empresas, académicos, estudiantes, etc. 

Con el presente proyecto se pretende recapitular los algoritmos más representativos de la criptografía clásica, realizando la implementación correspondiente en el lenguaje de programación que mejor se adapte a los requerimientos del mismo algoritmo, para de esta manera entender el funcionamiento técnico de los algoritmos de la criptografía clásica.

Para su mejor presentación se enlazará a las entradas de cada uno de los algoritmos.

·         TRANSPOSICIÓN (Inversa y Simple): http://cripto-fi.blogspot.mx/2012/10/algoritmo-de-transposicion.html

¿Quienes somos?


Somos un grupo de estudiantes de la Facultad de Ingeniería desarrollando un proyecto de clase, sin afanes de lucro. Atte:


Alejo Sandoval Lourdes Angélica
   Jaimes Salinas Gregorio
   Mejía Barrera Julio César
   Trejo Sánchez Pedro Arturo   

Algoritmo de transposición

ANÁLISIS

Ø  TRANSPOSICIÓN (Inversa y Simple)


Se implementarán 2 diferentes métodos de transposición, estos métodos son Inverso y Simple.
Inverso.
A.     Cifrar.
1.       Leer el texto que se desea cifrar.
2.       Declarar un arreglo que contenga el mensaje en claro.
3.      Almacenar cada caracter en una casilla del arreglo declarado.
4.      Recorer  el arreglo declarado comenzando en la última posición, hacia el inicio.
5.      Mostrar cripto.
B.      Descifrar.
1.       Leer el cripto que se desea descifrar.
2.       Declarar un arreglo que contenga el cripto.
3.      Almacenar cada carácter en una casilla del arreglo declarado.
4.      Recorrer el arreglo declarado comenzando en a última posición, hacia el inicio.
5.      Mostrar mensaje en claro.
Simple.
A.      Cifrar.
1.        Leer el texto que se desea cifrar.
2.       Almacenar  en un arreglo el mensaje en claro.
3.       Leer el número de registros donde se almacenará el texto.
4.      Almacenar el número de registros.
5.       Dividir el tamaño del mensaje en claro entre el número de registros.
6.      Validar que el residuo sea un número exacto, de lo contrario se procede a rellenar con X
7.       Recorrer el mensaje en claro carácter por caracter, almacenando cara carácter en cada registro[i++].
8.      Concatenar los registros.
9.      Mostrar cripto.
B.      Descifrar.
1.        Leer el texto que se desea descifrar.
2.       Leer el número de registros.
3.       Dividir la longitud del cripto entre el número de registros.
4.      Obtener  substring del tamaño obtenido en el paso anterior.
5.       Concatenar en una nueva cadena, las posiciones de los substrings obtenidos en el paso anterior.
6.      Mostrar mensaje en claro.


Diagrama de flujo




DIAGRAMA DE CLASES EMPLEADAS


cifradoTransposicion

Inverso


star : cifradoTransposicion
main (args: String[] ) : void
Empieza ():void
subMenú ( metodo : int ) : void

cifradoBegin () : void
cifrarMsjClaro ( textoClaro: String) : void
descifradoBegin () : void
descifrarCripto ( cripto : String ) : void

Simple
star : cifradoTransposicion
cifradoBegin () : void
cifradoSimple ( msjClaro : String, numRegistros : int) : void
descifradoBegin () : void
descifradoSimple (cripto : String , numRegistros : int ) : void
rellenarMensaje ( texto : String , numRegistros : int ) : void


Desarrollo


Para la ejecución del algoritmo de  Transposición es necesario tener instalado el jdk y estos serán ejecutables. Se anexa el enlace de descarga correspondiente.

Algoritmo de Transposición: https://www.dropbox.com/s/uy2j1ljl7y4962e/cifradoTransposicion.jar