Come fa un hacker a sapere quando ha la password?

6

Un utente malintenzionato ottiene un elenco di password con hash. Come fa a sapere quando ha incrinato la / e password / i? Non può provare milioni di volte sul conto compresso.

L'attaccante ottiene la password con hash. Come fa a sapere che "pAssword" è la password corretta e non "passwoRd"?

EDIT:

Mi manca così qualcosa di base. Fammi capire che lo capisco:

  1. Il DBA prende la mia password fantastica (pa $$ word) e la blocca.
  2. L'attaccante ottiene l'elenco delle password.
  3. L'attaccante prova "password". Diventa hash. Vede che hash-of-password non è uguale alla mia password. 3a. Prova la parola hash-of-pa $$. Diventa hash e vede che i due sono uguali. Pertanto ha infranto la mia password.
  4. Dopo un po 'di tempo (x quantità di tempo) ha crackato (diciamo) il 90% delle password e poi si ferma a causa di rendimenti decrescenti. (A meno che non voglia davvero la mia password.)
posta Mayo 18.05.2015 - 16:52
fonte

1 risposta

10

Sì, i tuoi passaggi sembrano essere corretti. L'attaccante ha un sacco di parole o sequenze di personaggi fino a quando ne trova uno che corrisponde all'hash di destinazione.

Pseudocodice:

hashlist = [ "a235b8320c...", "688b4302c57f3...", ... ]
wordlist = file.readlines("/path/to/wordlist")
for each word in wordlist:
    h = hash(word)
    # is the hash of this word in the list of target hashes?
    if h in hashlist:
        print "Found: " + h + " = " + word

Come richiesto da muchaho, ecco qualche pseudocodice per come funziona con i sali unici:

hashlist = [ "salt1:a235b8320c...", "salt2:688b4302c57f3...", ... ]
wordlist = file.readlines("/path/to/wordlist")
for each h in hashlist:
    salt = split(h, ':')[0]
    h = split(h, ':')[1]
    for each word in wordlist:
        if hash(salt + word) == h:
            print "Found: " + salt + ":" + hash + " = " + word

Si noti che, dopo aver aggiunto un sale unico a ciascun hash, dobbiamo provare ogni singola parola candidato per ogni hash di destinazione, piuttosto che eseguire solo l'hashing di tutte le parole e attendere che una corrisponda a un hash. Questo aumenta il costo della forza bruta quando hai più hash da decifrare, ma soprattutto previene attacchi di precomputazione come tabelle arcobaleno .

    
risposta data 18.05.2015 - 17:50
fonte

Leggi altre domande sui tag