¿Cómo sabe Yahoo que mi nueva contraseña es similar a la anterior? ¿Qué tipo de algoritmo están usando para ‘similitud’?

Cómo podría estar pasando esto

Cuando voy al Yahoo! página de cuenta y cambiar mi contraseña, se me pide que proporcione mis contraseñas actuales y nuevas:
En este caso, determinar si mi nueva contraseña es “demasiado similar” a mi contraseña anterior es computacionalmente muy fácil: Yahoo solo necesita calcular la distancia de edición entre estas dos cadenas de entrada. Cómo escribir un corrector ortográfico de Peter Norvig proporciona una muy buena introducción a la herramienta de “ejemplo de trabajo real” para “editar distancia”. La idea es que es computacionalmente bastante fácil determinar, dadas dos cadenas, cuántas eliminaciones / adiciones / transposiciones tiene que hacer para pasar de una a otra.

Estoy a punto de comenzar a inventar cosas sin conocimiento interno y sé que esto te frustrará, pero ::

Si se le pide que cambie su contraseña y no haya proporcionado su contraseña anterior muy recientemente (en la misma página o en una página muy reciente), esto sugiere que Yahoo no tiene acceso a su contraseña anterior cuando le pide que establezca ¡uno nuevo, que es genial! ¿Puedes mostrar una captura de pantalla de este flujo de trabajo? (¿Escribe su contraseña anterior correctamente en la página anterior inmediata?).

Una forma en que esta verificación de similitud podría suceder computacionalmente se basa en el hecho de que conoce la “nueva contraseña” y aún puede iniciar sesión con la “contraseña anterior” actual:

  1. Enumere todas las cadenas de distancia de edición 3 desde la “nueva contraseña” que acaba de escribir.
  2. Para cada una de esas cadenas, verifique si es 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 verificación tiene éxito para cualquiera de las cadenas generadas, entonces su nueva contraseña es demasiado similar a su contraseña anterior.

Para una cadena corta (decenas de caracteres), este es un conjunto bastante pequeño de hashes para calcular y verificar. Suponiendo que hay 256 caracteres distintos permitidos en una contraseña, entonces creo que según el informe de Norvig sobre los correctores ortográficos hay [math] 514n + 255 [/ math] cadenas distintas que editan la distancia 1 desde una contraseña de longitud n.

Entonces, por ejemplo, hay unas 470,505 cadenas que son editadas a distancia 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 generar todas estas suposiciones y validarlas con su contraseña actual. (Los hash de contraseña se pueden verificar 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 aumenta las probabilidades de que alguien que no sea usted obtenga acceso a su cuenta.

Es bastante común en los sistemas Unix que le digan “su contraseña es muy similar a la actual, intente otra cosa”. Esto se puede atribuir a los sistemas que invocan el comportamiento del módulo estándar pam_cracklib para verificar que la contraseña sea “segura” ( no se parece mucho a una palabra del diccionario o la contraseña anterior, entre otras verificaciones). La distancia de edición predeterminada es 5 (inserciones, eliminaciones o sustituciones de cinco caracteres).

Decirle a la gente “su contraseña es muy similar a la que ya ha usado” evita el siguiente ataque:

  1. Su cuenta en algún otro sitio web se ve comprometida y su nombre de usuario y contraseña, “timmy” y “mypass”, son robados.
  2. Recuerdas que usas el mismo nombre de usuario y contraseña en Yahoo, así que vas a Yahoo y cambias tu contraseña. Para que no tenga que recordar nada nuevo, cambie su contraseña a “mypass1”.
  3. Alguien compra su nombre de usuario y contraseña del atacante que robó credenciales en masa, y decide que quiere apuntar a su cuenta específicamente para comprometerla. Trabajando a partir de sus últimas credenciales conocidas (nombre de usuario “timmy” y contraseña “mypass”) primero prueban la contraseña “mypass”, luego “mypassA”, luego “mypass1” y acceden a su cuenta.

Otro posible problema que esta restricción de contraseña intenta resolver es “clingy ex conoce tus contraseñas antiguas, así que las cambias pero no mucho”

Personalmente, estoy de acuerdo con el que hace la pregunta de que este tipo de requisitos estrictos de contraseña son una gran molestia cuando se combinan con eventos que no indican que su contraseña ha sido comprometida.

Si su contraseña se ha filtrado por un compromiso del sitio de Gawker, claro, lo suficientemente justo, también podría asegurarse de que la nueva sea segura. Pero si solo se ve obligado a cambiar la contraseña porque la equivocó y la escribió tres veces, es una gran molestia tener que elegir una nueva contraseña y obligar a las personas a hacerlo garantiza que elegirán contraseñas menos seguras que pueden recordar y escribir con mayor facilidad que apenas cumplen con los requisitos de seguridad relevantes.

Respuesta rápida:

Usan un ‘hash’. (Estoy adivinando)

Si guardan un hash de su contraseña, pueden saber sin saber su contraseña si su contraseña ya la ha usado 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:

  • Yo puedo :
  • hash tu contraseña con mi algoritmo hash (en memoria, solo una vez)
  • tira tu contraseña
  • guardar el hash
  • Entonces puedo:
    • decirte mi algoritmo hash
    • puedes hash tu contraseña
    • Puedes enviarme el hash.
  • Entonces puedo:
    • compara 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
    • ingeniería inversa de ese hash guardado a su contraseña

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

    Estoy seguro de que Michael McGraw-Herdeg tiene razón, sin embargo, fue tl; dr para mí.

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

    Espero que ayude.

    Señor, (Señor honorable)

    Una forma posible es almacenar las contraseñas antiguas en una columna de la base de datos. Cuando el usuario ingresa una nueva contraseña, el sistema buscará el valor de esa columna como una matriz.

      $ oldPasswords = ['yash', 'kumar', 'verma'];
    

    luego ingresamos una nueva contraseña como entrada. entonces hay dos opciones. Puede procesarlo mediante la solicitud de AJAX al servidor utilizando un script que reside en el servidor web, o guardar la $oldpassword como una variable en Javascript.

    Cuando nos alejamos del campo de contraseña (onblur), compara las dos contraseñas con algunas funciones específicas.

      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 sobre los demás. Tal vez puedan recomendar algunos mejores.

    Gracias

    Lo almacena de que otra forma.

    Hay dos cosas. cuando olvida su pase, no es como TI no lo recuerda … almacena todas sus contraseñas antiguas, ya sea que RECUERDE o no en su base de datos.

    Es probable que haya un registro tan largo que tenga todas sus contraseñas. Por lo tanto, si alguien piratea su cuenta, tiene su pase, lo obligan a elegir una diferente para que el pirata informático no vuelva a hackear su cuenta si es la misma o similar. por lo tanto, algo similar, igual o la misma teoría si no es exacta para un registro estaría en su lugar.

    Cuando un nuevo usuario se haya registrado en Yahoo, registre la información y la contraseña almacenadas en el servidor de bases de datos Yahoo. cuando un usuario ingresa una nueva contraseña, identifica una identificación única y su contraseña, luego compara entre dos contraseñas.

    Yahoo! sabe esto porque guarda un ‘hash’ de su contraseña. Yahoo! no tiene que saber su contraseña para saber que es similar.

    También pueden calcular la distancia de edición entre las dos frases, ya que debe ingresar su contraseña anterior para crear una nueva.

    Básicamente lo hace para que no puedas usar una contraseña que ya has usado con ellos. Esto es útil porque normalmente cambiaría su contraseña si ha sido pirateado, por lo que evita que los piratas informáticos pirateen su cuenta nuevamente, al menos disminuye las posibilidades.

    Les diste una buena pista.