International Data Encryption Algorithm (IDEA)

International Data Encryption Algorithm (IDEA)
Información sobre la plantilla
Concepto:Cifrador por bloques diseñado por Xuejia Lai y James L. Massey


En criptografía, International Data Encryption Algorithm o IDEA (del inglés, 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. 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. IDEA fue utilizado como el cifrador simétrico en las primeras versiones de PGP (PGP v2.0) y se lo incorporó luego de que el cifrador original usado en la v1.0 ("Bass-O-Matic") se demostró insegura. Es un algoritmo opcional en OpenPGP.

El algoritmo IDEA

El algoritmo IDEA (International Data Encryption Algorithm) es bastante mas joven que DES, pues data de 1992. Para muchos constituye el mejor y mas seguro algoritmo simetrico disponible en la actualidad. Trabaja con bloques de 64 bits de longitud y emplea una clave de 128 bits. Como en el caso de DES, se usa el mismo algoritmo tanto para cifrar como para descifrar.

IDEA es un algoritmo bastante seguro, y hasta ahora se ha mostrado resistente a multitud de ataques, entre ellos el criptoanalisis diferencial. No presenta claves debiles, y su longitud de clave hace imposible en la practica un ataque por la fuerza bruta. Como ocurre con todos los algoritmos sim_etricos de cifrado por bloques, IDEA se basa en los conceptos de confusion y difusion, haciendo uso de las siguientes operaciones elementales (todas ellas faciles de implementar):

  • XOR.
  • Suma modulo 2 (base 16)
  • Producto modulo 2 (base 16) + 1

El algoritmo IDEA consta de ocho rondas. Dividiremos el bloque X a codicar, de 64 bits, en cuatro partes X1, X2, X3 y X4 de 16 bits. Denominaremos Zi a cada una de las 52 subclaves de 16 bits que vamos a necesitar. Las operaciones que llevaremos a cabo en cada ronda son las siguientes:

  • 1. Multiplicar X1 por Z1.
  • 2. Sumar X2 con Z2.
  • 3. Sumar X3 con Z3.
  • 4. Multiplicar X4 por Z4.
  • 5. Hacer un XOR entre los resultados del paso 1 y el paso 3.
  • 6. Hacer un XOR entre los resultados del paso 2 y el paso 4.
  • 7. Multiplicar el resultado del paso 5 por Z5.
  • 8. Sumar los resultados de los pasos 6 y 7.
  • 9. Multiplicar el resultado del paso 8 por Z6.
  • 10. Sumar los resultados de los pasos 7 y 9.
  • 11. Hacer un XOR entre los resultados de los pasos 1 y 9.
  • 12. Hacer un XOR entre los resultados de los pasos 3 y 9.
  • 13. Hacer un XOR entre los resultados de los pasos 2 y 10.
  • 14. Hacer un XOR entre los resultados de los pasos 4 y 10.

La salida de cada iteracion seran los cuatro sub-bloques obtenidos en los pasos 11, 12, 13 y 14, que seran la entrada del siguiente ciclo, en el que emplearemos las siguientes seis subclaves, hasta un total de 48. Al final de todo intercambiaremos los dos bloques centrales (en realidad con eso deshacemos el intercambio que llevamos a cabo en los pasos 12 y 13). Despues de la octava iteracion, se realiza la siguiente transformacion:

  • 1. Multiplicar X1 por Z49.
  • 2. Sumar X2 con Z50.
  • 3. Sumar X3 con Z51.
  • 4. Multiplicar X4 por Z52.

Las primeras ocho subclaves se calculan dividiendo la clave de entrada en bloques de 16 bits. Las siguientes ocho se calculan rotando la clave de entrada 25 bits a la izquierda y volviendo a dividirla, y asi sucesivamente. Las subclaves necesarias para descifrar se obtienen cambiando de orden las Zi y calculando sus inversas para la suma o la multiplicacion. Puesto que 216 + 1 es un numero primo, nunca podremos obtener cero como producto de dos numeros, por lo que no necesitamos representar dicho valor. Cuando estemos calculando productos, utilizaremos el cero para expresar el numero 216 un uno seguido de 16 ceros. Esta representacion es coherente puesto que los registros que se emplean internamente en el algoritmo poseen unicamente 16 bits.

Modos de Operación para Algoritmos de Cifrado por Bloques

En primer lugar, independientemente del metodo empleado para codicar, hemos de tener en cuenta lo que ocurre cuando la longitud de la cadena que queremos cifrar no es un multiplo exacto del tama~no de bloque. Entonces tenemos que añadir informacion al final para que asi lo sea. El mecanismo mas sencillo consiste en rellenar con ceros (o algun otro patron) el ultimo bloque que se codica. El problema ahora consiste en saber cuando se descifra por donde hay que cortar. Lo que se suele hacer es añadir como ultimo byte del ultimo bloque el numero de bytes que se han añadido. Esto tiene el inconveniente de que si el tamaño original es multiplo del bloque, hay que alargarlo con otro bloque entero. Por ejemplo, si el tamaño de bloque fuera 64 bits, y sobraran cinco bytes al final, añadiriamos dos ceros y un tres. Si por contra no sobrara nada, tendriamos que añadir siete ceros y un ocho.

Modo ECB

El modo ECB (Electronic Codebook) es el metodo mas sencillo y obvio de aplicar un algoritmo de cifrado por bloques. Simplemente se subdivide la cadena que se quiere codicar en bloques del tamaño adecuado y se cifran todos ellos empleando la misma clave. A favor de este metodo podemos decir que permite codicar los bloques independientemente de su orden, lo cual es adecuado para codicar bases de datos o ficheros en los que se requiera un acceso aleatorio. Tambien es resistente a errores, pues si uno de los bloques sufriera una alteracion, el resto quedaria intacto. Por contra, si el mensaje presenta patrones repetitivos, el texto cifrado tambien los presentaria, y eso es peligroso, sobre todo cuando se codica informacion muy redundante (como ficheros de texto), o con patrones comunes al inicio y final (como el correo electronico). Un contrincante puede en estos casos efectuar un ataque estadistico y extraer bastante informacion.

Otro riesgo bastante importante que presenta el modo ECB es el de la sustitucion de bloques. El atacante puede cambiar un bloque sin mayores problemas, y alterar los mensajes incluso desconociendo la clave y el algoritmo empleados. Simplemente se escucha una comunicacion de la que se conozca el contenido, como por ejemplo una transaccion bancaria a nuestra cuenta corriente. Luego se escuchan otras comunicaciones y se sustituyen los bloques correspondientes al numero de cuenta del beneficiario de la transaccion por la version codificada de nuestro numero (que ni siquiera nos habremos molestado en descifrar). En cuestion de horas nos habremos hecho ricos.

Modo CBC

El modo CBC (Cipher Book Chaining Mode) incorpora un mecanismo de retroalimentacion en el cifrado por bloques. Esto significa que la codificacion de bloques anteriores condiciona la codificacion del bloque actual, por lo que seria imposible sustituir un bloque individual en el mensaje cifrado. Esto se consigue efectuando una operacion XOR entre el bloque del mensaje que queremos codificar y el ultimo criptograma obtenido. En cualquier caso, dos mensajes identicos se codificarian de la misma forma usando el modo CBC. Mas aun, dos mensajes que empiecen igual se codificarian igual hasta llegar a la primera diferencia entre ellos. Para evitar esto se emplea un vector de inicializacion, que puede ser un bloque aleatorio, como bloque inicial de la transmision. Este vector seria descartado en destino, pero garantiza que siempre los mensajes se codifiquen de manera diferente, aunque tengan partes comunes.

Modo CFB

El modo CBC no empieza a codificar (o decodificar) hasta que no se tiene que transmitir (o se ha recibido) un bloque completo de informacion. Esta circunstancia puede convertirse en un serio inconveniente, por ejemplo en el caso de terminales, que deberian poder transmitir cada caracter que pulsa el usuario de manera individual. Una posible solucion seria emplear un bloque completo para transmitir cada byte y rellenar el resto con ceros, pero esto haria que tengamos unicamente 256 mensajes diferentes en nuestra transmision y que un atacante pueda efectuar un sencillo analisis estadistico para comprometerla. Otra opcion seria rellenar el bloque con informacion aleatoria, aunque seguriamos desperdiciando gran parte del ancho de banda de la transmision. El modo de operacion CFB (Cipher-Feedback Mode) permitiria codificar la informacion en unidades inferiores al tamaño del bloque, lo cual permite aprovechar totalmente la capacidad de transmision del canal de comunicaciones, manteniendo ademas un nivel de seguridad adecuado.

Otros Modos

Existen protocolos criptograficos que no se basan en la transmision de bloques, sino en un mecanismo secuencial de codificacion de streams de tamaño variable. Estos algoritmos permiten cifrar un mensaje bit a bit de forma continua y enviar cada bit antes que el siguiente sea codificado. Funcionan a partir de lo que se llama un generador de secuencia de clave (keystream generator), un algoritmo que genera una clave continua de longitud infinita (o muy grande) bit a bit. Lo que se hace es aplicar una operacion XOR entre cada bit del texto plano y cada bit de la clave. En el destino existe otro generador identico sincronizado para llevar a cabo el descifrado. El problema fundamental es mantener ambos generadores sincronizados, para evitar errores si se pierde algun bit de la transmision.

Los algoritmos de codificacion por bloques pueden ser empleados como generadores de secuencia de clave. Existen para ello otros modos de operacion de estos algoritmos, como el OFB (Output-Feedback), que incorporan mecanismos para mantener la sincronia entre los generadores de secuencia origen y destino.

Seguridad

En primer lugar, el ataque por fuerza bruta resulta impracticable, ya que sería necesario probar 1038 claves, cantidad imposible de manejar con los medios informáticos actuales. Los diseñadores analizaron IDEA para medir su fortaleza frente al criptoanálisis diferencial y concluyeron que es inmune bajo ciertos supuestos. No se han informado de debilidades frente al criptoanálisis lineal o algebraico. Se han encontrado algunas claves débiles, las cuales en la práctica son poco usadas siendo necesario evitarlas explícitamente. Es considerado por muchos como uno de los cifrados en bloque más seguros que existen.

Enlaces internos

Enlaces externos