Autenticar el hash en salado sin nombre de usuario

-1

Tengo una página con un sistema de inicio de sesión donde escribes tu nombre de usuario y contraseña, el hash con sal se elimina de la base de datos según el nombre de usuario ...

SELECT hash FROM db WHERE username = ?
bind theSubmittedUsername

La contraseña potencial se ejecuta luego a través de un método para verificar si es la correcta o no.

Es posiblemente posible deshacerse del cuadro de entrada del nombre de usuario, por lo que solo se requiere una contraseña para autenticar al usuario.

SELECT hash FROM db WHERE .... 

Estaba pensando que quizás 2 letras de cada contraseña podrían almacenarse en la base de datos en texto sin formato y luego podría hacer algo como ...

SELECT hash, username FROM db WHERE 2letters = ?
bind the2LettersOfPass

luego ejecute los hashes devueltos desde la base de datos a través de la función de comparación, ¿hay alguna forma mejor que sea más segura?

    
pregunta Crizly 10.09.2014 - 23:26
fuente

3 respuestas

9

Eso es realmente una idea muy mala . Considere a dos personas usando una contraseña similar donde las dos letras coinciden. ¿Cómo podrás distinguir entre los dos? No.

Usamos el nombre de usuario y la contraseña para identificar a alguien. Si solo necesita proteger la aplicación, también podría compartir una contraseña, ya que parece que no le importa la responsabilidad.

    
respondido por el Lucas Kauffman 10.09.2014 - 23:34
fuente
8

No, esto no es posible.

  • Una sal lo protege de las colisiones en la contraseña con hash, no de las colisiones en la contraseña de texto sin formato. Si dos usuarios tienen la misma contraseña, tendrá dos combinaciones de contraseña / sal / hash que pasan su validación y no podrá distinguir entre los usuarios.

  • Los problemas que tiene con la forma de buscar a los usuarios se deben a que no tiene una clave principal. No puede usar una contraseña como clave principal a menos que rechace activamente contraseñas duplicadas (y en cuyo caso acaba de decirle la contraseña de alguien al atacante).

  • Un nombre de usuario puede ser una fuente de entropía. Es más probable que "Buscar cualquier usuario con una contraseña de prueba" devuelva un resultado que "Encontrarme usuario abc con prueba de contraseña". Un atacante oportunista probablemente podría encontrar una cuenta al intentar contraseñas comunes.

Utilice una cookie de inicio de sesión persistente para lograr su objetivo.

    
respondido por el thexacre 11.09.2014 - 00:07
fuente
1

La forma tradicional de evitar que el usuario tenga que escribir un nombre de usuario es incluir la funcionalidad "recordarme" donde el nombre de usuario se mantiene de una manera que está asociada con el navegador, por ejemplo. una cookie cifrada o una cookie que contiene un token duradero (por ejemplo, 30 días) que el servidor puede usar para inferir el nombre de usuario.

Algunas de las respuestas aquí sostendrán que el nombre de usuario proporciona entropía adicional. Puede tratar esta objeción solicitando una contraseña que sea el doble de larga. Por supuesto, este tipo de cancela el beneficio de la escritura reducida, ya que ahora el usuario tiene que escribir tantas cosas, con la dificultad añadida de la entrada enmascarada.

Si insiste en utilizar un diseño sin nombre de usuario, hay una serie de características comunes que dependen del nombre de usuario con las que tendrá que averiguar cómo lidiar de otra manera:

  1. Bloqueo de autenticación. Si el usuario no ha proporcionado un nombre de usuario o una contraseña correcta, ¿dónde guarda el contador de bloqueo?

  2. Recuperación de contraseña. ¿Qué escribe el usuario en el flujo de trabajo de "Contraseña olvidada" que le permite identificarse? (Supongo que este problema no es más difícil de resolver que la función "olvidé el nombre de usuario").

  3. Detección de colisión de ID de usuario. ¿Qué mensaje mostraría en lugar de "Ese nombre de usuario ya está en uso por otro usuario"? Estoy pensando en un mensaje como "felicidades, ¡acabas de adivinar la contraseña de otra persona!" no aprobaría la revisión de seguridad.

  4. Auditabilidad y atención al cliente. ¿Qué cadena emite su aplicación en los registros de auditoría, los registros de depuración u otras tablas o archivos, que un desarrollador o técnico de soporte puede reconocer en el soporte técnico del cliente? Seguramente no la contraseña. Además, ¿qué ofrece el cliente por teléfono cuando solicita asistencia, si no es el nombre de usuario?

También tendrá problemas si intenta alcanzar el cumplimiento con PCI-DSS (por ejemplo, si necesita aceptar tarjetas de crédito), el cumplimiento con la FDIC (si trabaja con bancos) o el cumplimiento con la norma ISO (si trabaja con agencias gubernamentales) .

    
respondido por el John Wu 27.06.2015 - 02:10
fuente

Lea otras preguntas en las etiquetas