Olvidó su contraseña: “La nueva contraseña debe tener un mínimo de 4 caracteres diferentes de la contraseña anterior” [duplicar]

8

Esto se encontró en una función de restablecimiento de contraseña de un sitio web del gobierno, donde ingresas tu nombre de usuario, luego te lleva a una pantalla donde puedes

  • ingresa una nueva contraseña
  • ingresar la confirmación de la nueva contraseña
  • responde a una pregunta de seguridad (sobre el nombre de tu primera mascota)

Y luego envíe el formulario, que cambia su contraseña.

Mis preguntas:

  1. ¿Cómo se almacena una contraseña de manera segura, pero aún así se puede hacer este tipo de validación, verificando que una nueva contraseña tenga al menos 4 caracteres diferentes de una contraseña antigua almacenada en la base de datos? Estoy buscando una explicación técnica de esto.
  2. ¿Estoy en lo cierto al decir que este flujo parece inseguro para empezar? Lo único que debe saber para cambiar la contraseña de alguien es su nombre de usuario y una única pregunta de seguridad.
pregunta Obversity 22.04.2017 - 05:46
fuente

3 respuestas

3

Es matemáticamente posible hacer lo que están haciendo de manera segura para almacenar contraseñas de manera que habilite esa función pero no tenga la contraseña antigua almacenada en texto sin formato. Pero solo porque es matemáticamente posible, no significa que sea probable.

Encriptación homomórfica

En Eurocrypt 2004, Michael Freedman, Kobbi Nissim y Benny Pinkas presentó un documento que abordaba explícitamente cómo encontrar de manera eficiente la intersección de dos conjuntos sin revelar el contenido de ninguno de los conjuntos (aparte de la intersección) a cualquiera que no lo tuviera antes. También es posible encontrar una estimación del tamaño de la intersección sin siquiera revelar (mucho acerca de) la intersección en sí.

Ahora que fue en 2004 (y se basó en el trabajo anterior). Así que ha habido mejoras desde entonces en este y otros algoritmos relacionados. Así que hay técnicas conocidas para descubrir cuántos caracteres son comunes a dos conjuntos sin revelar el contenido de ninguno de ellos. (En el caso de que esté preguntando, es solo un conjunto, la contraseña antigua, que debe ocultarse ya que el sistema recibe la nueva contraseña completa).

Filtros Bloom

Si estamos hablando de la superposición de secuencias de cuatro caracteres (en lugar de solo caracteres en ambas contraseñas), una forma razonablemente segura de hacerlo es con un Filtro Bloom . Un filtro Bloom es un tipo especial de tabla hash. Cada subcadena de cuatro caracteres de la contraseña original podría agregarse al filtro Bloom cuando esa contraseña se entregue al servicio y luego se pueden buscar las cuatro subcadenas de caracteres de la nueva contraseña en el filtro Bloom.

Tenga en cuenta que los filtros Bloom están diseñados para cuando hay muchos miembros del conjunto y son probabilísticos. Pueden dar falsos positivos.

La respuesta obvia es tristemente correcta

Me sorprendería si el sitio en cuestión utiliza cifrado homomórfico o incluso filtros Bloom. Es casi seguro que lo hacen de una manera en que los operadores del sitio (y cualquiera que los infrinja) tengan acceso a las contraseñas de texto sin formato.

    
respondido por el Jeffrey Goldberg 22.04.2017 - 18:42
fuente
3

Esto suena mal por varias razones.

  1. Las contraseñas se almacenan de una manera en que se pueden recuperar en texto claro, rápidamente, para que puedan compararse con las nuevas contraseñas.
  2. El almacenamiento de contraseñas claramente no está utilizando un hash de una sola vía.
  3. Si el sistema que almacena estas contraseñas se ve comprometido, el atacante posteriormente tendrá acceso a las contraseñas reales de todos los miembros de la organización.
  4. El uso de un nombre de mascota para una pregunta de seguridad es malo porque para muchas personas esto es información pública y no un secreto.
  5. No especificó, pero si el proceso de restablecimiento de la contraseña no utiliza un método de verificación fuera de banda (como el correo electrónico o SMS, que tienen sus propios problemas) para autenticar que un usuario válido cambió su contraseña, pero permite el acceso directo a cualquier atacante que solicite un cambio de contraseña que sea realmente malo.

Nota: no especificó su ubicación, pero mencionaré que he visto más organizaciones gubernamentales y militares, con una seguridad increíblemente horrible en algunos lugares. Esto sucede, no debería, pero ocasionalmente sucede.

    
respondido por el Trey Blalock 22.04.2017 - 06:02
fuente
1

Es una pregunta realmente interesante sobre cómo almacenar de forma segura una contraseña, pero aún así ser capaz de hacer este tipo de validación, verificando que una nueva contraseña tenga al menos 4 caracteres diferentes de una contraseña antigua almacenada en la base de datos.

Si uno diseñara una manera de almacenar de forma segura la contraseña, pero aún así permita este tipo de validación, podría hacerse de la siguiente manera:

  1. Tome todas las letras de la contraseña y clasifíquelas por orden alfabético y único. Es importante ordenarlos y eliminar los duplicados, de lo contrario, guardará la contraseña completa.
  2. Hash la contraseña de forma segura (PBKDF2 o crypt).
  3. Almacena la lista de letras y el hash. No almacene la contraseña real.

    • contraseña original : ¡este ha sido un mensaje de voz real!
    • letras almacenadas :! 0Sadehilmoprstwy
    • hash almacenado : (hash Sha512)

Esta es la forma en que usted podría realizar un seguimiento completo de las letras utilizadas, sin almacenar la contraseña real. Sigue siendo una idea terrible, porque si alguien tuviera acceso a la base de datos, facilitaría mucho descifrar las contraseñas.

    
respondido por el Nik Roby 22.04.2017 - 06:36
fuente

Lea otras preguntas en las etiquetas