simetricos serpent rc2 ejemplos criptografia cifrado asimetricos asimetrico algoritmos algoritmo algorithm security encryption passwords md5

algorithm - serpent - algoritmos de criptografia



¿Cuál es actualmente el algoritmo de encriptación unidireccional más seguro? (7)

Al ver que las computadoras se vuelven cada vez más rápidas y que los matemáticos todavía están desarrollando estos algoritmos

El cifrado RSA es seguro ya que depende de un número realmente grande que es difícil de factorizar. Eventualmente, las computadoras se volverán lo suficientemente rápidas para factorizar el número en un tiempo razonable. Para mantenerse por delante de la curva, usa un número mayor.

Sin embargo, para la mayoría de los sitios web, el propósito de las contraseñas hash es que no sea conveniente para alguien con acceso a la base de datos leer la contraseña, no proporcionar seguridad. Para ese propósito, MD5 está bien 1 .

La implicación aquí es que si un usuario malintencionado obtiene acceso a toda su base de datos, no necesita la contraseña. (El candado de la puerta de entrada no me impedirá entrar por la ventana).

1 El hecho de que MD5 esté "roto" no significa que pueda revertirlo cuando lo desee.

Como muchos sabrán, el cifrado unidireccional es una forma práctica de cifrar las contraseñas de los usuarios en las bases de datos. De esta forma, incluso el administrador de la base de datos no puede conocer la contraseña de un usuario, pero tendrá que tomar una contraseña, cifrarla con el mismo algoritmo y luego comparar el resultado con la contraseña cifrada en la base de datos. Esto significa que el proceso de descifrar la contraseña requiere cantidades masivas de conjeturas y mucho poder de procesamiento.

Al ver que las computadoras se siguen haciendo cada vez más rápidas y que los matemáticos aún están desarrollando estos algoritmos, me pregunto cuál es el más seguro considerando la potencia informática moderna y las técnicas de encriptación.

He estado usando MD5 casi exclusivamente desde hace años, y me pregunto si hay algo más que debería hacer. ¿Debo estar contemplando un algoritmo diferente?

Otra pregunta relacionada: ¿cuánto tiempo debe permanecer un campo para una contraseña tan encriptada? Debo admitir que no sé prácticamente nada sobre el cifrado, pero supongo que un hash MD5 (como ejemplo) puede ser más largo y, presumiblemente, necesitaría más potencia de procesamiento para descifrar. ¿O la longitud del campo no importa en absoluto, siempre que la contraseña encriptada encaje en ella en primer lugar?


Advertencia: desde que se escribió esta publicación en 2010, las GPU se han implementado ampliamente en hashes de contraseñas de fuerza bruta. Las GPU de precio moderado pueden ejecutar diez mil millones de MD5 por segundo. Esto significa que incluso una contraseña alfanumérica de 8 caracteres completamente aleatoria (62 caracteres posibles) se puede forzar en 6 horas. SHA-1 es solo un poco más lento, tomaría un día. Las contraseñas de los usuarios son mucho más débiles y (incluso con la salazón) disminuirán a una tasa de miles de contraseñas por segundo. Las funciones hash están diseñadas para ser rápidas . Usted no quiere esto para las contraseñas. Utilice scrypt, bcrypt o PBKDF-2.

Se descubrió que el MD5 era débil en 1996, y no debería usarse con fines criptográficos. SHA-1 es un reemplazo comúnmente utilizado, pero tiene problemas similares . La familia SHA-2 de funciones hash es el replacement actual de SHA-1. Los miembros de SHA-2 se denominan individualmente SHA-224, SHA-256, SHA-384 y SHA-512.

Por el momento, varias funciones hash compiten para convertirse en SHA-3 , el próximo algoritmo de hash criptográfico estandarizado. Se elegirá un ganador en 2012. ¡Ninguno de estos debe usarse todavía!

