¿Cuál es la mejor opción para cifrar con PHP?

Iniciado por Shurhand, 26 Febrero 2009, 13:35 PM

0 Miembros y 1 Visitante están viendo este tema.

Shurhand

Voy a intentar migrar una aplicación de un tipo de cifrado a otra, y mirando información en internet he encontrado que se disponen de las siguientes funciones de cifrado:
   
    * Adler32 (MHASH_ADLER32)
    * Crc32 (MHASH_CRC32)
    * Crc32B (MHASH_CRC32B)
    * Gost (MHASH_GOST)
    * Haval128 (MHASH_HAVAL128)
    * Haval160 (MHASH_HAVAL160)
    * Haval192 (MHASH_HAVAL192)
    * Haval256 (MHASH_HAVAL256)
    * Md4 (MHASH_MD4)
    * Md5 (MHASH_MD5)
    * Ripemd160 (MHASH_RIPEMD160)
    * Sha1 (MHASH_SHA1)
    * Sha256 (MHASH_SHA256)
    * Tiger (MHASH_TIGER)
    * Tiger128 (MHASH_TIGER128)
    * Tiger160 (MHASH_TIGER160)


¿Cuál es el más eficaz? ¿Cuál es el más robusto? ¿Cuál no habría que utilizar? ¿En qué situación se utilizaría alguno de ellos en especial?

Todo esto lo pregunto porque muchísimas aplicaciones y demás historias comerciales y no comerciales vienen con MD5 por defecto y sinceramente, no creo que sea la mejor manera de cifrar nada, no creo que sea ya muy seguro.

Espero que alguien me pueda ayudar.

Gracias de antemano, y salud.

XafiloX

Yo te recomendaria que utilizases mezclas de algunas funciones, por ejemplo:

Código (php) [Seleccionar]
sha1(md5('palabra'));

Tambien podrias utilizar (ya la releche en seguridad XD) una palabra "secreta" que utilizarias paras las encriptaciones...
Ejemplo:
Código (php) [Seleccionar]

$secret_word = 'secret';
$encripted_pass = sha1(md5('palabra'.$secret_word));


Y esto ya supondria que la persona que intentase descifrar esta contraseña supiese que estas utilizando dos tipos de encriptacion distinta, y ademas deberia saber la "palabra secreta".

Shurhand

Muy buena idea, aunque respecto a MD5:

"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."

Por eso no quería usar para nada MD5. Creo que usaré sha256 porque proveé 128 bits de seguridad frente a los 80 de sha-1, lo que le hace más robusto frente a un ataque tipo birthday, y creo que añadiré Ripemd160 con una palabra secreta.

invisible_hack

Justo acabo de publicar mi source de mi encriptador de claves usando MD5 en Php, está justo encima de este post  :P
"Si no visitas mi blog, Chuck te dará una patada giratoria"

XafiloX

Anda! Pues mira, eso de la debilidad de md5 y sha-1 no lo sabia...Uno no se acostará nunca sin saber aprendido una cosa mas....XD

Yo mi web la tengo con una simple proteccion de md5, y hace tiempo que tenia pensado mejorar el sistema, pero por pereza no lo he hecho todavia...  ;D

Principalmente la tenia en md5 porque devolvía una cadena "cortita" y cuanto mas corta, mejor para guardarla en la base de datos... Pero con lo que me has dicho me parece que voy hacer los cambios en mi web en cuanto tenga un poco de tiempo libre, y sobretodo voy a dejar de utilizar md5...

Lo ultimo de todo, un consejo, si vas a utilizar varias funciones de encriptacion a la vez, te sugiero que reserves la que devuelve la cadena de caracteres mas corta como la ultima que se ejecuta, asi ahorrarás algo de espacio en la base de datos...  ;)

Shurhand

Leed esto:

http://hackdosx.blogspot.com/2009/01/md5-vulnerable.html

He aquí un ejemplo de cómo no usar MD5, sino TripeDes, con PHP:
<?php
$llave 
"Clave secreta";
$entrada "Frase a traducir";

$datos_cifrados mcrypt_ecb (MCRYPT_3DES$llave$entradaMCRYPT_ENCRYPT);
?>


Para el que quiera saber más, que consulte:
http://es.codepicks.net/phpmanual/ref.mcrypt.html

Novlucker

Lo del la cifrado md5 vulnerable lleva un par de meses, y es por esto que se recomienda migrar a sha1.
Igualmente para generar las colisiones capaces de vulnerar md5 se necesita una buena capacidad de procesamiento, como la generada por la granja de 200 PS3 trabajando juntos para esta tarea  :P

Lectura recomendada:

http://foro.elhacker.net/hacking_avanzado/md5_considered_harmful_today-t240148.0.html

Saludos  ;D
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Shurhand

Amablemente, ¿alguien podría convertir la referencia de mcrypt (incluyendo las funciones más relevantes) a PDF? Yo lo haría, pero ahora mismo no puedo y la verdad, estaría bien tenerlo en los ordenadores para estudiar todo detenidamente.