Avere password univoche immesse in ogni sito è più sicuro che fornire ad ogni sito la stessa password, esattamente per il motivo di compromesso indipendente che hai suggerito.
If an attacker has the hash, and knows that it was generated with PwdHash and knows the domain that it was generated for, how feasible would it be for them to determine the original password from that?
Bene, facciamo qualche indagine e qualche matematica! PwdHash sembra utilizzare efficacemente GoofyStuff (Base64 (HMAC-MD5 ())), quindi siamo alla solita velocità di gioco di indovinare MD5 (MD5 ()). Per oclHashcat , "PC5 (8x AMD R9 290Xstock core clock)" può rompere ~ 81 miliardi di MD5 al secondo, quindi ~ 40 miliardi di tentativi come PwdHash al secondo, che ci dà la più pratica 1E17 (un po 'più di 2 ^ 56) tentativi per 30 giorni.
Baso il precedente su questo frammento di codice da una rapida occhiata all'origine della pagina PwdHash:
var hash = b64_hmac_md5(password, realm);
Questo è nell'intervallo di una ricerca esaustiva dello spazio delle chiavi da 62 ^ 9 a 62 ^ 10 in quei 30 giorni, dove 62 è lo spazio delle chiavi in maiuscolo, minuscolo e numerico (o maiuscolo, minuscolo e simboli sopra i numeri, a seconda dei casi) e 9 o 10 è la lunghezza.
Quindi, una maiuscola, una minuscola, una password numerica completamente codificata con HMAC-MD5 sarà trovata in meno di circa 30 giorni (a meno che tu e l'attaccante non usiate set di caratteri diversi (cioè Cryllic vs. inglese)). Avrai bisogno di qualcosa con uno spazio tastiera totale più grande di questo per la tua password principale, e questo è se si tratta di una password veramente casuale!
Non vuoi neppure pensare a quale attacco del dizionario basato su regole può arrivare a questa velocità, se la tua password non è, in effetti, completamente casuale. Il mio set di liste di parole più completo contiene oltre 40 GB di password uniche; se assumiamo una lunghezza media delle parole pari a 9 più un separatore LF, si tratta di 4E9 parole, il che significa che se un utente malintenzionato con quel PC impiegasse 30 giorni sulla password, sarebbe in grado di provare approssimativamente 2.5E7, ovvero 25 milioni di varianti diverse ( regole) per ogni password.
Si noti che questo elenco di parole è troppo lento e macchinoso da occuparsi di ... a meno che il bersaglio non possa essere attaccato a velocità folli, come un singolo HMAC-MD5 possibile.
Se usi PwdHash con una password principale, possiedi uno veramente buono - 15 caratteri o superiore, crittograficamente casuale, con un set di caratteri grandi (superiore, inferiore, numero, simboli sopra i numeri, simboli non sopra i numeri) .
Other considerations
Dovresti pensare a come cambierai la tua password principale dopo le perdite; forse sei in ritardo e stai cercando di fare in fretta e digiti la master password in un sito web direttamente anziché in PwdHash, solo per abitudine, privazione della caffeina, fretta e incuria. Ora devi cambiarlo!
Personalmente, mi piace l'archiviazione delle password offline come KeePass , ma preferirei usare anche OpenSSL di base rispetto a PwdHash - AS PATHETICALLY INSUFFICIENT AS IT IS Metterò HMAC-SHA-512 contro HMAC-MD5 in qualsiasi giorno della settimana.
echo example.com2014 | openssl dgst -sha512 -hmac MyPassword -binary | openssl enc -base64
Come sempre, è meglio usare qualcosa di veramente casuale e archiviarlo, o, se insisti su una routine di generazione deterministica, qualcosa di veramente lento, specialmente perché questo è solo per te, quindi PBKDF2 / BCrypt / Scrypt con abbastanza iterazioni / fattore di lavoro che impiega anche solo un secondo o due o cinque sulla tua macchina andrebbe bene, e rallenterebbe l'aggressore fino alla scansione.
Plug vergognoso: sto lavorando alla raccolta di una varietà di esempi di codice PBKDF2 (e spero più tardi BCrypt e Scrypt) su my github anti-weakpasswords pagina , alcuni dei quali vengono compilati in modo da poterli eseguire alla riga di comando di Windows o Linux e utilizzarli esattamente come si utilizza PwdHash ora, ma con un numero di iterazioni più elevato di quello che qualsiasi sito Web potrebbe utilizzare, se sei disposto ad aspettare un paio di secondi. A partire da oggi, c'è solo una versione di Python che Mitsuhiko ha scritto e Warner ha corretto conteggi di iterazioni elevate, non ancora aggiornati con hash migliori, ma che miglioreranno.