php - password - Sal y contraseñas
hash sql server 2014 (6)
No use
MD5
como su algoritmo de hash, use algo más seguro comoSHA256
o inclusobcrypt
.Definitivamente agregue la contraseña, si alguien lograra ingresar a su base de datos, no podría revertir las contraseñas de hashes comunes o usar técnicas como los ataques de arco iris.
Posible duplicado:
Hash y sal seguros para las contraseñas de PHP
ADVERTENCIA No use MD5 para contraseñas, use una alternativa como bcrypt
Para mis contraseñas, debo usar sal como esta (la sal será única para cada usuario y no se almacenará directamente con la contraseña) ...
$salt = sha1(md5("coders gonna code"));
$password = md5($salt.$password);
o estaría bien si solo usara:
$password = md5($password);
porque si usara sal, incluso si el usuario inventa una contraseña incorrecta como la contraseña, no importará porque la sal (en este caso) será 145ac26ff093c6e1317f7d5fb4c9fd11c77be975
por lo que la entrada para la contraseña será 145ac26ff093c6e1317f7d5fb4c9fd11c77be975password
para que la contraseña sea http://howsecureismypassword.net/
tardaría 3 octodecillones años en romperse ... ¿Entonces las opiniones? O debería ser aún peor e irme
$password = md5($salt.$password.md5($salt));
Si la persona ha ido lo suficientemente lejos como para obtener el hachís de sal, ¿algo podría detenerse y luego ir más lejos? <Más de una declaración esta última contraseña
A todos los que dijeron que debería hacerlo por usuario ... Lo sé, esto es solo un ejemplo.
Creo que la sal se entiende aquí incorrectamente. La idea de la sal es que debe ser única por hash. La razón es que cuando se crea un hash, algunas cadenas diferentes pueden tener el mismo hash.
En su ejemplo, también está la contraseña de hash para que no se vea como: 145ac26ff093c6e1317f7d5fb4c9fd11c77be975password
PS Use bcrypt. Es mucho más confiable.
Debe cambiar la sal para que sea específica para cada usuario, no una constante de todo el sistema. Esto hará que los ataques de la tabla arco iris contra los hash de sus contraseñas sean mucho más inconvenientes.
Hay un buen artículo sobre la evolución de la salazón en este article de Troy Hunt.
Editar
$salt
agregue algo único a cada registro de contraseña, lo que le agrega mucha entropía. Esto suele ser una secuencia aleatoria de bytes, almacenada con la cuenta de usuario.
El hash se realiza tradicionalmente en la concatenación de salt
+ password
.
$passwordHash = hash($salt.$password);
Como han dicho otros, no use MD5 para el hashing. Está roto.
No se recomienda aplicar algoritmos patentados adicionales a la contraseña o al salt antes del hashing. En su lugar, busque una solución PBKDF2 industria, como PBKDF2 , que, además de la salazón, también requiere muchas repeticiones (generalmente> 10k) que harán que el atacante sea más lento.
Si adopta las pautas de OWASP , la cantidad de hashes debe incrementarse regularmente (para contrarrestar la Ley de Moore). El número de hashes también debe persistir por usuario, lo que significa que tendrá que almacenar el triple de contraseña hash, salt y número de iteraciones.
En primer lugar, nunca debe almacenar md5 directamente, lo cual ya reconoció. PHP 5.5 traerá nuevos métodos para crear y verificar contraseñas fácilmente en 1 línea, hasta que pueda usar https://github.com/ircmaxell/password_compat (compatible con versiones posteriores) para generar y verificar los hashes de contraseña seguros.
Está utilizando la sal totalmente incorrectamente. Las sales deben ser impredecibles; tu sal es exactamente lo opuesto a eso (fijo). Dado que un hash fijo no tiene ningún beneficio en absoluto, también parece que está contando con que la sal no sea conocida por el atacante. Esta es la definición de seguridad a través de la oscuridad, que es otra mala práctica.
Lo que deberías estar haciendo es:
- Use una cadena impredecible de longitud razonable como la sal. Las cadenas de 8 caracteres generadas aleatoriamente desde un grupo, como las letras mayúsculas / minúsculas y los dígitos, están bien.
- Use una sal diferente para cada usuario y cámbiela cada vez que cambien su contraseña.
- Pase de MD5 (que se considera roto) a otra función hash más adecuada para esta aplicación. SHA-1 es mejor porque no se considera roto;
bcrypt
es el mejor porque tiene un factor de carga configurable.
Las sales deben ser completamente aleatorias y no están relacionadas con la contraseña real en la que está almacenando un hash.
Lo que realmente deberías hacer es generar una sal completamente al azar, luego haz
$password = md5($salt.$password);
y almacene el nombre de usuario, la sal y la contraseña de hash.