In primo luogo, un paio di punti di chiarimento.
- Le password sono tipicamente hash, non crittografate, come indicato sopra.
- Le password non crittografate vengono generalmente inviate al server per l'applicazione in hash e confrontate con ciò che si trova nel database.
Dico di solito in entrambi i casi, perché ci sono delle eccezioni. Per le password inviate al server, è possibile utilizzare un protocollo denominato SRP per non inviare mai la password al server. Ma non è usato molto spesso.
Che cosa può fare un utente malintenzionato? Esistono attacchi contro algoritmi di hashing, come la discussione MD5 collegata in precedenza, che consente di scoprire le password in chiaro. L'hashing comune utilizzato dalle applicazioni include:
- MD5
- SHA1
- SHA256
- SHA512
- bcrypt
- scrypt
Gli strumenti sono là fuori che costruiscono hash di parole conosciute e li confrontano con l'hash desiderato. Ad esempio:
Voglio sapere qual è il valore in chiaro di questo hash: 098f6bcd4621d373cade4e832627b4f6
. Data la lunghezza dell'hash e che contiene solo caratteri esadecimali, posso fare un'ipotesi plausibile che si tratti di un hash MD5. Posso quindi eseguire quell'hash attraverso qualsiasi numero di strumenti. Ai fini della dimostrazione, ho creato un file con solo questo hash in esso:
$ cat hashlist.crack
myusername:098f6bcd4621d373cade4e832627b4f6
Ora posso eseguire uno strumento con questo hash:
$ john hashlist.crack --format=Raw-MD5
Loaded 1 password hash (Raw-MD5 [MD5 128/128 SSSE3 20x])
Press 'q' or Ctrl-C to abort, almost any other key for status
test (myusername)
1g 0:00:00:00 DONE 2/3 (2015-08-09 10:26) 100.0g/s 109300p/s 109300c/s 109300C/s test..blazer
Use the "--show" option to display all of the cracked passwords reliably
Session completed
Il valore di testo in chiaro è test
.
Utilizzando questo strumento e altri strumenti liberamente disponibili, un utente malintenzionato può ottenere un elenco di hash e crack dei valori di testo in chiaro.
Ecco perché i professionisti della sicurezza incoraggiano le persone a utilizzare gli hash che meglio resistono al cracking, come bcrypt
, oltre a incoraggiare l'uso di password complesse.