2012-03-07 29 views
5

Hola tengo una pregunta con respecto a MD5 Hash/Salting.salazón de sal MD5 - dónde almacenar sal

He leído mucho sobre hash y salazón recientemente y entiendo que debería usar una sal diferente para cada contraseña y que no debería usar algo como nombre de usuario, porque la sal idealmente debería ser completamente única. Pero lo que no entiendo es ¿por qué se recomienda almacenar esta sal junto con la contraseña en la base de datos?

¿No es malo si el atacante obtiene hash AND salt? Entiendo que es más difícil para el atacante, porque las sales únicas aseguran que no puede verificar un solo hash calculado contra todas las contraseñas. Pero aún así, ¿no sería mejor mantener oculta una parte de la sal?

Estaba pensando en dividir la sal en 2 partes. La primera parte se almacena en la base de datos como de costumbre, la segunda parte (más pequeña) está codificada en mi aplicación. Sería casi imposible para un atacante obtener la sal completa, ya que tendría que infiltrarse tanto en el servidor de aplicaciones como en la base de datos.

¿Es esta una buena solución? La sal aún sería única, pero todas las sales terminarían con la misma secuencia.

Respuesta

10

Un atacante es "permitido" para conocer la sal: su seguridad debe estar diseñada de forma que incluso con el conocimiento de la sal siga siendo segura.

¿Qué hace la sal?

La sal ayuda a defenderse contra los ataques de fuerza bruta utilizando "tablas arcoiris" precalculadas.
La sal hace que la fuerza bruta sea mucho más cara (en términos de tiempo/memoria) para el atacante.
El cálculo de dicha tabla es costoso y, por lo general, solo se realiza cuando puede utilizarse para más de un ataque/contraseña.
SI utiliza la misma sal para todas las contraseñas, un atacante podría precomputar dicha tabla y luego aplicar fuerza bruta a sus contraseñas en texto sin formato ...
Siempre que genere una nueva (mejor criptográficamente fuerte) sal aleatoria para cada contraseña que desea almacenar el hash de no hay problema.

Dependiendo de cómo se utiliza MD5 es una debilidad desde MD5 ya no se ve como "cryptogtaphically segura"

SI desea reforzar la seguridad
Se podría calcular el hash de varios más veces (hash hash, etc.) - esto no le cuesta mucho pero hace que un ataque de fuerza bruta/calcular "tablas de arcoiris" sea aún más caro ... no se invente por su cuenta - hay métodos estándar probados para hacerlo, vea por ejemplo http://en.wikipedia.org/wiki/PBKDF2 y http://www.itnewb.com/tutorial/Encrypting-Passwords-with-PHP-for-Storage-Using-the-RSA-PBKDF2-Standard y http://msdn.microsoft.com/en-us/library/system.security.cryptography.rfc2898derivebytes.aspx

Usar este mecanismo es obligatorio desde ya que "CPU/GPU time" (utilizable para ataques como rainbow tables/brute force etc.) está cada vez más ampliamente disponible (vea por ejemplo, el hecho de que Amazon's Cloud service se encuentra entre los 50 mejores supercomputadores más rápidos del mundo y puede ser utilizado por cualquier persona por una cantidad comparativamente pequeña).

¡La división de la sal en 2 piezas, una codificada/constante y una única parte NO es recomendable!

Según el algoritmo utilizado, puede ser una debilidad ayudar al atacante a romper su seguridad. Recomiendo encarecidamente NO hacer esto a menos que pueda demostrar matemáticamente que no debilita su seguridad (lo cual es muy difícil de hacer en mi humilde opinión).

no hay ningún problema en absoluto para un atacante saber su sal completa si se implementa la seguridad correctamente ...

ACTUALIZACIÓN (según el comentario):

RFC 2898 is an important reference on PBKDF2. En el apartado 4.1 se habla de la adición de una parte de la sal

la sal debe contener los datos que distingue explícitamente entre operaciones diferentes y diferentes longitudes de clave

Esto tiene mi humilde opinión no tiene relación con lo que el PO es preguntando. El RFC habla de información sobre longitudes de claves, etc., que se incorpora como una parte adicional junto con la sal aleatoria. Esto es muy similar a tener un formato de archivo que contiene una sección de encabezado que describe aspectos específicos de los datos que contiene. Esto no debilita la seguridad y posiblemente sea muy útil en un escenario donde se necesita interoperabilidad entre diferentes sistemas.

En contraste, lo que el OP está pidiendo es básicamente almacenar solo una parte de la sal en el DB mientras mantiene la otra parte (más pequeña) codificada en la aplicación lo que significa que la sal en el DB no está completa ... haciendo esto significa perder la entropía de la sal (es decir, una sal de 64 bits con 8 bits constantes es en realidad tan segura como una sal de 56 bits) que a su vez debilita la seguridad que proporciona la sal (al menos para cualquier algoritmo que pueda pensar en este momento) ... esto contradice lo que el OP pretende (aumentar la seguridad).

ACTUALIZACIÓN 2 (según la discusión con owlstead):

Puede añadir un poco de "secreto" (que puede ser codificado en su aplicación) para el texto en claro antes de hash con PBKDF2 utilizando una sal única y aleatoria que está completamente almacenado en la base de datos ... que podría ayudar un poco, aunque representa de seguridad por oscuridad IMO.

+1

+1. Estaba simplemente escribiendo una respuesta similar, pero esto es realmente todo lo que quiere decir. –

+0

"Dividir la sal en 2 partes ... Dependiendo del algoritmo utilizado, puede ser una debilidad ayudar al atacante a romper su seguridad". ¿Puede explicar más? PBKDF2 incluso tiene una cláusula en [rfc2898] (http://tools.ietf.org/html/rfc2898#section-4.1) para agregar más información a la sal (ítem # 2 en la primera lista). –

+0

@owlstead sí, de lo que habla el RFC es muy diferente de lo que describe el OP ... el RFC dice tener una parte adicional que identifica aspectos técnicos (por ejemplo, longitud de clave, etc.) muy similar a lo que un encabezado de un formato de archivo hace). El OP pregunta acerca de "tener un valor constante como una parte más pequeña de la sal y no almacenar esa parte en el DB" para aumentar la seguridad, lo que claramente no es el caso. – Yahia

Cuestiones relacionadas