Universidad Nacional Autónoma de México
Facultad de Ingeniera Criptografía
Proyecto
“IDEA”
Profesora: M. en C. Ma. Ma. Jaqueline López Barrientos Barrientos
Integrantes: Badillo Torres Verónica Gallardo Hernández Luis Enrique Hernández Sánchez Leticia Mendoza Varela Jeanette Rocio Pacheco Aguilar Jose Jaime
Grupo 1 26 de de Mayo Mayo del 2009 2009
ALGORITMO IDEA (Algoritmo Internacional de Cifrado de Datos) IDEA-International Data Encryption Algorithm (Algoritmo Internacional de Cifrado de Datos) es un cifrador por bloques diseñado por Xuejia Lai y James L. Massey de la Escuela Politécnica Federal de Zúrich y descrito por primera vez en 1991. Algoritmo propuesto como reemplazo del DES (Data Encryption Standard). IDEA fue una revisión menor de PES-Proposed Encryption Standard (Estándar de Cifrado Propuesto), un algoritmo de cifrado anterior. Originalmente IDEA había sido llamado IPES -Improved PES (PES Mejorado). IDEA fue diseñado en contrato con la Fundación Hasler, la cual se hizo parte de Ascom-Tech AG. IDEA es libre para uso no comercial, aunque fue patentado y sus patentes se vencerán en 2010 y 2011. El nombre "IDEA" es una marca registrada y está licenciado mundialmente por MediaCrypt. En IDEA, tanto los datos en claro como los datos cifrados están compuestos por bloques de 64 bits, mientras que la clave consta de 128 bits. El cifrado se basa en el concepto de mezclar operaciones aritméticas de grupos algebraicos diferentes. El algoritmo consiste en ocho vueltas de cifrado idénticas seguidas de una transformación de salida. Aunque los métodos de criptoanálisis han mejorado, éste es uno de los mejores y más seguros algoritmos de cifrado de bloque Es un algoritmo muy seguro, nunca ha sido roto. Hace uso de aritmética en cuerpos finitos, adelantándose a los algoritmos más actuales.
HISTORIA •
•
1990: Xuejia Lai y James Massey (Swiss Federal Institute of Technology) proponen el PES (Proposed Encryption Standard). 1991: los avances en el criptoanálisis diferencial hacen necesario introducir mejoras y lo modifican creando el IPES (Improved Proposed Encryption Standard).
1992: los autores incluyen nuevas mejoras y proponen finalmente el algoritmo IDEA (International Data Encryption Algorithm). 1999: el algoritmo IDEA demuestra ser mucho más seguro que DES y sus derivados y se comienza a usar en el sistema PGP,lo que hizo que tuviera muchos usuarios
•
•
CARACTERÍSTICAS: Es uno de los cifrados en bloque más seguros que existen. Usa bloques de 64 bits y claves de 128 bits. Realiza 8 transformaciones idénticas (cada una llamada un ronda) y una transformación de salida (llamada media ronda). El proceso para cifrar y descifrar es similar. Gran parte de la seguridad de IDEA deriva de la mezcla de operaciones de distintos grupos que no conmutan entre ellas: XOR, suma módulo2 y producto módulo 2 16+1.
• • •
• •
SEGURIDAD: •
•
•
•
IDEA ha resultado inmune ante un criptoanálisis diferencial (sus autores conocían esta debilidad de DES) y a los criptoanálisis lineales. Joan Daemen descubrió en 1992 una clase de claves débiles, las que responden al esquema 0000 0000 0*00 0000 0000 000* **** *000 que un atacante podría identificar en un ataque con texto en claro elegido (las posiciones * pueden ser cualquier dígito hexadecimal). La probabilidad de que se usen esas claves débiles es 2 -96 y además se pueden eliminar en el diseño. Actualmente no se conoce todavía ningún ataque contra IDEA que haya tenido éxito
MULTIPLICACIÓN MÓDULO 216+1 Antes de presentar este algoritmo deben decirse algunas palabras con respecto a la aritmética módulo 2 16+1. Que el producto de dos números a y b sea r módulo 2 16+1 significa que: p = a × b = r + k×(2 16+1) 16
2 +1
con k y r naturales tal que 0 £ r <
Esto significa que el verdadero resultado es el resto (r) resultante de la división entera de p entre 216+1. Por lo tanto cada producto se transforma en una multiplicación y una división entera. Dado que esta operación es central en el algoritmo de encriptado la pregunta que se plantea es como hacer esto en pocas instrucciones. Lo que sigue fue inspirado mientras se trabajaba con el 56811 que tiene largo de palabra de 16 bits. Imagine por un momento que se está trabajando con palabras de 16 bits. Si se realiza el producto a×b sobre el registro A del acumulador se tiene lo siguiente: p = a × b = r + k×(2 16+1) = r + k + k×2 16 De este resultado se quiere recuperar el valor de r. Se observa que el número k al estar multiplicado por 2 16 está corrida 16 bits hacia la izquierda, por lo que se encuentra almacenado enteramente en A1. Por lo que para obtener r sólo es necesario restar el número en A1 del número en A0. A0= k + r A1= k Þ A0 - A1 = k Esto no es siempre tan sencillo pues podría suceder que la suma k + r que se supone que está almacenada en A0 sea mayor que 2 16, caso en el cual se tendría acarreo de un bit al registro A1. Es este caso el esquema recién presentado falla. Mirando esta situación un poco más a fondo, se observa lo siguiente: A0= k + r-216 A1= k + 1 Al hacer la resta tenemos A0-A1 = k+ r -2 16-(k+1) = r - (216+1). Esto es claramente un número negativo. Para obtener r, sumamos 2 16+1 al número anterior, contenido en el acumulador. Cuando se empieza a trabajar con un largo de palabra de 24 bits, el problema se resuelve de la misma manera (aunque la solución pierde su elegancia). Después de realizar la multiplicación, los bits entre el 31 y el 16 se separan y se colocan en un registro aparte (alineados a la derecha) y se realiza un algoritmo completamente análogo al recién descrito. Para lograrlo se deben realizar corrimientos y aplicar máscaras en varias
oportunidades lo que hace que la operación sea más larga y engorrosa que con una arquitectura de 16 bits.
IMPLEMENTACIÓN DEL IDEA. Durante el proceso de cifrado se utilizan operaciones de tres grupos aritméticos diferentes sobre pares de sub-bloques de 16 bits: Grupo multiplicativo en Z 2^16+1 (⊗) • Multiplicación módulo 2 16+1 Grupo aditivo en Z 2^16 (+) • Suma módulo 216 Grupo aditivo en Z2, de las 16-uplas, bit a bit (⊗) • Xor Estas operaciones son invertibles en sí mismas, pero incompatibles entre sí → no gozan de la ley distributiva ni asociativa, no forman grupo y la sucesión de ellas no puede darlugar a cancelación de operaciones. Los 64 bits del bloque de datos se divide en 4 sub-bloques de 16. En cada vuelta el bloque de datos de entrada X es dividido en 4 subbloques de 16 bits (X1, X2, X3, X4). Se realizan 8 vueltas, y cada una emplea una subclave diferente.
En la implementación del algoritmo se deben tener varios puntos en cuenta. Todas las operaciones se hacen con números positivos de 16 bits y el resultado se devuelve en 16 bits. Se adaptó los datos del Codec que vienen alineados sobre el bit 23, para tenerlos alineados al bit 15 y poder realizar las distintas operaciones. Para la suma módulo 2 16 y para el resultado de la multiplicación (modulo 2 16 + 1) se tuvo que hacer un AND con FFFF para hacer el módulo, o sea dejarlo en 16 bits. Se implementó la multiplicación módulo 2 16 + 1, que como se verá no es trivial (Multiplicación módulo 2 16 + 1). Debido a que todas las operaciones trabajan con los acumuladores, surgió el problema de pasar de un número de 24 bits sin signo a uno de 48 bits más signo y viceversa, ya que la extensión de signo de los acumuladores es en a2. El problema en sí es que con los acumuladores se puede representar números más chicos que los que se puede representar con los registros. Este problema se solucionó trabajado con los 24 bits que nos interesaban del acumulador. Para realizar el paralelismo se tuvo que hacer varios cambios, ya que tiene muchas restricciones. Por ejemplo para hacer dos movimientos en paralelo hay que hacerlo de la siguiente manera: la memoria X sobre los registros x0 y x1, y la memoria Y sobre y0 e y1. Además las operaciones deben hacerse siempre sobre los acumuladores, lo que en conjunto limitó la optimización. Otras restricciones fueron que no se puede mover de la memoria direccionando con corrimientos absolutos, o sea x:(r4+4), y que no se puede realizar pre-incrementos de los registros de direccionamiento. Por estas razones se guardaron las claves en la memoria Y y los datos a encriptar en la memoria X, y se utilizaron los incrementos y decrementos unitarios.
GENERACIÓN DE LAS SUBCLAVES.
Dividiendo la clave de 128 bits se obtienen las primeras 8 subclaves de 16 bits, K(1) a K(8). Las siguientes subclaves se obtienen de la misma forma, después de una rotación circular de 25 lugares a la izquierda. Así sucesivamente hasta la generación de las 52 subclaves de encriptado. En cuanto a la implementación en asembler de este algoritmo de generación de subclaves, puede decirse que no presenta grandes complicaciones. Por ejemplo, para generar K(9) se toman los 7 bits más bajos de K(2) y los 9 bits más altos de K(3).
GRÁFICAMENTE:
Proceso detallado de obtención de la palabra i:
Mesografia http://www.lci.ulsa.mx/seguridad/appli/win/Cifrado/IDEA.TXT http://www.geocities.com/jagtez/EstructDatos/PGP5.html http://leebyte.iespana.es/cursos/seguridad/el%20pgp%20explicado%20para %20tontos.doc