ALGORITMOS DE CIFRADO II

     Segunda parte de la entrega sobre algoritmos de cifrado, esta vez sobre el «Hash» o algoritmo de verificación. La primera la puedes leer en este enlace

   Un hash o función de resumen son algoritmos que crean una salida alfanumérica a partir de un dato (texto, contraseña o archivo). A partir de los datos de la entrada crea una cadena que solo puede volverse a crear con esos mismos datos.
Se utilizan para asegurarse de que los datos originales no han sido modificados en una transmisión, hacer ilegible una contraseña o firmar digitalmente un documento.

Los más comunes son:

  • MD5: Es un algoritmo hash de 128 bits representado como un número de 32 dígitos hexadecimales. A pesar de su amplia difusión actual, se detectó una sucesión de problemas de seguridad que plantea una serie de dudas acerca de su uso futuro.

         Longitud de clave: 128 bits.

  • SHA: Es un conjunto de funciones de hash de cifrado. Existen varias versiones renovadas, la primera, la SHA-0 y la más reciente, la SHA-3.
    A partir de la versión SHA-2 están formados por diversas funciones como SHA-224, SHA-256, SHA-384 y SHA-512 la cual ha sido la más utilizada para la protección de datos y de información.

         SHA0- Longitud de clave: 128 bits.

         SHA1- Longitud de clave: 160 bits.

         SHA2- Longitud de clave: Variable, 224, 256, 384 y 512 bits.

  • SHA3 (Keccak): Los algoritmos SHA son descendientes de MD5. SHA3 es una evolución del algoritmo SHA2, aunque se le ha añadido un sistema de cifrado llamado “esponja”, lo que lo diferencia totalmente de la familia SHA. Este sistema se creó por miedo a que la familia SHA, muy extendida, sufriera alguna vulnerabilidad.
    El sistema esponja mezcla 576 bits de entrada en un estado interno de 1600 bits en cada iteración, y luego se permuta absorbiendo los próximos 576 bits. Al final, 512 bits de la 1600 son expulsados como el hash final.

         Longitud de clave: 1024 bits, solo eficaces 512 bits.

  • TIGER: Es una función de hash para plataformas de 64 bits. El tamaño de la función es de 192 bits, aunque hay versiones de 128 y 169 bits de la misma, llamadas Tiger/128 y Tiger/160, que devuelven versiones truncadas de la versión Tiger/192.

         Longitud de clave: 192 bits.

  • GOST: Es un algoritmo hash y cifrado por bloques de origen ruso que usa claves de 256 bits.

         Longitud de clave: 256 bits.

  • WHIRLPOOL: Es una función hash desarrollada después del algoritmo de cifrado por bloques Square y está basado en una modificación AES. Devuelve un hash de 512 bits (64 bytes) que se representan como 128 caracteres hexadecimales.

         Longitud de clave: 512 bits.

  • RIPEMD: Es un algoritmo hash de 128, 256 y 320 bits. Es un algoritmo basado en MD4, y es similar en seguridad y funcionamiento a SHA-1.
    Las versiones de 256 y 320 bits solamente disminuyen la posibilidad de colisiones hash accidentales y no tienen niveles más altos de seguridad con respecto a RIPEMD-128 y RIPEMD-160. Los hashes de 160 bits se representan como números en hexadecimal 40 dígitos.

         Longitud de clave: 128, 256 y 320 bits.


CONSIDERACIONES FINALES

  • Las claves largas producen un cifrado más seguro, pero el cifrado seguro consume más recursos de la CPU que un cifrado menos seguro.

  • Los cifrados en bloque con claves largas son más seguros que los cifrados de flujo.

  • Los algoritmos simétricos son aproximadamente 1.000 veces más rápidos que los asimétricos y más seguros. Un cifrado asimétrico necesita al menos una llave de 3.000 bits para alcanzar un nivel de seguridad similar al de uno simétrico de 128 bits.

  • Los algoritmos más actuales son lo suficientemente buenos y es sorprendentemente difícil determinar con precisión cual es mejor.

  • Cifrar con más de un algoritmo solo protege ante la eventualidad de que en el futuro alguien descubra una forma de vulnerar alguno de los algoritmos. Solo agrega dificultad a un ataque basado en hardware, no más seguridad en si.

Compartir

6 Comentarios

  1. Muy bueno, me quedo reflexionando sobre esto

    Los algoritmos simétricos son aproximadamente 1.000 veces más rápidos
    que los asimétricos y más seguros

    1. Claro, así dicho parecen mucho mejores, pero la criptografía asimétrica se creó para resolver el problema de distribución de la clave. Para comunicar un servidor y un cliente, tendrían que haber acordado una clave de antemano.

      Lo que hace actualmente SSL es utilizar criptografía asimétrica para enviar una clave simétrica que se usa como cifrado. Así se consigue un compromiso entre seguridad y velocidad.

      Saludos.

  2. «(…) se detectó una sucesión de problemas de seguridad que plantea una serie de dudas acerca de su uso futuro.»
    Bueno, más que dudas en el futuro, no debería usarse MD5 desde el 2009. Hoy en día es realmente fácil generar dos archivos con idénticos hash MD5 distintos. Desde binarios hasta pdfs, lo que quieras. El mayor problema ahora mismo con esta algoritmo es que prácticamente el 100% de los antivirus se basan en él para identificar malware.

  3. Cierto Ivan, el hecho es que se sigue usando y mucho, está muy extendido aún su uso, por eso puse lo de futuro, aunque debería haber puesto que no ha de utilizarse ya en el presente.

    1. Exacto, solo era por dejar claro que está totalmente roto y que crear colisiones es trivial. Como veo que te interesael tema, si puedes échale un ojo a un pequeño cursillo que hice hace unas semanas para una asociación de ciencias.
      http://elmonoinfinito.es/cripto/
      Dedico un apartado a hablar de las funciones hash y encontré un par de ejemplos de colisiones muy chulas con MD5 ;)
      Un saludo!

  4. No me parece que el cifrado simetrico sea mas robusto que el asimetrico, tomando en cuenta los puntos debiles que presenta el primero:
    * necesitas compartir una clave, que es relativamente facil de conseguir y/o robar. Mientras que en el asimetrico, el compartir una llave publica conlleva casi cero riesgos (yo al menos no conozco ninguno)
    * en el cifrado simetrico, por lo general, el usuario le asigna una clave, que en muy pocos casos es suficientemente segura… el asimetrico utiliza llaves o certificados, que son bastante seguros por ser lo suficientemente «largos» como para que ninguna app pueda generar replicas exactas o los pueda romper y son -por supuesto- humanamente imposibles de memorizar…
    Y por ahi hay mas detalles que se me olvidan o no conozco al respecto, pero de todas formas… por mi parte prefiero usar GnuPG con cifrado asimetrico :-)
    Por lo demas, considero que SHA se ha convertido en una herramienta impresindible… y me parece muy irresponsable que todavia hallan portales (desarrolladores o simplemente contenidos) que distribuyan contenidos sin «poder verificarse».
    Gracias por el tuto!

Deja una respuesta

Your email address will not be published. Required fields are marked *

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax