En criptografía, MD5 (acrónimo de Message-Digest Algorithm 5, Algoritmo de Resumen del Mensaje 5) es un algoritmo de reducción criptográfico de 128 bits ampliamente usado.
que, con PHP se implemeta:
Código :
md5($cadena);
pero, atención:
A pesar de haber sido considerado criptográficamente seguro en un principio, ciertas investigaciones han revelado vulnerabilidades que hacen cuestionable el uso futuro del MD5. En agosto del 2004, Xiaoyun Wang, Dengguo Feng, Xuejia Lai y Hongbo Yu anunciaron el descubrimiento de colisiones de hash para MD5. Su ataque se consumó en una hora de cálculo con un clúster IBM P690.
Aunque dicho ataque era analítico, el tamaño del hash (128 bits) es lo suficientemente pequeño como para que resulte vulnerable frente a ataques de 'fuerza bruta' tipo 'cumpleaños' (Ataque de cumpleaños). El proyecto de computación distribuida MD5CRK arrancó en marzo del 2004 con el propósito de demostrar que MD5 es inseguro frente a uno de tales ataques, aunque acabó poco después del aviso de la publicación de la vulnerabilidad del equipo de Wang.
Debido al descubrimiento de métodos sencillos para generar colisiones de hash, muchos investigadores recomiendan su sustitución por algoritmos alternativos tales como SHA-1 o RIPEMD-160.
tal cual como citó mauril36...
además, tenemos SHA-1...
SHA-1 ha sido examinado muy de cerca por la comunidad criptográfica pública, y no se ha encontrado ningún ataque efectivo. No obstante, en el año 2004, un número de ataques significativos fueron divulgados sobre funciones criptográficas de hash con una estructura similar a SHA-1; lo que ha planteado dudas sobre la seguridad a largo plazo de SHA-1.
SHA-0 y SHA-1 producen una salida resumen de 160 bits de un mensaje que puede tener un tamaño máximo de 264 bits, y se basa en principios similares a los usados por el profesor Ronald L. Rivest del MIT en el diseño de los algoritmos de resumen de mensaje MD4 y MD5.
que se implementa en PHP de la forma:
Código :
sha1($cadena);
pero también, como remarcó mauril26, tenemos que:
La resistencia del algoritmo SHA-1 se ha visto comprometida a lo largo del año 2005. Después de que MD5, entre otros, quedara seriamente comprometido en el 2004 por parte de un equipo de investigadores chinos, el tiempo de vida de SHA-1 quedó visto para sentencia.
El mismo equipo de investigadores chinos, compuesto por Xiaoyun Wang, Yiqun Lisa Yin y Hongbo Yu (principalmente de la Shandong University en China), ha demostrado que son capaces de romper el SHA-1 en al menos 269 operaciones, unas 2000 veces más rápido que un ataque de fuerza bruta (que requeriría 280 operaciones). Los últimos ataques contra SHA-1 han logrado debilitarlo hasta 263.
entonces?? nos encontramos con RIPEMD:
RIPEMD-160 (acrónimo de RACE Integrity Primitives Evaluation Message Digest, primitivas de integridad del resumen del mensaje) es un algoritmo del resumen del mensaje de 160 bits (y función criptográfica de hash) desarrollado en Europa por Hans Dobbertin, Antoon Bosselaers y Bart Preneel, y publicados primeramente en 1996. Es una versión mejorada de RIPEMD, que estaba basado sobre los principios del diseño del algoritmo MD4, y es similar en seguridad y funcionamiento al más popular SHA-1.
También existen versiones de 128, 256 y 320 bits de este algoritmo, llamadas RIPEMD-128, RIPEMD-256 y RIPEMD-320 respectivamente. La versión 128 bits fue pensada solamente como un reemplazo para el RIPEMD original, que eran también de 128 bits, y en la que habían sido encontradas razones para cuestionar su seguridad. 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.
el cual tiene implementación para PHP usando la extensión hash, de la forma:
Código :
hash("ripemd160", $cadena);
Algortimos soportados por la extensión hash según hash_algos() en http://www.hackingballz.com/herramientas/manual-oficial-de-php/function.hash-algos.html
Código :
Array ( [0] => md4 [1] => md5 [2] => sha1 [3] => sha256 [4] => sha384 [5] => sha512 [6] => ripemd128 [7] => ripemd160 [8] => whirlpool [9] => tiger128,3 [10] => tiger160,3 [11] => tiger192,3 [12] => tiger128,4 [13] => tiger160,4 [14] => tiger192,4 [15] => snefru [16] => gost [17] => adler32 [18] => crc32 [19] => crc32b [20] => haval128,3 [21] => haval160,3 [22] => haval192,3 [23] => haval224,3 [24] => haval256,3 [25] => haval128,4 [26] => haval160,4 [27] => haval192,4 [28] => haval224,4 [29] => haval256,4 [30] => haval128,5 [31] => haval160,5 [32] => haval192,5 [33] => haval224,5 [34] => haval256,5 )
googleando un poco encontré este post...: http://xcomic.mikexstudios.com/forum/viewtopic.php?id=45 que presenta una función para generar hashes para distintos algoritmos, entre ellos el RIPEMD-160... pero este algoritmo también presentó colisiones: http://eprint.iacr.org/2004/199.pdf (documento muy interesante)...
entonces... gente de la comunidad... alguna alternativa 100% segura parece no existir, por lo que deberíamos buscar otro criterio para la selección de un algoritmo de encriptación para garantizar la seguridad de la información en nuestros proyectos... alguna idea???