2010-04-21 19 views
10

Il nostro sistema informatico al lavoro richiede agli utenti di cambiare la password ogni poche settimane e non è possibile avere la stessa password come in precedenza. Ricorda qualcosa come 20 delle tue ultime password. Ho scoperto che la maggior parte delle persone semplicemente incrementa una cifra alla fine della password, quindi "thisismypassword1" diventa "thisismypassword2", quindi 3, 4, 5 ecc.Le password simili hanno hash simili?

Poiché tutte queste password sono memorizzate da qualche parte, mi sono chiesto se ci fosse qualche debolezza negli stessi hash, per gli algoritmi di hashing standard utilizzati per memorizzare password come MD5. Un hacker potrebbe aumentare le possibilità di brute-forzare la password se hanno un elenco di hash di password simili?

+16

Se è necessario modificare la password ogni qualche settimana e non è possibile riutilizzare una password per 20 tentativi, non è una meraviglia che gli utenti aumentino. Mi sembra che se hai bisogno di password modificate spesso per garantire la sicurezza, le password non sono il mezzo con cui dovresti garantire la sicurezza. – CaffGeek

+2

Si noti che, sebbene non vi siano somiglianze nell'hash, la modifica delle password aggiunge sicurezza solo se impedisce agli aggressori che in qualche modo scoprono una vecchia password di utilizzarlo. Ad esempio, se un attaccante impiega un mese per eseguire un attacco di dizionario/forza bruta dato che conosce l'hash, cambiare la password ogni mese significa che l'attacco è inutile. * A meno che *, la password sia simile a quella vecchia, nel qual caso l'attaccante usa la vecchia password come punto di partenza per un nuovo attacco di forza bruta sul nuovo hash, che termina in microsecondi e ti prendono a calci in culo. –

+0

Sono abbastanza sicuro che, in pratica, l'applicazione di frequenti modifiche alle password riduce la sicurezza, non la aumenta, dal momento che rende più difficile per gli utenti scegliere e ricordare password valide. Si basa sull'antica pratica della "password del giorno", in cui è necessario cambiare la password spesso perché * tutto il tuo esercito lo sa *, ed è garantito che coli al nemico a tempo debito. Le password del computer dovrebbero essere conosciute solo da 1 persona. –

risposta

10

fare le password hash simili sono simili?

No.

Qualsiasi somiglianza, anche una correlazione complessa, sarebbe considerato una debolezza del hash. Una volta scoperto dalla comunità criptata, sarebbe stato pubblicato, e abbastanza punti deboli scoperti nell'hash avrebbero finito per aggiungere il consiglio di non usare più quell'hash.

Ovviamente non c'è modo di sapere se un hash ha punti deboli non scoperti o punti deboli noti a un aggressore ma non pubblicati, nel qual caso molto probabilmente l'attaccante è un'organizzazione governativa ben finanziata. L'NSA è certamente in possesso di attacchi teorici non pubblici su alcuni componenti crittografici, ma se questi attacchi sono utilizzabili è un'altra questione. Probabilmente lo è GCHQ. Immagino che alcuni altri paesi abbiano programmi segreti di crittografia con un numero sufficiente di matematici per aver svolto un lavoro originale: la Cina sarebbe la mia prima ipotesi. Tutto ciò che puoi fare è agire sulla migliore informazione disponibile. E se le migliori informazioni disponibili dicono che un hash è "buono per cripto", allora una delle cose che significa non sono somiglianze utilizzabili di questo tipo.

Infine, alcuni sistemi utilizzano gli hash deboli per le password, a causa dell'ignoranza da parte dell'implementatore o dell'eredità. Tutte le scommesse sono disattivate per le proprietà di uno schema di hashing che non ha avuto una revisione pubblica, o che è stato rivisto e trovato mancante, oppure è abbastanza vecchio da poter essere alla fine individuato debolezze significative. MD5 è rotto per alcuni scopi (poiché esistono mezzi pratici per generare collisioni) ma non per tutti gli scopi. AFAIK va bene per questo, nel senso che non ci sono pratici attacchi pre-immagine, e avere una manciata di hash dei relativi testi in chiaro non è meglio che avere una manciata di hash di plaintint non correlati. Ma per ragioni non correlate non dovresti usare una singola applicazione di alcun hash per l'archiviazione della password, dovresti usare più turni.

Un hacker potrebbe aumentare le possibilità di brute-forzare la password se ha un elenco di hash di password simili?

Indirettamente, sì, sapendo che quelle sono le tue vecchie password. Non a causa di alcuna proprietà dell'hash, ma supponiamo che l'hacker riesca a (molto lentamente) a forzare una o più delle vecchie password usando quei vecchi hash, e vede che in passato è stato "thisismypassword3" e "thisismypassword4" .

La password è stata modificata in "thisismypassword5". Ben fatto, cambiandolo prima che l'aggressore lo abbia incrinato, hai assicurato con successo che l'attaccante non ha recuperato una password preziosa! Vittoria! Tranne che non ti va bene, dal momento che l'aggressore ha i mezzi per indovinare il nuovo rapidamente comunque utilizzando la vecchia password (s).

