Algunas veces intenté cambiar una contraseña de usuario en varias máquinas Linux y cuando la nueva contraseña era similar a la anterior, el sistema operativo se quejó de que eran demasiado similares.
Siempre me pregunté, ¿cómo sabe esto el sistema? Pensé que la contraseña se guarda como un hash. ¿Significa esto que cuando el sistema puede comparar la nueva contraseña por similitud, la antigua realmente se guarda como texto sin formato?
Respuestas:
Dado que debe proporcionar tanto la contraseña antigua como la nueva cuando se usa
passwd
, se pueden comparar fácilmente en texto sin formato, en memoria, sin escribirlas en algún lugar de la unidad.De hecho, su contraseña se codifica cuando finalmente se almacena, pero hasta que eso suceda, la herramienta donde está ingresando su contraseña puede, por supuesto, acceder directamente como cualquier otro programa puede acceder a las cosas que ingresó en su teclado mientras leía desde STDIN.
Esta es una característica del sistema PAM que se utiliza en el fondo de la
passwd
herramienta. PAM es utilizado por las distribuciones modernas de Linux.Más específicamente,
pam_cracklib
es un módulo para PAM que permite rechazar contraseñas basadas en varias debilidades que las harían muy vulnerables.No solo las contraseñas que son demasiado similares pueden considerarse inseguras. El código fuente tiene varios ejemplos de lo que se puede verificar, por ejemplo, si una contraseña es un palíndromo o cuál es la distancia de edición entre dos palabras. La idea es hacer que las contraseñas sean más resistentes a los ataques de diccionario.
Ver también la página de
pam_cracklib
manual.fuente
Al menos en mi Ubuntu, los mensajes "demasiado similares" aparecen
cuando: "... más de la mitad de los personajes son diferentes ..." (ver más abajo para más detalles).gracias al soporte de PAM, como se explica claramente en la respuesta @slhck.Para otra plataforma, donde no se utiliza PAM, los mensajes "demasiado similares" aparecen cuando: "... más de la mitad de los caracteres son diferentes ..." (ver más abajo para más detalles)
Para verificar esta declaración por su cuenta, es posible verificar el código fuente. Aquí es cómo.
El programa "passwd" está incluido en el paquete passwd:
Como estamos tratando con tecnologías de código abierto, tenemos acceso ilimitado al código fuente. Conseguirlo es tan simple como:
Después es fácil encontrar el fragmento de código relevante:
Una comprobación rápida de "obscure.c" muestra esto (estoy cortando y pegando solo el fragmento de código relevante):
Entonces, ahora, sabemos que hay una función "similar" que se basa en el antiguo y el nuevo para verificar si ambos son similares. Aquí está el fragmento:
No he revisado el código C. Me limité a confiar en el comentario justo antes de la definición de la función :-)
La diferenciación entre las plataformas con reconocimiento PAM y NO PAM se define en el archivo "obscure.c" que está estructurado de la siguiente manera:
fuente
passwd
pida contraseñas antiguas y nuevas es la respuesta . El resto de esta respuesta es irrelevante.La respuesta es mucho más simple de lo que piensas. De hecho, casi califica como magia, porque una vez que explicas el truco, desaparece:
Sabe que tu nueva contraseña es similar ... Porque escribiste la anterior solo un momento antes.
fuente
Aunque las otras respuestas son correctas, vale la pena mencionar que no necesita proporcionar la contraseña anterior para que esto funcione.
De hecho, uno puede generar un montón de contraseñas similares a la nueva contraseña que proporcionó, aplicarles un hash y luego verificar si alguno de estos hashes coincide con el anterior. Si este es el caso, ¡la nueva contraseña se considera similar a la anterior! :)
fuente
n
), que es62 * (n!)/(6 * (n - 3)!)
igual a 13540 para una contraseña de 12 caracteres. Pero si alguien piensa en algo diferente, la ecuación es inútil, entonces, ¿por qué molestarse?Un aspecto no estaba cubierto: el historial de contraseñas. Algunos sistemas lo admiten. Para hacerlo, mantiene un historial de contraseñas y las cifra con la contraseña actual. Cuando cambia su contraseña, utiliza la contraseña "antigua" para descifrar la lista y verificar. Y cuando establece una nueva contraseña, guarda la lista (nuevamente) encriptada con una clave derivada de la nueva contraseña.
Así es como
remember=N
funciona en PAM (almacenado en/etc/security/opasswd
). Pero también Windows y otros proveedores de Unix ofrecen funciones similares.fuente