Index » Conocimiento

¿Cómo sabe Yahoo que mi nueva contraseña es similar a la antigua?

March 1300AdminInternet
Advertisement

He visto esta pregunta hecha en varios lugares en la red, pero no he visto una respuesta técnicamente sofisticada.

En Yahoo si necesitas cambiar tu contraseña (que te obligan bastante a menudo si lo malinterpretas), de alguna manera ellos evalúan la nueva contraseña para determinar si es "similar" a la anterior.

Esto es, por supuesto increíblemente molesto para alguien que utiliza contraseñas fuertes. Es fuerte porque es largo, y porque es largo, voy a escribirlo de alguna manera.

Me pregunto si alguien puede responder con cualquier conocimiento real o especulación razonable qué tipo de algoritmo que están utilizando para la "similitud".

Y si alguien de Yahoo quisiera defender la práctica, que considero completamente inútil desde el punto de vista de la seguridad, me encantaría escuchar eso también.


Cómo podría estar pasando esto

Cuando voy a la página de la cuenta de Yahoo! y cambio mi contraseña, se me pide que proporcione mi contraseña actual y la nueva:

¿Cómo sabe Yahoo que mi nueva contraseña es similar a la antigua?

En este caso, determinar si mi nueva contraseña es "demasiado similar" a mi contraseña antigua es computacionalmente muy fácil - Yahoo sólo tiene que calcular la distancia de edición entre estas dos cadenas de entrada. Peter Norvigs Cómo escribir un corrector de ortografía proporciona una muy buena introducción de herramienta de ejemplo real de herramienta para "editar distancia". La idea es que es computacionalmente bastante fácil de determinar, dado dos cuerdas, cuántas supresiones / adiciones / transposiciones que tiene que hacer para llegar de uno a otro.

Estoy a punto de empezar a hacer cosas sin conocimiento interno y sé que esto te frustra, pero:

Si se le pide que cambie su contraseña y no haya suministrado recientemente su antigua contraseña (en la misma página o en una página muy reciente), esto sugiere que Yahoo no tiene acceso a su contraseña antigua cuando le pide que configure Una nueva, que es bastante guay !! ¿Puede mostrar una captura de pantalla de este flujo de trabajo? (¿Escribe su contraseña antigua correctamente en la página anterior inmediata?).

Una forma en que esta comprobación de similitud podría ocurrir computacionalmente se basa en el hecho de que conoce la "nueva contraseña" y aún puede iniciar sesión con la actual "contraseña antigua":

  1. Enumerar todas las cadenas de la distancia de edición 3 de la "nueva contraseña" que acaba de escribir.
  2. Para cada una de esas cadenas, compruebe si se trata de su contraseña actual (utilizando los mismos métodos de inicio de sesión, por ejemplo, comparando un hash de esta cadena con el hash almacenado de su contraseña actual).
  3. Si esta comprobación tiene éxito para cualquiera de las cadenas generadas, entonces su nueva contraseña es demasiado similar a su contraseña antigua.

Para una cadena corta (decenas de caracteres) este es un conjunto bastante pequeño de hashes para calcular y comprobar. Suponiendo que hay 256 caracteres distintos permitidos en una contraseña, entonces creo que por Norvig escribiendo en corrector ortográfico hay [math] 514n + 255 [/ math] cuerdas distintas editar distancia 1 de una contraseña de longitud n.

Así, por ejemplo, hay unas 470.505 cadenas que son la distancia de edición 2 de una contraseña de treinta caracteres. Dependiendo de cómo se almacenan internamente las contraseñas hash, a Yahoo le tomaría una pequeña fracción de segundo para generar todas estas conjeturas y validarlas contra su contraseña actual. (Los hashes de contraseñas se pueden comprobar a una velocidad de miles de millones por segundo con hardware y software modernos).

(No publican una lista completa de caracteres de contraseña permitidos pero dicen que permiten letras, números y símbolos y requieren una longitud de 8-32 caracteres: requisitos de contraseña de Yahoo).

¿Por qué la gente se molesta en hacer esto?

La similitud con las contraseñas antiguas es un indicador común de una contraseña "débil" en el sentido de que incrementa las probabilidades de que alguien que no tenga acceso a su cuenta.

Es bastante común en los sistemas Unix que se le diga "su contraseña es muy similar a la actual, por favor, intente otra cosa" - esto puede atribuirse a los sistemas invocando el comportamiento del módulo estándar pam_cracklib para comprobar que la contraseña es "segura" No se parece mucho a una palabra de diccionario o la contraseña antigua, entre otras comprobaciones). La distancia de edición predeterminada es 5 (cinco inserciones de caracteres, supresiones o sustituciones).

