Ho una soluzione parziale alla tua domanda originale. Da quello che ottengo, la tua intenzione è di verificare se un determinato numero di persone utilizza le stesse password.
Le risposte qui finora sembrano andare più nella direzione delle password sicure, il che è positivo.
Mentre dovresti assicurarti password "forti", penso che non vuoi che un certo numero di persone utilizzi la stessa password, per quanto sicuro sia considerato.
Che cosa succede se lo fai? Mantieni un elenco di semplici hash non salati di password utente sul punto di registrazione. Come un hash SHA-512. (potresti anche fare ripetuti hash un certo numero di volte solo tu lo sai) L'elenco non ha nomi utente, solo hash delle password che possono essere di chiunque. Potresti anche andare oltre e implementarlo in una tabella, in modo tale che questo hash di pre-accettazione abbia un contatore a fianco, mostrando il numero di persone che usano una particolare password sul tuo sito. Nota che non c'è modo di dire la password originale.
Naturalmente, quando in realtà stai memorizzando il nome utente / password nel database, salirai e cancellerai l'hash. L'elenco di cui sopra è solo un elenco casuale di hash pre-salati di password insieme al numero di volte in cui è stato generato l'hash.
Ora, quando un nuovo utente sceglie una password, esegue l'hashing di pre-accettazione e controlla se tale hash è già presente nell'elenco e, in caso affermativo, quante volte è stato utilizzato l'hash? Se è stato utilizzato fino al numero massimo di volte che hai deciso, rifiuta semplicemente la password. All'ingresso di una password "riuscita", inserisci il nuovo hash pre-salato nell'elenco.
Idealmente, se gli utenti utilizzano password "forti" seguendo i criteri indicati da altre persone, il contatore di ciascun hash nell'elenco dovrebbe essere esattamente 1.
La soluzione è sicura, poiché anche se un utente malintenzionato ruba la lista non può utilizzare l'hash per accedere, in quanto non è la stessa dell'hash salato reale nel database. Inoltre è possibile utilizzare diversi algoritmi di hashing per frustrare il cracking. Questo, ovviamente, non significa che l'attaccante non possa provare i soliti mezzi che altri hanno menzionato. Quello che sto dicendo è che questa soluzione non compromette in alcun modo la sicurezza dei tuoi utenti.
Il lato negativo (e perché ho detto che è una soluzione parziale) è che se lo stesso utente cambia la sua password 3 volte al giorno, l'elenco viene modificato con l'hash pre-salato di ciascuna di queste password, anche se in realtà, nessuno sta usando nessuno di loro. E non c'è modo di verificare chi ha fornito quale hash come l'elenco, per ovvi motivi, non contiene nomi utente. È molto anonimo e dovrebbe essere!
In realtà c'è una correzione al ribasso, ma penso che sia meglio non menzionare.
Fatemi sapere cosa ne pensate! Grazie e Dio ti benedica.