# Password cracking

Il password cracking (decrittazione forzata o violazione delle password) è un processo di recupero delle password utilizzato nella criptoanalisi e sicurezza informatica, mediante l'utilizzo di informazioni che sono state immagazzinate o trasmesse da un sistema informatico. Un approccio comune, il metodo forza bruta (o brute force), è quello di tentare il maggior numero di possibili combinazioni di caratteri e di confrontarle con un hash crittografico della password.
Tale azione di recupero può avere finalità molteplici:
* permettere a un soggetto di recuperare una propria password dimenticata;
* ottenere l'accesso non autorizzato a un sistema o a un documento protetto;
* come misura preventiva, da parte di un amministratore di sistema, per valutare la presenza nel proprio sistema di password facilmente violabili;
* in ambito giudiziario, su mandato di un'autorità, per ottenere l'accesso a prove che sono state rese inaccessibili mediante password.

## Descrizione

Il tempo per decrittare una password dipende dalla sua robustezza (password strength), che è una misura dell'entropia dell'informazione, insieme alle tecniche mediante le quali è stata memorizzata.
La maggior parte dei metodi di decrittazione forzata richiede un dispositivo per produrre una serie di password candidate, ciascuna delle quali viene poi verificata. Un esempio è il metodo forza bruta, nel quale un computer prova semplicemente ogni possibile chiave finché la ricerca non ha successo. Questo metodo, a seconda della complessità della password e del metodo di archiviazione, può richiedere ore, giorni, ma anche mesi o numerosi anni.
Altri metodi comuni, come l'attacco a dizionario, tentano di ridurre il numero di tentativi richiesti utilizzando set prestabiliti di password più probabili o comuni, e vengono spesso utilizzati prima del metodo forza bruta. Una password a complessità di bit maggiore aumenta esponenzialmente il numero di password candidate che devono essere controllate, in media, per recuperare la password; riducendo perciò la probabilità che la password venga trovata in qualsiasi dizionario di cracking.
La possibilità di decrittare una password dipende anche dal numero di possibili password per secondo che il sistema permette di tentare prima di bloccarsi o impedire ulteriori tentativi. Se un hash della password bersaglio è disponibile per chi sta attuando l'attacco, questo numero può essere piuttosto grande. Se invece non è disponibile, il numero di password che possono essere controllate al secondo dipende da diversi fattori:
* software di autenticazione che limita il numero di tentativi per la password
* tempo di attesa tra l'inserimento di una password e la successiva
* presenza di CAPTCHA
* blocco forzato della connessione dopo un certo numero di tentativi falliti.
Una situazione in cui si può indovinare rapidamente la password è quando la password è usata per formare una chiave crittografica. In questi casi, chi sta attuando l'attacco può rapidamente scoprire se una determinata password decodifica con successo dati crittografati.
Per alcuni tipi di hash di password, un computer desktop può testare oltre un centinaio di milioni di password al secondo utilizzando strumenti di password cracking eseguiti tramite una CPU, e miliardi di password per secondo utilizzando strumenti basati sulle GPU. Il numero di password controllate dipende fortemente dalla funzione crittografica usata dal sistema per generare gli hash della password. Una funzione di hash della password adatta, come asbcrypt, è diversi ordini di grandezza più solida rispetto a una funzione più semplice come MD5 o SHA.
Una password di 8 caratteri scelta dall'utente e composta da numeri, caratteri maiuscoli e minuscoli e simboli, escludendo le password più comunemente scelte e altre corrispondenze del dizionario, raggiunge una complessità pari a 30 bit, secondo NIST. 2$^{30}$ sono solamente 1 miliardo di permutazioni e la password verrebbe craccata in pochi secondi se la funzione hash fosse semplice. Quando più computer vengono combinati per craccare password, come può essere fatto per mezzo delle botnet, la capacità di craccare aumenta considerevolmente. Nel 2002, distributed.net ha trovato una password RC5 a 64 bit in 4 anni, tramite lo sforzo congiunto di più di 300.000 computer allo stesso tempo, che hanno generato in media circa 12 milioni di password per secondo.
Le unità di elaborazione grafica (GPU) possono velocizzare il password cracking di un fattore tra 50 e 100 volte rispetto alle CPU. Nel 2011, prodotti disponibili in commercio hanno affermato di poter testare fino a 2.800.000.000 password al secondo in un computer comune, utilizzando processori grafici di fascia alta. Dispositivi del genere possono craccare password di 10 lettere (solo maiuscole o solo minuscole) in un giorno. Inoltre è possibile distribuire il carico di lavoro su più computer per un'ulteriore accelerazione, proporzionale al numero di computer disponibili con GPU comparabili tra loro.
Nonostante le loro capacità, le normali CPU desktop sono più lente a craccare password rispetto alle macchine costruite appositamente per tale scopo. Nel 1998, l'Electronic Frontier Foundation (EFF) costruì una macchina dedicata al crack delle password utilizzando ASIC, diversamente dalle CPU comuni. La loro macchina, Deep Crack, riuscì a craccare una password DES a 56 bit in 56 ore, testando più di 90 miliardi di password al secondo. Nel 2010, l'istituto di ricerca tecnologica della Georgia sviluppò un metodo per utilizzare GPGPU per craccare password, concludendo che la lunghezza minima per una password sicura è di 12 caratteri.

## Facili da ricordare, difficili da indovinare

