Comunidad de diseño web y desarrollo en internet online

Seguridad en PHP

Citar            
MensajeEscrito el 23 Jul 2008 10:08 pm
Gente, después del temita en ayuda con MYSQL se me ocurrió googlear un poco y buscar algo sobre los algoritmos más populares y su seguridad, empezando con MD5:


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???

Por joarobles

753 de clabLevel

8 tutoriales

 

Córdoba - Argentina

firefox
Citar            
MensajeEscrito el 24 Jul 2008 12:15 am
intersante post mi idea de seguridad integral seria mezclar por lo menos 2 de las formas mas comunes yo lo haria con una barrera sha1 y luego una autentificacion md5 me pareceria bastante trabajo para un hackers o persona q no tenga nada q hacer claro esa es mi forma de pensar

Por talcual

686 de clabLevel



 

Colombia

msie7
Citar            
MensajeEscrito el 24 Jul 2008 12:46 am
y acá una implementación del RSA para PHP http://scripts.ringsworld.com/development-tools/rsa1.3/rsa.php.html
todavia no lo probe, ustedes diran...


El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario.

Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes.

Cuando se quiere enviar un mensaje, el emisor busca la clave pública de cifrado del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo usando su clave oculta.

Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.

Por joarobles

753 de clabLevel

8 tutoriales

 

Córdoba - Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.