Sicurezza delle password
Chi vuole entrare in un’applicazione protetta da password (un archivio RAR con password, una casella di posta…) ha diverse possibilità di arrivare al risultato senza conoscere la password. Alcune richiedono una certa dose di intelligenza, intuito e conoscenze, altre un po’ di fortuna e di allenamento fisico. Vediamo allora, per cominciare, quali possibilità ha un attaccante.
Come scoprire la password di qualcuno
- Trovare chi conosce la password (per esempio il proprietario della casella di posta) e ottenerla da lui – convincerlo con le parole, corromperlo, picchiarlo. Questo metodo non lo descriverò oltre nell’articolo :-).
- Provare a farsi dare la password dal proprietario in modo poco appariscente, per esempio con una falsa e-mail. Il nome tecnico è phishing. Il metodo consiste nel mandare al proprietario dell’account un’e-mail in cui lo si invita a rispondere con nome utente e password. Dipende solo da te quanto il messaggio sembrerà credibile: la richiesta da sola probabilmente non basterebbe, bisogna aggiungere una storia. Capita spesso di leggere che si è rotto il database e che per questo tutti gli utenti sono invitati a inserire di nuovo password e nome utente, altrimenti la casella verrà chiusa, e così via. Se il messaggio sembra davvero serio, la percentuale di successo di solito non è bassa.
- Attacco a dizionario – scarichiamo da internet qualche raccolta delle password più comuni e le proviamo tutte. Se siamo fortunati e il proprietario ha una password piuttosto frequente, la otteniamo davvero con facilità. Da qui nasce l’insegnamento fondamentale: non scegliere password che hanno un significato. Scegli per esempio la password chitarra e ti garantisco che il primo hacker alle prime armi la scoprirà in pochi secondi. Questo è probabilmente il metodo più efficace: se hai un dizionario di password davvero grande, riesci a indovinare senza troppa fatica la password di gran parte degli utenti.
- La forza bruta è il metodo più sciocco, appunto brutale. Consiste nel provare tutte le password possibili che esistono al mondo. Il programma compone una dopo l’altra le lettere secondo un certo algoritmo e controlla se ha indovinato la password cercata. Quando la trova, la salva e termina. Questo metodo lo analizzeremo meglio più avanti.
Forza bruta
Un programma che usa questo metodo si limita a formare diverse disposizioni di caratteri e a controllare se per caso ha indovinato la password. Calcoliamo quanto tempo può richiedere un simile tentativo.
Supponiamo di avere una password di cinque caratteri formata solo da lettere minuscole dell’alfabeto inglese (senza lettere accentate come à, è). Le lettere dell’alfabeto inglese sono ventisei. Ora possiamo calcolare facilmente quante password diverse si possono costruire con cinque lettere di questo tipo. Useremo le disposizioni, perché l’ordine conta (la password ramo non è uguale a mora, anche se è formata dalle stesse lettere) e dobbiamo usare le disposizioni con ripetizione, perché le lettere in una password possono ripetersi. Passiamo al calcolo vero e proprio. La formula per le disposizioni con ripetizione è D'n,k = nk. Al posto di n sostituiamo il numero di lettere tra cui scegliamo – il numero di lettere dell’alfabeto inglese – e al posto di k il numero di lettere di cui è formata la password, nel nostro caso cinque. Otteniamo 265, cioè circa dodici milioni di disposizioni diverse. Sono tante o poche?
Dipende anche dalla macchina che abbiamo a disposizione. Un vecchio computer scalcinato riesce a fare pochi confronti al secondo, i computer supermoderni ne fanno diecimila volte di più. Io in questi esempi lavorerò con un computer che riesce a fare dieci milioni di confronti e valutazioni al secondo. Probabilmente avrai già capito che una password di cinque caratteri sarebbe scoperta da un computer simile in meno di due secondi, e questo davvero non è un risultato positivo. Ma non arrendiamoci.
Rafforziamo la password
Una password di cinque caratteri non è sicura nemmeno un po’, alcuni sistemi più ragionevoli non permettono nemmeno di sceglierne una così corta. Si dice che una password non dovrebbe essere più corta di otto caratteri. Calcoliamo ora quante disposizioni esistono per una password di otto caratteri. Come nel caso precedente, consideriamo solo le lettere minuscole dell’alfabeto inglese. Sostituiamo nella formula e otteniamo 268, cioè circa duecento miliardi di disposizioni. Questo numero è già più rassicurante. Il computer le valuterebbe tutte in meno di sei ore. È meglio di prima, ma vediamo di quanto crescerebbe la robustezza della password se usassi anche le lettere maiuscole, le cifre e caratteri speciali come il trattino basso, il trattino e simili.
Le lettere minuscole sono 26, le maiuscole sono anch’esse 26, e fanno in tutto 52 caratteri. A questi dobbiamo aggiungere 10 cifre e alcuni caratteri speciali. Non tutti i caratteri speciali sono ammessi ovunque, perciò per semplicità conterò solo otto caratteri speciali, in modo che il numero di caratteri si arrotondi a un bel 70. La lunghezza della password sarà di nuovo otto. Dopo la sostituzione otteniamo questo numero: 708, che per farsi un’idea è circa 5,8 · 1014, a parole quasi seicentomila miliardi di disposizioni. È già un numero rispettabile. Il nostro computer le controllerebbe tutte in sedicimila ore! Sono quasi due anni. L’attaccante dovrebbe avere una fortuna enorme per scoprire la password in un tempo realistico. Inoltre dovrebbe conoscere la lunghezza della tua password: altrimenti dovrebbe controllare anche le disposizioni con un numero minore di caratteri.
Alcune persone temono così tanto per i propri dati da usare password numeriche. Queste password resistono molto bene all’attacco a dizionario, perché è difficile che in un dizionario di password usate di frequente ci sia proprio 41.274.390.553. Purtroppo, però, password di questo tipo sono sì resistenti all’attacco a dizionario, ma lo sono meno alla forza bruta. Le cifre infatti sono solo dieci, quindi il numero di disposizioni è sempre 10k. La robustezza della password dipende solo dalla sua lunghezza. La nostra password precedente di otto caratteri con tutti i tipi di caratteri aveva circa 5,8 · 1014 disposizioni. Per raggiungere almeno lo stesso valore con una password numerica, dovrebbe avere quindici cifre, quasi il doppio dei caratteri. Si vede chiaramente che è più efficace scegliere una password più corta, ma con più tipi di caratteri.
Non sottovalutare l’attaccante
L’attaccante può essere astuto. Dopo aver letto le righe precedenti, supponiamo che tu abbia deciso di trasformare la tua password attuale «limonata» almeno in «Limonata», il che aumenta di parecchie volte il numero di disposizioni possibili, perché l’attaccante deve ora includere nell’algoritmo anche le lettere maiuscole. Però l’attaccante può supporre che la lettera maiuscola sia solo al primo posto, perché è più facile da ricordare e non si usa mettere una maiuscola in mezzo a una parola. Quindi si scrive un algoritmo che controlla tutte le disposizioni di parole con lettere minuscole ed eventualmente con una sola maiuscola proprio all’inizio.
La tua password originale aveva una complessità (intendo quante disposizioni in tutto potevano esserci mantenendo la stessa forma della password – otto lettere minuscole) di 268. Se l’attaccante non ragionasse, la nuova password avrebbe complessità 528, ma se usasse l’algoritmo appena descritto, la password avrebbe complessità 52 · 267. Al primo posto della password possono alternarsi lettere minuscole e maiuscole, che in tutto sono 52, e nei sette posti successivi possono alternarsi solo le minuscole, il che è una normale disposizione con ripetizione.
Inoltre l’attaccante può magari sapere che la tua password è formata da quattro lettere e quattro cifre, non mescolate, con le cifre sempre di seguito e le lettere sempre di seguito. La complessità di una password così si calcola in questo modo: il primo gruppo di quattro lettere ha in tutto 264 disposizioni, il secondo gruppo di quattro cifre ha 104 disposizioni. Moltiplichiamo poi questi due risultati: 264 · 104. Se l’attaccante non sapesse se vengono prima le cifre o le lettere, dovremmo moltiplicare il risultato precedente ancora per due.
Puoi dare un’occhiata anche a queste tabelle, in cui sono riportate le velocità di violazione delle password.