lunes, febrero 16, 2009

Criptografía II

En el post de anteayer, comentaba que el algoritmo DES a secas tiene sus problemas:

1.-Hoy en día es totalmente inseguro. Cualquier PC es un maquinón comparado con lo que había en los años 70 y por fuerza bruta revienta lo que le eches.

2.-La clave es cortísima. El programita Perl que vimos el otro día es el que ponen como ejemplo. Ya vimos que lo que cifras tiene que tener la misma longitud que la clave. Me imagino que en un texto largo, los múltiples cifrados con la misma clave dan muchas pistas al descifrar. También se pueden utilizar diferentes claves (letras de un texto conocido por ejemplo) pero esto facilita el ataque por diccionario.

3.-Ocurre otra cosa que también es un problema: El mismo texto claro (imaginaros una palabra) con la misma clave da el mismo texto cifrado. Esto da una pista buenísima para el espía que quiere descifrar sin clave. Imaginaros todos los artículos que se repiten en este mismo párrafo.

4.-Etc. etc. y más cosas.

Vamos a ver una mejora:

Lo que veíamos anteayer (DES) era un cifrado por bloques. Hay que dividir el texto a cifrar en bloques de tamaño fijo y aplicar el algoritmo de cifrado DES sobre cada bloque. Los problemas son los que he mencionado arriba y otras más.

Ahora pensad lo siguiente: Cifro el primer bloque. Esto me da un bloque cifrado. Ahora, antes de empezar a cifrar el segundo bloque, aplicamos una operación XOR a nivel de bits entre el cifrado del primer bloque y el texto en claro del segundo bloque. Y así sucesivamente. Eso hace el Cypher Block Chaining (CBC) inventado por IBM en 1976.

Resultado: Aunque se repitan palabras en el texto a cifrar, el algoritmo obtiene cifrados diferentes. Aunque sea más difícil de ver, también complica el análisis de la clave común entre los bloques, ya que no se obtiene a partir del texto en claro.

Otra mejora:

Pues un señor muy majo llamado Bruce Schneier diseñó en 1993 un algoritmo de cifrado por bloques (como DES) que no patentó y dejó para libre uso. Lo llamó Blowfish. La ventaja de Blowfish respecto a DES es que la clave en lugar de ser de 56 bits (8 bytes - 8 bits) puede ser desde el mínimo de 8 bytes (64 bits) hasta los 56 bytes (448 bits). Por lo tanto puede ser mucho más segura que DES.

Y ahora la acción:


1.-Igual que hicimos el sábado instalamos el módulo perl Crypt::Blowfish que podemos bajar de aquí: http://search.cpan.org/~dparis/Crypt-Blowfish-2.10/Blowfish.pm.
También hace falta el módulo Crypt::CBC, pero éste nos lo instalamos el otro día. De todas formas, para el que no lo hizo lo puede bajar de http://search.cpan.org/~lds/Crypt-CBC-2.30/CBC.pm

2.-Arreglatelas con sudo para llevar el contenido a /usr/lib/perl/5.8.8/Crypt-Blowfish.

3.-Descomprime y descompacta el contenido. Las instrucciones exactas para esto y lo anterior están en el anterior post.

4.-Ahora las instalación del módulo:
4.1-sudo perl Makefile.PL
4.2-sudo make
4.3-sudo make test
4.4-sudo make install

5.-El programa encriptador:



6.-El resultado:

¿Si el cifrado ha sido con Blowfish, qué aporta el módulo Crypt::CBC?

Podíamos haber utilizado únicamente el módulo Crypt::Blowfish, pero tiene una pega: Puedes utilizar una clave larga (hasta 448 bits), pero el bloque de datos sólo puede ser de 8 bytes.

Lo que aporta el módulo Crypt::CBC es la capacidad de encriptar un texto de longitud arbitraria y además modificando el texto (XOR) antes de encriptarlo, como hemos visto arriba.

Uff, es ¡tardísimo!


Saludos.

No hay comentarios: