2012-08-27 12 views
6

He estado usando PHPass para hash mis contraseñas durante mucho tiempo. Reconozco que todavía hay cosas que no entiendo completamente (o ignoro) para codificar correctamente una contraseña, así que hoy estaba revisando toda la información que pude encontrar al respecto.Salar correctamente y usar PHPass

revisión de documentos PHPass, he steped en esto:

Además del hash real, phpass genera de forma transparente sales aleatorios cuando es ordenado una nueva contraseña o frase de contraseña, y que codifica el tipo de hash, la sal, y la iteración de estiramiento de la contraseña cuenta en la "cadena de codificación hash" que devuelve. Cuando phpass autentica una contraseña o frase de paso contra un hash almacenado, de manera similar, extrae y usa transparentemente el identificador de tipo hash, el salt y el recuento de iteración de la "cadena de codificación hash". Por lo tanto, no necesita preocuparse por la salazón y el estiramiento por su cuenta - phpass se encarga de esto por usted.

He puesto en negrita la frase que me molestó.
Siempre pensé que la sal debería ser algo secreta, en el sentido de que no debería ser conocida por el atacante. Entonces, si se entiende correctamente, PHPass almacena la sal utilizada en el mismo hash para que pueda usarla al comparar contraseñas y verificar si es válida.
Mis preguntas son

  1. ¿Es seguro? Si el hash está comprometido, el atacante tiene la sal utilizada para cifrar la contraseña ... Hay algo que echo de menos aquí.
  2. Estoy aquí realmente libre de preocuparse por la salazón de contraseñas? ¿Realmente puedo confiar en PHPass?
+0

Con la adición de 'salt' se agrega una capa más de seguridad. Este es el principio principal de "Defensa en profundidad". Pero si _phpass_ ya agrega sal, no agregará otra capa. – Leri

+0

1.) ¿Sobre qué tipo de seguridad está usted confinado? ¿Puedes hacer eso más concreto? - 2.) ¿Puede responder con confianza la siguiente pregunta en una fracción de segundo con sí o no: "¿Phpass está usando sal?" - Diga cuán seguro y rápido puede responderlo y también la respuesta. – hakre

+0

@hakra Me refiero al acto de almacenar la sal junto con la contraseña. Siempre pensé que almacenarlo en diferentes lugares (leer los campos DB por ejemplo) era mejor. –

Respuesta

1

El propósito de una sal es no para ser un secreto. El propósito es agregar un componente único a cada entrada de hash, de modo que las contraseñas idénticas no se sincronicen con hashes idénticos, lo que hace que el proceso de fuerza bruta sea más difícil y lleve más tiempo ya que cada hash debe probarse individualmente.

Sí, sería marginalmente más seguro si la sal era secreto, pero eso es difícil de realizar en la práctica, ya que su aplicación necesita la sal, así, por lo que necesita ser almacenado en algún lugar donde la contraseña es más accesible bien. Por lo tanto, en la práctica, cuando el atacante obtiene el hash de contraseña, por lo general también puede obtener la sal de todos modos.

1

Si entiendo correctamente, las sales se usan principalmente para frustrar los ataques de tablas hash/rainbow precalculadas. Siempre que el hash que se utiliza se genere de forma que sea razonablemente global único (no codificado en PHPass, por ejemplo), está bien.

3

Un poco de historia
Una sal no está destinado a ser secreta, en cambio, una sal 'funciona' por asegurándose de que el resultado de control único para cada instancia usa. Esto se hace seleccionando un valor de sal aleatorio diferente para cada hash calculado.

La intención de la sal no se ve comprometida cuando se conoce; el atacante aún necesita atacar cada hash por separado. Por lo tanto, puede simplemente almacenar la sal junto con la contraseña.

Entonces, ¿es seguro PHPass?
¡SÍ! PHPass (de acuerdo con las mejores prácticas) genera una sal aleatoria fuerte para usted. Es una biblioteca bien revisada y de buena calidad.

Enlaces de interés:
How to securely hash passwords?
How to store salt?
Password Hashing add salt + pepper or is salt enough?
Salt Generation and open source software

Cuestiones relacionadas