Una password facile da ricordare di solito è anche facile da indovinare per chi ci sta attaccando. Le password più difficili da ricordare, in alcuni casi, riducono la sicurezza del sistema per i seguenti motivi:
* uno o più utenti, non riuscendo a ricordare password complesse, le scrivono oppure le salvano utilizzando metodi non sicuri,
* gli utenti avranno bisogno di frequenti reset della password
* gli utenti sono portati a riutilizzare le stesse password
In "The memorability and Security of Passwords", Jeff Yan esaminò l'effetto dei consigli dati agli utenti per una buona scelta della password. Si scoprì che le password basate sulla prima lettera di una frase pensata sono facili da ricordare allo stesso modo di password scelte appositamente, e difficili da craccare tanto quanto le password generate a caso. Combinare due parole non collegate è un altro buon metodo; come anche avere un algoritmo personale per generare password.
Chiedere a degli utenti di ricordare una password composta di "un mix di caratteri maiuscoli e minuscoli" è come chiedere loro di ricordare una sequenza di bit: difficile da ricordare, e solo un po' più difficile da craccare (es. solo 128 volte più difficile da craccare utilizzando password da 7 caratteri, meno se l'utente utilizza solo una lettera maiuscola). Chiedere agli utenti di utilizzare "sia caratteri che numeri" porta spesso a sostituzioni facili da indovinare, come 'E' → '3' e 'I' → '1', sostituzioni ben note a chi effettua l'attacco. Allo stesso modo, scrivere la password utilizzando i tasti posti una riga sopra è un metodo comune e conosciuto da chi effettua gli attacchi.
Una dettagliata ricerca di un documento di aprile 2015, scritto da diversi professori alla Carnegie Mellon University, mostra che le scelte delle persone riguardanti la struttura delle password spesso seguono schemi ben noti. Come risultato, le password potrebbero essere craccate molto più facilmente di quanto i calcoli matematici indichino. Password contenenti un numero, per esempio, quasi sempre lo pongono alla fine della password.

## Casi significativi

Il 16 luglio 1998 il CERT segnalò un incidente in cui vennero rubate 186.126 password criptate. Nel tempo in cui venne scoperto il furto, ne erano già state craccate 47.642.
Nel dicembre 2009 avvenne una grave violazione al sito Rockyou.com, che portò alla distribuzione di 32 milioni di password. Gli artefici dell'attacco fecero poi trapelare la lista completa dei 32 milioni di password (senza altre informazioni sulle identità) in internet. Le password erano memorizzate in chiaro nel database, e vennero estratte tramite una vulnerabilità SQL Injection. L'Imperva Application Defense Center (ADC) analizzò la forza delle password.
Nel giugno del 2011, la sicurezza della NATO venne violata e vennero rilasciati pubblicamente nomi, cognomi, username e password di oltre 11 000 utenti registrati della loro libreria elettronica. Le informazioni vennero rubate come parte dell'Operazione AntiSec, un movimento che include Anonymous, LulzSec e altri gruppi di pirati informatici.
L'11 luglio 2011 i server di Booz Allen Hamilton, una importante azienda di consulenza Americana che lavora per il Pentagono, vennero violati da Anonymous e le informazioni trapelarono lo stesso giorno. La fuoriuscita di informazioni includeva 90 000 dati di accesso di personale militare - incluso personale di USCENTCOM, SOCOM, Marines, Air Force, personale statale e altri.
Il 18 luglio 2011 Microsoft Hotmail bannò la password: "123456".

## Prevenzione

Il metodo migliore per prevenire che una password venga craccata è quello di assicurarsi che chi sta cercando di attaccarci non riesca a ottenere l'accesso nemmeno alle password cifrate. Per esempio, nei sistemi operativi Unix, le password cifrate erano inizialmente memorizzate in un file/etc/passwdpubblicamente accessibile. Nei sistemi Unix moderni, invece, queste password sono memorizzate nel file/etc/shadow, che è accessibile solo dai programmi con privilegi maggiori. Questo rende più difficile, per un utente malintenzionato, ottenere password cifrate. Sfortunatamente molti protocolli di rete trasmettono le password in chiaro oppure utilizzando protezioni deboli.
I moderni sistemi Unix hanno sostituito le tradizionali funzioni crittografiche delle password DES-based con metodi più complessi come bcrypt e scrypt. Anche altri sistemi hanno iniziato ad adottare questi metodi, per esempio Cisco IOS inizialmente utilizzava un cifrario di Vigenère reversibile per cifrare le password, mentre ora utilizza crittografia basata su md5-crypt. Questi nuovi metodi utilizzano valori più grandi di salt che rendono più difficili gli attacchi online contro più account allo stesso tempo. Gli algoritmi sono molto più lenti da eseguire e questo aumenta drasticamente anche il tempo necessario per mettere in atto con successo un attacco offline.
Molti metodi di cifratura utilizzati per memorizzare password sono nati per computazioni veloci ed implementazione efficiente con l'hardware; per cui risultano inefficienti nel prevenire il password cracking. Utilizzare algoritmi per allungare le password, come PBKDF2, porta ad una cifratura che riduce sensibilmente il numero di password testabili per secondo.

## Software

Sono disponibili numerosi software per la decrittazione delle passowrd, fra questi: Cain & Abel, John the Ripper, Hashcat, Hydra, DaveGrohl e ElcomSoft.
Molti pacchetti software di supporto all'informatica forense includono anche funzionalità di password cracking. La maggior parte di questi pacchetti utilizza multiple strategie di decrittazione, algoritmi di forza bruta e attacchi per mezzo di dizionari di parole, aumentando l'efficacia dell'azione.
L'aumento della potenza computazionale delle macchine, unita alla presenza di software di password cracking automatici e adatti anche a principianti per certe tipologie di utilizzo, ha portato alla nascita dei cosiddetti script kiddie.