Tutti siamo abituati a sentirci chiedere di scegliere password "complesse" per creare profili per i servizi online.
Complesse significa varie cose, da "deve contenere almeno una maiuscola e un numero" ad assurdità del tipo "devono esserci due simboli due numeri due maiuscole e due minuscole e non devono essere troppo vicine tra loro".
Ormai ci siamo abituati e forse nemmeno ci ricordiamo il perché di questa pretesa. L'unica cosa che ricordiamo sono quei siti dove la ricerca di una password che vada bene sembra quasi una caccia al tesoro: qualunque cosa si scriva non va bene, nemmeno una sequenza di numeri e lettere del tutto casuale.
Alla fine le password che otteniamo sono impossibili da ricordare. Quindi poi finiscono su un giallino appiccicato allo schermo, o su un foglio Excel salvato nel desktop (si, non è Italiano, ma non siamo stati in grado di trovare un termine italiano che fosse anche comprensibile…), con tanti saluti alla sicurezza.
E da questo ci è venuta in mente una riflessione, sulle origini di questa bizzarria e sulla sua reale efficacia.
Il codice ASCII contiene 26 lettere minuscole, 26 maiuscole, 10 numeri, 32 simboli di punteggiatura nel set di caratteri base, più una seconda pagina con una manciata di simboli e accentate varie che non contiamo per semplicità (e di più metterle in una password potrebbe non essere ideale…). Quindi sono in totale 94 simboli. Le possibili combinazioni di password di 8 caratteri (lo prendiamo come esempio) sono 94 alla ottava potenza, 6.095.689.385.410.816, (circa 6 x 1015).
La difficoltà di "indovinare" una password non dipende dalla complessità o semplicità della stessa, ma solo dal numero di combinazioni possibili. Quindi AAAAAAAA non sarà più facile da indovinare di 7e6T$"Gw. L'unica cosa che conta è il fatidico
6 x 1015. Ma se posso escludere certe combinazioni allora il numero di alternative diminuisce.
Se impongo una password complessa, quante combinazioni possibili ho? Cambia qualcosa? Evidentemente sì, perchè escludo tutte le password semplici!
Dunque, le password che non contengono simboli sono tutte quelle che ottengo da lettere e numeri (26 + 26 + 10), in totale 2.2 x 1014. Quelle che non contengono numeri sono 2.4 x 1015. Quelle senza maiuscole sono 4.6 x 1014, come quelle che non hanno minuscole.
Quindi se impongo almeno una maiuscola, una minuscola, un simbolo e un numero, di
6 x 1015 combinazioni possibili ben 3.24 x 1015 non sono accettabili, più della metà!
Morale: imponendo la password complessa facciamo un disservizio all'utente e un favore al potenziale ficcanaso, che vede dimezzato il numero di possibili combinazioni!
Ma allora, perché insistiamo?
Ci sono due motivi, entrambi più psicologici che tecnici.
Ma intanto una cosa: se da 6 x 1015 tolgo 3 x 1015 mi rimane ancora un bel 3 x 1015 che è sempre un bel numerone. Ho semplificato il lavoro all'intruso, ma non l'ho reso semplice!
Qui però serve un poco di prospettiva: supponiamo di sapere che la password è lunga 8 caratteri, e che sono tutti minuscoli. Supponendo di fare 100 tentativi al secondo, quanto ci metto a provare tutte le combinazioni? Beh, "solo" 66 anni.
Quindi un attacco remoto basato sul tentare ogni possibile combinazione è comunque irrealizzabile. E in locale, dove sono molto più veloce? Ragionevolmente potrei metterci 6 mesi, sempre che nessuno si accorga di quello che faccio...
Ma torniamo ai motivi:
Per dire che lo spazio dei possibili simboli è 26+26+10+32 dovrei essere sicuro che gli utenti sceglieranno più o meno a caso tra lettere numeri e simboli. Ma se lascio fare all'utente, possiamo sospettare che sceglierà una password di sole lettere. Quindi partendo da questa ipotesi potremmo provare a indovinarla, con solo 2 x 1011 alternative (26 alla ottava potenza), mettendoci appunto solo 66 anni. Solo se non ci riesco mi tocca di sorbirmi un problema 10.000 volte più complesso. Forzando l'utente a scegliere una password complessa lo costringo a sceglerne una dall'insieme più ampio, e gli faccio una cortesia.
La seconda, la vera ragione, è quella del cosiddetto "attacco dizionario": se sappiamo che la password è una parola di senso compiuto allora possiamo provare a indovinarla usando una lista di tutte le parole di senso compiuto, che sono pochissime in confronto al numero di possibili combinazioni. Per questo non vogliamo che l'utente usi parole di senso compiuto. Ma come faccio a impedirgli di farlo? Lo costringo a mettere nella password anche simboli e numeri.
Illusi! L'utente a questo punto metterà il nome del proprio cane seguito dalla sua data di nascita più un punto esclamativo… Non ha senso compiuto, ma è facile da indovinare!
Provare per credere, è successo: nome azienda seguito da anno corrente al contrario e punto esclamativo. Un intruso con indirizzo in Russia l'ha indovinato...
Morale: se ti impongono una password complessa, mettila complessa, non hai scelta.
Se non te la impongono complessa tanto meglio, e metti una password che:
- non abbia senso compiuto
- non sia in nessun modo associata a te, non nomi di sposa, cani, date di nascita ecc.
- sia lunga, diciamo più di 8 caratteri
- se è complessa forse è meglio, ma non è fondamentale.
Per chi il sito lo gestisce:
Perché imporre una password complessa se così facendo fai un disservizio all'utente e un favore all'hacker? Meglio dare linee guida (sopra un possibile suggerimento) e magari aggiungere un indicatore sulla qualità della password (un indicatore rosso/giallo/verde ad esempio). Poi sarà l'utente a decidere, a suo rischio e pericolo.
In realtà è chiaro che il tempo delle password passerà presto. Useremo strumenti che ci riconoscono, e che possono trasmettere la nostra identità anche ad altri sistemi, agendo da intermediari. Così accedere ad una applicazione sarà più o meno come farsi un selfie….