Ayer era muy tarde y me arme un pequeño lío. Hoy cuando he vuelto a leer el post me he dado cuenta y ya está corregido.
De todas forma voy a resumir lo aprendido hasta ahora:
Algoritmo de cifrado DES: no usar ni para cifrar la lista de la compra.
Característica principal: algoritmos por bloques. Bloque corto de 8 bytes.
Es un desastre. Se diseño por intereses oscuros con una clave muy corta. No utilizar ni de palo. Creo que los chavales de 10 años desencriptan DES con calculadoras programables. Nada más que decir.
Algoritmo de cifrado Blowfish: con una clave larga mejor que mejor.
Característica principal: algoritmos por bloques. Bloque corto de 8 bytes.
Bien, dependiendo de la longitud de la clave que se utilice.
Lo único que el bloque a cifrar es sólo de 8 bytes. Para mensajes más largos hay que pensar en el algoritmo CBC (Cipher Block Chainig Mode o como lo he visto traducido: modo de encadenamiento de bloques cifrado).
Cipher Block Chaining Mode (modo de encadenamiento de bloques cifrado):
Característica principal: En sí mismo no cifra. Hay que utilizarlo conjuntamente con un algoritmo de cifrado.
Permite sobrepasar el límite en el tamaño del bloque que puede tener el algoritmo de cifrado.
Mañana más.
Saludos.
Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas
Mostrando entradas con la etiqueta criptografia. Mostrar todas las entradas
martes, febrero 17, 2009
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.
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.
Etiquetas:
criptografia,
perl,
programacion
sábado, febrero 14, 2009
Criptografía
Hola amig@s, Vuelvo a la carga.
Si habéis estudiado algo relacionado con la informática seguro que conocéis denominaciones de algoritmos de cifrado, pero igual que a mi se os habrán olvidado las características principales.
Hagamos memoria...
Algoritmo DES o "Data Encryption Standard" (Cuidado, hoy en día se considera inseguro. Se puede descifrar sin la clave en menos de 24 horas).
Diseñado por IBM, se elige como algoritmo FIPS (Federal Information Processing Standars) en 1976. Estos estándares públicos eran para agencias no militares y contratistas del Gobierno.
Desde el principio hubo polémica. La clave a utilizar es muy muy corta. Sólo 8 bytes (equivalente a 8 letras). De los 8 bytes (64 bits), 8 son para paridad por lo que la clave efectiva es de 56 bits. Por lo que se dice en wikipedia "es ampliamente aceptado" que la NSA redujo la longitud para tener posibilidades de éxito en caso de utilizar la fuerza bruta contra el cifrado. Vamos, que pensaban que ellos podrían romper una clave de 64 bits con fuerza bruta, mientras que el resto del mundo no iba a poder todavía.
También se sospechaba que hubiera una puerta trasera para que la NSA pudiera descifrar fácilmente. Se hablaba de S-Box manipulada con vulnerabilidad conocida por la NSA. Hoy en día se piensa que no era así. En 1990 se publica unos trabajos conocidos como "criptoanálisis diferencial". Un trabajo que daba luz sobre la forma en la que se podía abordar un ataque al cifrado. Resultó que la S-Box de DES era la más robusta que se podría haber diseñado. En 1994 se publicó el criterio del diseño original demostrando que IBM ya conocía la técnica de criptoanálisis diferencial y que la NSA le obligó a mantener el secreto.
Fuente: http://es.wikipedia.org/wiki/Data_Encryption_Standard
Más información: http://es.kioskea.net/contents/crypto/des.php3
Documento completo de DES en: http://www.elhacker.net/Textos1.htm
¡Vale ya de rollos! Vamos a utilizarlo con Perl.
Para instalarlo en Windows. Descargarlo de aquí y seguir las instrucciones.
En las distribuciones GNU/Linux y en la mayoría de UNIX el Perl viene "de fabrica", pero aún así tendremos que instalar un módulo llamado Crypt::DES
Vamos a esta dirección de CPAN y nos lo descargamos: http://search.cpan.org/~dparis/Crypt-DES-2.05/
Lo dejamos donde queramos. Es un fichero .tar.gz (o sea, primero empaquetado y luego comprimido).
Lo descomprimimos...
gzip -d Crypt-DES-2.05.tar.gz
Ahora desempaquetamos...
tar -xof Crypt-DES-2.05.tar
Creo el directorio /usr/lib/perl/5.8.8/Crypt-DES-2.0.5
y coloco los ficheros desempaquetados en él.
Voy al directorio y...
perl Makefile.PL
make
make test
make install
¿Problemas con la instalación?
1.-Recordad que en Ubuntu para ser root hay que poner por delante el "sudo". Creo que lo he tenido que utilizar para todo.
2.-Ya sabéis que soy un poco desastre :-( Me suena, pero no recuerdo con seguridad si me ha dado un error el make install por no tener instalado el módulo Crypt::CBC. Si os da el error, ir a http://search.cpan.org/~lds/Crypt-CBC-2.30/CBC.pm y lo instaláis como he descrito la instalación de Crypt::DES.
Ahora que está instalado todo bien, entremos en materia
Editamos el siguiente programita Perl que encripta un texto de 8 bytes (limitación de DES).
El texto es: "texto8by"

Y la ejecución del programita:

Y ahora la pregunta del millón:
¿De qué sirve un algoritmo que cifra sólo 8 bytes? Si el alfabeto lo componen 256 letras, un byte (8 bits) se corresponderá con una letra. O sea que hablamos de un mensaje de 8 letras.
Deberíamos completar el programita para que pueda aceptar un mensaje de longitud variable y que vaya cifrando cada letra.
Otra opción es utilizar otro módulo Perl que hace el trabajo por nosotros. Esto en el próximo post.
Saludos.
Si habéis estudiado algo relacionado con la informática seguro que conocéis denominaciones de algoritmos de cifrado, pero igual que a mi se os habrán olvidado las características principales.
Hagamos memoria...
Algoritmo DES o "Data Encryption Standard" (Cuidado, hoy en día se considera inseguro. Se puede descifrar sin la clave en menos de 24 horas).
Diseñado por IBM, se elige como algoritmo FIPS (Federal Information Processing Standars) en 1976. Estos estándares públicos eran para agencias no militares y contratistas del Gobierno.
Desde el principio hubo polémica. La clave a utilizar es muy muy corta. Sólo 8 bytes (equivalente a 8 letras). De los 8 bytes (64 bits), 8 son para paridad por lo que la clave efectiva es de 56 bits. Por lo que se dice en wikipedia "es ampliamente aceptado" que la NSA redujo la longitud para tener posibilidades de éxito en caso de utilizar la fuerza bruta contra el cifrado. Vamos, que pensaban que ellos podrían romper una clave de 64 bits con fuerza bruta, mientras que el resto del mundo no iba a poder todavía.
También se sospechaba que hubiera una puerta trasera para que la NSA pudiera descifrar fácilmente. Se hablaba de S-Box manipulada con vulnerabilidad conocida por la NSA. Hoy en día se piensa que no era así. En 1990 se publica unos trabajos conocidos como "criptoanálisis diferencial". Un trabajo que daba luz sobre la forma en la que se podía abordar un ataque al cifrado. Resultó que la S-Box de DES era la más robusta que se podría haber diseñado. En 1994 se publicó el criterio del diseño original demostrando que IBM ya conocía la técnica de criptoanálisis diferencial y que la NSA le obligó a mantener el secreto.
Fuente: http://es.wikipedia.org/wiki/Data_Encryption_Standard
Más información: http://es.kioskea.net/contents/crypto/des.php3
Documento completo de DES en: http://www.elhacker.net/Textos1.htm
¡Vale ya de rollos! Vamos a utilizarlo con Perl.
Para instalarlo en Windows. Descargarlo de aquí y seguir las instrucciones.
En las distribuciones GNU/Linux y en la mayoría de UNIX el Perl viene "de fabrica", pero aún así tendremos que instalar un módulo llamado Crypt::DES
Vamos a esta dirección de CPAN y nos lo descargamos: http://search.cpan.org/~dparis/Crypt-DES-2.05/
Lo dejamos donde queramos. Es un fichero .tar.gz (o sea, primero empaquetado y luego comprimido).
Lo descomprimimos...
gzip -d Crypt-DES-2.05.tar.gz
Ahora desempaquetamos...
tar -xof Crypt-DES-2.05.tar
Creo el directorio /usr/lib/perl/5.8.8/Crypt-DES-2.0.5
y coloco los ficheros desempaquetados en él.
Voy al directorio y...
perl Makefile.PL
make
make test
make install
¿Problemas con la instalación?
1.-Recordad que en Ubuntu para ser root hay que poner por delante el "sudo". Creo que lo he tenido que utilizar para todo.
2.-Ya sabéis que soy un poco desastre :-( Me suena, pero no recuerdo con seguridad si me ha dado un error el make install por no tener instalado el módulo Crypt::CBC. Si os da el error, ir a http://search.cpan.org/~lds/Crypt-CBC-2.30/CBC.pm y lo instaláis como he descrito la instalación de Crypt::DES.
Ahora que está instalado todo bien, entremos en materia
Editamos el siguiente programita Perl que encripta un texto de 8 bytes (limitación de DES).
El texto es: "texto8by"

Y la ejecución del programita:

Y ahora la pregunta del millón:
¿De qué sirve un algoritmo que cifra sólo 8 bytes? Si el alfabeto lo componen 256 letras, un byte (8 bits) se corresponderá con una letra. O sea que hablamos de un mensaje de 8 letras.
Deberíamos completar el programita para que pueda aceptar un mensaje de longitud variable y que vaya cifrando cada letra.
Otra opción es utilizar otro módulo Perl que hace el trabajo por nosotros. Esto en el próximo post.
Saludos.
Etiquetas:
criptografia,
perl,
programacion
Suscribirse a:
Entradas (Atom)