Para el hash de contraseñas , también puedes considerar usar algo como bcrypt . Está diseñado para ser lo suficientemente lento como para hacer inviables los ataques de fuerza bruta a gran escala. Puede ajustar la lentitud usted mismo, por lo que puede ser más lento cuando las computadoras se vuelven más rápidas.

Advertencia: bcrypt se basa en un algoritmo de encriptación de dos vías más antiguo, Blowfish, para el cual existen mejores alternativas en la actualidad. No creo que las propiedades criptográficas hash de bcrypt sean completamente entendidas. Que alguien me corrija si me equivoco; Nunca he encontrado una fuente confiable que discuta las propiedades de bcrypt (aparte de su lentitud) desde una perspectiva criptográfica.

Puede ser algo tranquilizador que el riesgo de colisiones importe menos para el uso de contraseñas que para la criptografía de clave pública o las firmas digitales. Usar MD5 hoy es una idea terrible para SSL, pero no es igualmente desastroso para el uso de contraseñas. Pero si tiene la opción, simplemente elija uno más fuerte.

Usar una buena función hash no es suficiente para asegurar sus contraseñas. Debe hash las contraseñas junto con las salts que son largas y criptográficamente al azar . También debe ayudar a sus usuarios a elegir contraseñas más fuertes o pasar frases si es posible. Más tiempo siempre es mejor.


Además de ser una función unidireccional criptográficamente segura, una buena función de hash para la protección con contraseña debería ser difícil de usar, es decir, más lenta por diseño. scrypt es uno de los mejores en esa área. Desde la página de inicio:

Estimamos que en hardware moderno (2009), si se pasan 5 segundos computando una clave derivada, el costo de un ataque de fuerza bruta de hardware contra scrypt es aproximadamente 4000 veces mayor que el costo de un ataque similar contra bcrypt (para encontrar el mismo contraseña), y 20000 veces mayor que un ataque similar contra PBKDF2.

Dicho esto, a partir de las funciones hash comúnmente disponibles, realizar miles de iteraciones de cualquier cosa de la familia SHA es una protección bastante razonable para contraseñas no críticas.

Además, siempre agregue una sal para que sea imposible compartir el esfuerzo de la fuerza bruta forzando muchos hashes a la vez.


Gran pregunta! Esta página es una buena lectura. En particular, el autor afirma que MD5 no es apropiado para contraseñas hash:

El problema es que MD5 es rápido. También lo son sus competidores modernos, como SHA1 y SHA256. La velocidad es un objetivo de diseño de un hash seguro moderno, porque los hashes son un bloque de construcción de casi todos los criptosistemas y, por lo general, se ejecutan a demanda por paquete o por mensaje.

La velocidad es exactamente lo que no quieres en una función de hash de contraseña.

El artículo luego explica algunas alternativas y recomienda Bcrypt como la "opción correcta" (sus palabras, no las mías).

Descargo de responsabilidad: no he probado Bcrypt en absoluto. Considere esto como una recomendación amistosa, pero no como algo que pueda respaldar con mi propia experiencia técnica.


NIST está actualmente ejecutando un concurso para seleccionar un nuevo algoritmo hash, al igual que lo hicieron para seleccionar el algoritmo de cifrado AES. Entonces, la respuesta a esta pregunta probablemente será diferente en un par de años.

Puede buscar los envíos y estudiarlos para ver si hay uno que le gustaría usar.


Para aumentar la seguridad de la contraseña, debe usar una variedad más amplia de símbolos. Si tiene entre 8 y 10 caracteres en la contraseña, se vuelve bastante difícil de descifrar. Aunque hacerlo más largo lo hará más seguro, solo si usa caracteres numéricos / alfabéticos / otros.

SHA1 es otro algoritmo hash (cifrado unidireccional), es más lento, pero tiene un resumen más largo. (mensaje codificado) (160 bit) donde MD5 solo tiene 128 bit.

Entonces SHA2 es aún más seguro, pero usa menos.


Salar la contraseña es siempre un nivel extra de defensa

$salt = ''asfasdfasdf0a8sdflkjasdfapsdufp''; $hashed = md5( $userPassword . $salt );