Diciendo a la gente "su contraseña es demasiado similar a la que ya ha utilizado" impide el siguiente ataque:

  1. Su cuenta en algún otro sitio Web está comprometida y su nombre de usuario y contraseña, "timmy" y "mypass", son robados.
  2. Recuerda que usas el mismo nombre de usuario y contraseña en Yahoo, así que vas a Yahoo y cambias tu contraseña. Así que no tienes que recordar nada nuevo, cambias tu contraseña a "mypass1".
  3. Alguien compra su nombre de usuario y contraseña al atacante que robó las credenciales en masa y decide que desea orientar su cuenta específicamente por compromiso. Trabajando desde sus últimas credenciales conocidas (nombre de usuario "timmy" y contraseña "mypass") primero pruebe la contraseña "mypass", luego "mypassA", luego "mypass1" y acceda a su cuenta.

Otro posible problema que esta restricción de contraseña intenta resolver es "clingy ex conoce tus viejas contraseñas para que las cambies pero no mucho"

Personalmente, estoy de acuerdo con la pregunta asker de que estos tipos de requisitos de contraseña estrictos son una molestia enorme cuando están acoplados con eventos que no indican que su contraseña ha sido comprometida.

Si su contraseña ha sido filtrada por un compromiso del sitio de Gawker, seguro, bastante justo, también podría asegurarse de que el nuevo es seguro. Pero si solo te están forzando a cambiar la contraseña porque has estropeado y has cometido errores en la contraseña tres veces, es una gran molestia tener que elegir una nueva contraseña y obligar a las personas a hacerlo asegura que escogerán contraseñas menos seguras Que pueden recordar y mecanografiar más fácilmente que apenas apenas cumplen con los requisitos de seguridad relevantes.


Respuesta rápida:

Ellos usan un "hash". (Estoy adivinando)

Si guardan un hash de su contraseña, pueden decir sin saber su contraseña si su contraseña es una que ya ha utilizado con ellos.

Respuesta larga:

(Wikipedia: Una función hash es cualquier función que se puede utilizar para asignar datos de tamaño arbitrario a datos de tamaño fijo).

Entonces, lo que esto significa es:

  • Puedo :
    • Hash su contraseña con mi algoritmo hash (en la memoria, una sola vez)
    • Tira tu contraseña
    • Guardar el hash.
  • Entonces puedo:
    • Te digo mi algoritmo hash
    • Puede hash su contraseña
    • Usted puede enviarme el hash.
  • Entonces puedo:
    • Comparar mi hash y tu hash, sin saber tu contraseña
    • Lo que significa que puedo decirle si su contraseña coincide con mi copia guardada de su contraseña sin guardar su contraseña
  • No puedo
    • Invierta el ingeniero de ese hash guardado a su contraseña

Si desea una respuesta más sofisticada técnicamente que eso, por favor agregue los comentarios.


Estoy seguro de que Michael McGraw-Herdeg es correcto, sin embargo, fue dr para mí.

Puedo tener una respuesta más fácil, más corta. Los perfiles de usuario sólo se almacenan en una base de datos. Así que cada campo tiene una columna. Por lo tanto, una columna tiene su contraseña almacenada en ella como referencia. Ahora, dependiendo de los niveles de cifrado, es posible que se almacene como una cadena de caracteres realmente incomprensible. Y si la misma contraseña se almacena de la misma manera, cada vez, (que todo esto es posible, lo he visto) sería una simple cuestión de buscar en las tablas de sombra y hacer una declaración de comparación para ver si son idéntico.

Espero que ayude.


Señor, (Honorable Señor)

Una forma posible es almacenar las contraseñas antiguas en una columna de la base de datos. Cuando el usuario introduce una nueva contraseña, el sistema obtendría ese valor de columna como una matriz.

<Php>

  $ OldPasswords = [yash, kumar, verma]; 

Entonces entramos nueva contraseña como entrada. Entonces hay dos opciones. O $oldpassword a través de la $oldpassword AJAX al servidor mediante un script que reside en el servidor web, o para guardar el $oldpassword como una variable en Javascript.

Cuando estamos más fuera del campo de contraseña (onblur), entonces compara las dos contraseñas con algunas funciones specofic.

  Var oldPassword = phpVatiablePutHere;  Var newPassword = Valor de la nueva contraseña del formulario;  If (isSimilar (oldPassword, newPassword) == 1) {alert (Las contraseñas son similares!);  } 

Sin embargo, hay muchos otros métodos y este método es uno de ellos. Este método es lo que recomiendo, no estoy seguro acerca de los demás. Quizás pueden recomendar algo mejor.

Gracias