È più semplice ottenere la password originale se ne hai più di hash, tutti creati con la stessa funzione di hash?

8

Se hai più hash di una password, tutto hash con la stessa funzione di hash, è possibile utilizzarlo per accelerare il recupero della password originale in qualsiasi modo?

(Ho trovato la domanda " è più facile ottenere la password originale se ne hai più di "" , ma sembra trattarsi di più hash della stessa password ma creati con diverse funzioni hash. )

    
posta popq 03.11.2015 - 14:56
fonte

3 risposte

19

Una funzione di hash pura è deterministica, il che significa che se hai un qualsiasi valore dato, dovresti sempre ottenere lo stesso hash. 5f4dcc3b5aa765d61d8327deb882cf99 è sempre l'hash MD5 di "password". Puoi provarlo su macchine diverse, con implementazioni MD5 scritte in lingue diverse e, supponendo che siano implementazioni corrette, dovresti sempre ottenere lo stesso hash dal chiamare md5 ("password") o l'equivalente linguaggio specifico.

Tuttavia, questa è una proprietà davvero pessima da avere in un sistema di memorizzazione delle password. Per mescolare le cose, i migliori metodi di memorizzazione delle password usano un sale. In tal caso, la stringa da sottoporre a hash viene modificata per ogni record. Invece di tutti coloro che hanno usato "password" per ottenere lo stesso hash dell'output, viene generato l'hash di "password + salt" (o "salt + password", "pass + salt + word" o qualsiasi altra fusione. questa domanda), quindi ottieni un sacco di hash distinti:

  • b305cadbb3bce54f3aa59c64fec00dea - passwordsalt
  • 67a1e09bb1f83f5007dc119c14d663aa - saltpassword
  • 9eee04c6cecbc87f7699823f559b820d - passsaltword

Come si può vedere, non ci sono particolari caratteristiche comuni in questi, anche usando l'algoritmo di hashing MD5, che è una cattiva scelta per l'archiviazione delle password. (La coppia di "b" s nelle posizioni 8 e 9 nei primi due è solo una coincidenza).

Questo perché MD5 implementa l'effetto "valanga": la modifica di un singolo bit di input causerà una significativa modifica dell'output (idealmente circa il 50% per vari motivi di analisi).

Tutto questo combinato significa che anche con il sale breve usato sopra, l'unico modo per determinare che la parola "password" è nei tre ingressi hash è provare tutte le possibilità.

Dipende dalla funzione di hash utilizzata - puoi costruire una funzione di hash in cui l'aggiunta di un sale simile ha comportato una modifica simile all'output (quindi "passwordsalt" e "passwordsals" variano solo di una piccola quantità quando sono sottoposti a hash), ma questo non è tipico delle funzioni di hash utilizzate per l'archiviazione delle password.

Inoltre, le moderne raccomandazioni sull'archiviazione delle password suggeriscono l'uso di qualcosa come bcrypt o scrypt, che generano entrambi un strong effetto come parte dell'inizializzazione dell'hash:

  • $ 2a $ 08 $ WCUycJKlopCnpbAoYIQBj.wlsQA3iC2QhLOBpMMVZZtSO8hsXP1SW
  • $ 2a $ 08 $ 8s89Oz3AsJ.Dv.HAjIGKC.JdZJwzQUAkSX7Mels1Cc6Zwter.z7NO
  • $ 2a $ 08 $ r5lrQviZKBDgLS4z8OKVWOnlza16.tLDCqjq8pdQ1wY.iDSldXCFW

Tutti questi sono hash di "password" - e avere tutti e tre non ti aiuta affatto.

    
risposta data 03.11.2015 - 15:25
fonte
6

Una funzione di hash crittografica è una funzione deterministica, quindi se hai cancellato più volte la stessa password con la stessa funzione, dovresti ottenere lo stesso risultato. Oppure, detto diversamente, se fai non ottieni sempre lo stesso risultato, allora questo significa che la funzione è una funzione di hashing della password , con qualche casualità iniettata nota come " sale".

Se la funzione di hashing della password è decente e correttamente utilizzata (ad es. è bcrypt), allora no, avere diversi hash non aiuterà. Per vedere questo, considera che, formalmente parlando, una funzione di hashing della password non è una funzione one , ma una famiglia completa di funzioni, poiché il sale è davvero la scelta di una funzione specifica all'interno di quella famiglia. Con sali distinti, si ottengono funzioni distinte, che dovrebbero essere "molto diverse" l'una dall'altra, in modo che non esista alcuna scorciatoia computazionale che permetta di calcolare gli hash N per meno di N volte il costo del calcolo di uno. (Di fatto è atrocemente difficile annotare questa proprietà in un formalismo matematicamente corretto, ma il riassunto di cui sopra dovrebbe essere sufficiente per questa risposta.)

Pertanto, è possibile avere velocità di attacco solo quando viene riutilizzato un valore di sale. I buoni sali sono scelti in modo tale che siano unici, il che è in effetti facile se i sali vengono scelti casualmente e sono abbastanza grandi. Inoltre, nel tuo caso, se un valore salt è stato riutilizzato per la stessa password , otterrai lo stesso hash di prima, e questo non guadagna nulla.

Naturalmente, se la funzione di hashing della password a portata di mano fa qualcosa di strano e inesperto, allora tutto va bene. La mia risposta è per le buone funzioni di hashing della password.

    
risposta data 03.11.2015 - 15:25
fonte
4

Come hanno detto le altre risposte, l'esecuzione della stessa password attraverso lo stesso algoritmo di hashing produrrà sempre lo stesso hash. Ma possiamo anche prendere la tua domanda letteralmente, nel qual caso c'è ancora una risposta utile (e diversa) ...

Supponiamo che tu sia riuscito a ottenere un ampio elenco di password con hash da un server compromesso. Vuoi recuperare alcune password e non sei particolarmente preoccupato di quali. Questo obiettivo è realistico: il tuo elenco potrebbe contenere anche nomi utente e / o indirizzi email corrispondenti e desideri fornire credenziali che funzioneranno su altri siti non collegati (ad esempio, l'account email della vittima o l'account Paypal).

I punti di forza delle password variano molto. Alcune persone usano lunghe stringhe casuali. Altri usano parole molto comuni, ad es. "parola d'ordine". Questo fatto rende possibile eseguire attacchi in meno tempo rispetto a una ricerca di forza bruta completa. Vedi ad esempio attacchi dizionario e tabelle arcobaleno .

Se trovi due hash identici nell'elenco, è quasi certo che siano stati generati dalla stessa password. Supponendo che gli hash appartengano a due utenti autenticamente indipendenti, allora ti dice che la password deve essere abbastanza debole, poiché per definizione è improbabile che due persone pensino indipendentemente a una password strong identica. Ciò rende la password un buon candidato per qualcosa come un attacco basato sul dizionario.

Quindi, nel contesto di un elenco più ampio di hash, avere più di uno può aiutarti a recuperare un originale più velocemente, perché rivela informazioni statistiche su di esso.

    
risposta data 03.11.2015 - 20:35
fonte

Leggi altre domande sui tag