Tengo una solución parcial a tu pregunta original. De uno que recibí, su intención es verificar si un número determinado de personas está usando las mismas contraseñas.
Las respuestas aquí hasta ahora parecen ir más en la dirección de contraseñas seguras, lo cual es bueno.
Si bien debe garantizar contraseñas 'seguras', creo que simplemente no desea que un cierto número de personas use la misma contraseña, por muy segura que esté.
¿Qué pasa si haces esto? Mantenga una lista de hashes simples sin sal de las contraseñas de los usuarios en el momento del registro. Como un hash SHA-512. (Incluso podría hacer repetidos hashes un cierto número de veces que solo usted sabe) La lista no tiene nombres de usuario, solo hashes de contraseña que pueden ser de cualquiera. Incluso podría ir más lejos e implementarlo en una tabla, de modo que este hash de aceptación previa tenga un contador al lado, que muestre el número de personas que utilizan una contraseña específica en su sitio. Tenga en cuenta que no hay forma de decir la contraseña original.
Por supuesto, cuando en realidad está almacenando el nombre de usuario / contraseña en la base de datos, saldrá un hash. La lista mencionada es solo una lista aleatoria de hashes de contraseñas presellados junto con el número de veces que se ha generado el hash.
Ahora, cuando un nuevo usuario elige una contraseña, realiza el hash previo a la aceptación y comprueba si ese hash ya está en la lista y, de ser así, ¿cuántas veces se ha utilizado el hash? Si se ha utilizado hasta el número máximo de veces que ha decidido, simplemente rechace la contraseña. Al ingresar una contraseña "exitosa", ingrese el nuevo hash preenselado en la lista.
Idealmente, si los usuarios utilizan contraseñas "seguras" siguiendo los criterios que otras personas han mencionado, el contador de cada hash en la lista debería ser exactamente 1.
La solución es segura, ya que incluso si un atacante roba la lista, no puede usar el hash para iniciar sesión, ya que no es lo mismo que el hash salado real en la base de datos. También puedes usar diferentes algoritmos de hashing para frustrar el cracking. Esto, por supuesto, no significa que el atacante no pueda probar los medios habituales que otros han mencionado. Lo que estoy diciendo es que esta solución no compromete en modo alguno la seguridad de sus usuarios.
El inconveniente (y por qué dije que es una solución parcial) es que si el mismo usuario cambia su contraseña 3 veces al día, la lista se modifica con el hash de presa de cada una de esas contraseñas, aunque en La realidad, nadie está usando ninguno de ellos. Y no hay forma de verificar quién suministró qué hash como lista, por razones obvias, no contiene nombres de usuario. Es muy anónimo, y debería ser!
En realidad, hay una solución a la baja, pero creo que es mejor dejarlo sin mencionar.
¡Déjame saber lo que piensas! Gracias y que Dios te bendiga.