Nuestros usuarios inician sesión con nombre de usuario / contraseña y tienen una cookie que les permite permanecer conectados. Se espera que nuestros usuarios ejecuten versiones actualizadas de JS.
Suponiendo que alguien saque nuestra base de datos en algún momento,
¿Es una buena idea reducir la entropía de nuestras contraseñas almacenadas al hacer que los usuarios realicen una prueba razonable de la tarea de trabajo al iniciar sesión y enviarla como contraseña, y aumentar la dificultad a lo largo de los años?
Lo que esto hace:
- protege a los usuarios para que no se agrieten sus contraseñas débiles y se asocien con sus identidades en línea
Lo que esto no hace:
- proporcionar una clave de sesión
- proporcionar protección DDoS
- proporcionar cualquier otro servidor de seguridad
registro / inicio de sesión en el lado del cliente:
h = password
d = "0000f"
do:
h = hash (h + username + salt)
while (h > d)
send("login", username, h)
inicio de sesión del servidor:
d = "0000f"
listen("login", username, h)
if h > d:
user = database.get(username)
if user.pass == h:
send("accepted", true)
session.user = user
inicio de sesión en el lado del cliente 2:
listen("accepted", accepted)
if accepted:
set cookie("user", user)
set cookie("h", h)
La ventaja de esto es que el usuario no tiene que volver a enviar su contraseña para actualizar la dificultad.
He implementado este protocolo, pero no lo he visto en ningún otro lugar. Y la primera ley de la criptodinámica es "Nunca harás tu propia".
Si esto funciona, me encantaría verlo incorporado en un certificado para mostrar al usuario que el servidor almacena los secretos del usuario de manera responsable.