storing salted password hashed for example best and database hash passwords password-protection

database - salted - salt password generator



Si hago el SALT aleatorio para cada usuario, ¿cómo los autentico? (5)

He estado leyendo sobre los beneficios de las contraseñas de salting y hashing, pero una cosa todavía me elude ...

Cuando proporciono una sal aleatoria para cada usuario, ¿cómo puedo saber cuál era la sal cuando intento autenticarlos para iniciar sesión?

entonces si lo hago ..

HASHPW = PW.RANDOMNUMBER

Podría almacenar el número aleatorio en la base de datos, pero eso parece matar todo el punto de agregar sal ... ¿no? También podría usar un número no aleatorio para cada sal, pero eso también mata el punto de la sal porque, si lo resuelven, tienen todas las contraseñas de mis usuarios ...

Acabo de empezar a aprender PHP y MySQL y cosas tan abstractas como esta me han estado confundiendo

¡Gracias!


La sal impide que alguien obtenga una copia de su base de datos de contraseñas encriptadas y monta un ataque fuera de línea contra todas las contraseñas al mismo tiempo. No previene ataques contra una sola contraseña.

Puede disfrutar leyendo el artículo original de seguridad de contraseñas de Unix. Hace un muy buen trabajo explicando qué es una sal, y por qué las tenemos: http://portal.acm.org/citation.cfm?id=359172


No derrota el propósito de la sal única para almacenarlo. El objetivo de una sal única es proteger el repositorio de todos los usuarios de un ataque, no un usuario individual determinado. Si un atacante compromete su base de datos y está lo suficientemente determinado como para descifrar la cuenta de un usuario en particular, lo hará. No hay nada que podamos hacer sobre esto. Pero tendrían que gastar una cantidad excesiva de tiempo de computadora al hacerlo, lo suficiente como para que no sea factible dedicar tanto tiempo a cada usuario, protegiendo así a todos sus usuarios. Contraste esto con el uso de la misma sal para todos los usuarios: una vez que el atacante tiene la sal, las mismas tablas / procesos se pueden volver a ejecutar contra cada usuario en un tiempo relativamente corto.


No necesita una sal por separado para cada contraseña.

El propósito de la salazón es resistir las tablas del arcoíris: convierte una contraseña candidata en una cadena nueva que tiene su sal; ya que la sal es una cadena privada que solo usted posee, saber que el hash de una contraseña salada no ayudará a un atacante que tenga una ejecución de la tabla del arcoíris de la fábrica.

Un atacante inteligente puede intentar crear una tabla de arcoíris personalizada solo para su servicio creando una cuenta y cambiando su contraseña para observar cuál es el hash resultante. Si la sal es la misma para cada usuario, cuando ve que el hash "xyz123" corresponde a "apple" y nota que el hash de otro usuario también es "xyz123", puede concluir que la contraseña de ese usuario es "apple". Este es el punto donde la mayoría de las personas decide almacenar una sal única para cada usuario.

Sin embargo, esto es innecesario . Ya tiene una cadena única para cada usuario: el nombre de usuario. No es secreto, así que no es una buena sal; sin embargo, la concatenación del nombre de usuario y una sal secreta global es secreta y única. Si almacena el hash de (nombre de usuario + salt + contraseña), solo necesita conocer el valor de sal global único en el tiempo de búsqueda.

(Es cierto que esto plantea un mayor riesgo si alguien pierde la única sal global, pero es una técnica que vale la pena considerar).


Salt se genera aleatoriamente para cada usuario, pero se guarda en algún lugar de la base de datos. Busca la sal para el usuario particular y la usa para autenticar al usuario.

El punto es que, dado que la sal es diferente para cada usuario, no se puede usar un diccionario precompilado de hashes para mapear las contraseñas hash para borrar el texto ( ataque del arco iris ).


al crear la contraseña hash, debe usar sal "doble"

Cree un salt (al azar md5 o sha1) luego use format algo como sha1 ("- $ password - $ salt--") y luego almacene el hash y la contraseña en la base de datos.

Luego, al autenticar, recree el hash de - $ pass - $ salt-- cadena y compárelo con el pase almacenado en db.