Non esiste un modo valido. Quello che dici, è praticamente la misurazione della distanza della password in la nostra mente . È chiaramente impossibile avere un metodo diretto per farlo.
La seconda cosa, quello che vuoi misurare, dipende pesantemente dalla persona, e spesso contiene solo per lui informazioni conosciute. Ad esempio, uno dei tuoi colleghi potrebbe usare il nome di suo figlio sui diversi server aziendali. Non è possibile creare una soluzione software per trovare questo, ma alcuni hacker / colleghi possono avere queste informazioni e usarle per craccare il suo account.
Ciò che puoi fare, è stato un passo in avanti verso la NSA: sebbene tu non possa spiare direttamente la mente della gente, puoi usare i Big Data per emularne alcuni molto simili.
Cosa ti serve: informazioni disponibili pubblicamente in rete. Ad esempio:
- Thesaurus
- Wikipedia (anche se non esiste un modo semplice per misurare la distanza di collegamento tra due parole chiave, il suo database è semplicemente scaricabile e puoi creare uno script per analizzare la sua connettività di collegamento).
- O semplicemente potresti fare ricerche google automatizzate con google search api , e ottenere il rapporto di hit tra il primo, tra la seconda password e tra una doppia query (ad esempio, se la prima password è "apple" e la seconda è "orange", quindi
Hits("apple")*Hits("orange")/Hits("apple", "orange")^2
deve essere inferiore a un limite sperimentale impostato dall'utente).
Ma attenzione: non eseguire query contenenti le password in un cloud pubblico non affidabile, si trattava di una violazione della sicurezza molto seria! Naturalmente, dipende solo dai vostri punti di vista / considerazioni / responsabilità, che il cloud pubblico è affidabile per te. Per me, nessuno era.
Al posto tuo ho fatto quanto segue:
- Ricevo un mirror wikipedia (hanno un semplice database mysql che è pubblicamente scaricabile)
- Crea una mappa delle distanze dei collegamenti (era molto semplice, anche se forse era grande)
- Ho creato per le due password il confronto con il titolo dell'articolo wikipedia più vicino (era necessario un notevole confronto con levenshtein, quindi avrai bisogno di molta CPU)
- Finalmente ho usato la seguente formula: D ("pwd1", "pwd2") = Levensheiten ("pwd1", Lev_nearest ("pwd1")) + Wiki_Link_Distance (Lev_nearest ("pwd1"), Lev_nearest (" pwd2 ")) + Levensheiten (" pwd2 ", Lev_nearest (" pwd2 "))
Estensione: la wiki contiene circa un milione di voci di testo, il che rende quasi impossibile la ricerca del percorso più breve. Avresti sicuramente implementato questo come un C ++ e userai algoritmi ottimizzati molto bene. Quindi, sarà difficile. In alternativa, puoi farlo usando wikipedia solo le parole più comuni (che possono essere trovate ottenendo le loro statistiche di utilizzo). Sebbene il wiki inglese abbia circa un milione di articoli, un madrelingua inglese ne conosce solo una decina di migliaia.
Qualcuno dovrebbe davvero scrivere questo, è stato un meraviglioso demone opensource da qualche parte nel github: -)