Anche se l'utente malintenzionato ha solo una vecchia password e quindi non è in grado di individuare facilmente una tendenza, i cracker di password funzionano provando password che sono simili alle parole del dizionario e altri valori. Per semplificare un po ', proverà prima le parole del dizionario, quindi le stringhe composte da una parola con un carattere in più aggiunto, rimosso o modificato, quindi stringhe con due modifiche e così via.

Includendo la vecchia password negli "altri valori", l'utente malintenzionato può assicurarsi che le stringhe molto simili siano controllate all'inizio del processo di cracking.Quindi se la tua nuova password è simile a quelli vecchi, avere i vecchi hash ha un certo valore per l'attaccante - invertendo qualcuno di questi gli dà un buon seme per decifrare la tua password corrente.

Quindi, incrementare la password regolarmente non aggiunge molto. Cambiare la tua password in qualcosa che è probabile dalla vecchia password mette il tuo aggressore nella stessa posizione in cui si troverebbe se non sapesse nulla, ma la tua password era indovinabile dal nulla.

I principali attacchi pratici ai sistemi di password al giorno d'oggi sono intercettazioni (tramite keylogger e altri malware) e phishing. Cercare di invertire gli hash delle password non è un buon attacco percentuale, anche se un attaccante ha in qualche modo ottenuto un file/etc/passwd o equivalente, lo corrisponderà a in questo modo su alcune password deboli nel sistema medio.

+0

Accettato, questa domanda ha il maggior dettaglio e menziona un sacco di cose che ho perso mentre rimuginavo sul problema. Grazie! – NibblyPig

10

Dipende dall'algoritmo di hashing. Se è buono, password simili non dovrebbero avere hash simili.

+2

Sì, e se si utilizza l'hash per scopi crittografici, è meglio avere quella proprietà. (Si noti che ci sono altri domini in cui si * vogliono * input simili con hash simili.) –

+0

Dovrebbe, sì. Ma loro? – NibblyPig

+0

I buoni sì. È sempre possibile creare un algoritmo hash che non lo fa. Varia da algoritmo ad algoritmo. – kemiller2002

11

Con un buon algoritmo di hash, password simili verranno distribuite tra gli hash. Quindi password simili avranno hash molto diversi.

Si può provare questo con MD5 e stringhe diverse.

"hello world" - 5eb63bbbe01eeed093cb22bb8f5acdc3 
"hello world" - fd27fbb9872ba413320c606fdfb98db1 
+0

Gli algoritmi standard utilizzati in .NET o Windows sono "buoni" in questo modo? Anche se per me quegli hash sembrano completamente dissimili, per un computer che potrebbe non essere il caso. – NibblyPig

+0

Sono, come dici tu, "buono" in questo modo. – Oded

1

Risposta breve, no!

L'output di una funzione di hash varia notevolmente anche se viene aumentato un carattere.

Ma questo è solo se si desidera interrompere l'hash stesso.

Naturalmente, è una cattiva pratica dal momento che rende più facile la bruteforcing.

4

Dipende dall'algoritmo di hash utilizzato. Uno buono distribuirà input simili a output disparati.

+0

Sicuramente, un buon algoritmo di hash distribuirà * tutti gli input * a disparate uscite se possibile? – RCIX

+0

@RCIX: "tutti gli input su output disparati" - ciò è possibile solo se l'hash risultante è largo quanto lo spazio di input! La ragione per usare un hash è innanzitutto creare un risultato molto più piccolo dell'input. –

+0

Penso che ti stiate riferendo sia alla resistenza di preimage che alla resistenza di collisione: http://en.wikipedia.org/wiki/Cryptographic_hash_function – jasonh

1

No, se si controlla la password anche leggermente produce un hash completamente nuovo.

6

L'intero punto di un hash crittografico è che password simili non creerebbero assolutamente hash simili.

Ancora più importante, è probabile che salti la password in modo che anche le stesse password non producano lo stesso hash.

1

Come regola generale, un "buon hash" non hash due stringhe simili (ma non uguali) agli hash simili. MD5 è abbastanza buono che questo non è un problema. Tuttavia, esistono "tabelle arcobaleno" (essenzialmente password: coppie di hash) per alcune password comuni (e per alcuni hash delle password, le tradizionali password UNIX basate su DES, ad esempio) esistono tabelle full rainbow.

4

Per espandere su ciò che altri hanno detto, un rapido test mostra che ottieni hash molto diversi con piccole modifiche apportate all'input.

ho usato il seguente codice per eseguire un test rapido:

<?php 
for($i=0;$i<5;$i++) 
     echo 'password' . $i . ' - ' .md5('password' . $i) . "<br />\n"; 
?> 

e ho ottenuto i seguenti risultati:

password0 - 305e4f55ce823e111a46a9d500bcb86c 
password1 - 7c6a180b36896a0a8c02787eeafb0e4c 
password2 - 6cb75f652a9b52798eb6cf2201057c73 
password3 - 819b0643d6b89dc9b579fdfc9094f28e 
password4 - 34cc93ece0ba9e3f6f235d4af979b16c 
+1

+1, per mostrare il modo migliore per ottenere una risposta ... TEST! – CaffGeek

+1

Per me sono diversi ma ABC sembra diverso da ZYX ma l'algoritmo per convertirli è molto semplice. – NibblyPig

+0

@Chad cosa posso dire, è un sito di programmazione, voglio 'sapere una risposta, e puoi provare per questo. FARE COSÌ! – UnkwnTech