Informatica per script kiddies 17 – Qualche parola su TOTP

Eccoci con un nuovo Informatica per script kiddies, un po’ specifico su una cosa che vedo sempre più utilizzata ma non troppo chiara né agli utenti né a chi si occupa di web senza troppa esperienza: l’autenticazione a due fattori TOTP.

I problemi di username e password

Siamo di solito abituati, per accedere a sistemi online, a utilizzare un nome utente e una password. È un sistema molto semplice e piuttosto rodato, ma ha diversi punti deboli, un po’ per questioni strutturali e un po’ perché gli esseri umani sono pigri o – se preferite – tendono più ad essere efficienti che ad essere efficaci.

Tra le diverse vulnerabilità di questo approccio, tre mi sembrano veramente molto grandi.

La prima è che, strutturalmente, il nome utente e la password sono sempre gli stessi, molto a lungo, sul medesimo sistema. Può risultare relativamente semplice, per chi volesse violare un nostro account, scoprirli una volta per tutte e usarli comodamente quando preferisce.

La seconda è che, oltre ad essere sempre gli stessi, lo username e la password tendiamo a scriverceli da qualche parte – fosse anche la memoria del browser – facilitando di molto il lavoro a chi volesse leggerli.

La terza è che tendiamo a usare lo stesso username e password per tantissime cose diverse, amplificando ulteriormente le possibilità di farceli fregare.

L’autenticazione a due fattori

Una soluzione con un buon rapporto efficacia / semplicità che si è escogitata nel tempo è l’autenticazione a due fattori.

L’idea è che oltre alla coppia username/password, ovvero il primo fattore, per entrare nel sistema sia necessario un secondo fattore, tipicamente un dato che difficilmente un attaccante ha in mano.

Come secondo fattore, in natura, si utilizza letteralmente di tutto. Un approccio comunissimo, oggi che più o meno tutti viviamo in simbiosi con i cellulari, è l’inviare qualcosa sul cellulare. Una notifica, ad esempio, o uno SMS (approccio molto pericoloso, l’SMS, ma comunque meglio dei soli user e pass). Un approccio meno comune ma molto utilizzato dove si voglia garantire un certo livello di sicurezza, è il collegare un oggetto fisico, tipicamente una chiavetta USB (che, per una volta, ha senso chiamare “chiavetta”) in possesso del solo legittimo proprietario dell’account.

Un ultimo approccio è dare in mano all’utente un dispositivo in grado di generare un codice che cambia continuamente nel tempo e che va utilizzato assieme alla password: fino a poco tempo fa era un’esperienza comune a chiunque usasse un home banking.

Questo approccio, che nella sua versione più aperta si chiama TOTP (time-based one-time password, ovvero password monouso a tempo) è quello di cui parliamo oggi.

Come funziona il TOTP

L’idea su cui si basa TOTP è relativamente semplice nel suo funzionamento.

Per descriverlo al meglio, introduco l’algoritmo su cui si basa, l’HOTP.

L’HOTP è un sistema per generare password monouso. L’idea, semplificata un pochino, è che le due parti, all’inizio, si scambino una chiave. Data la chiave e un numero qualsiasi, esiste un algoritmo che tira fuori un codice numerico, che è sempre lo stesso se la chiave e il numero sono sempre gli stessi.

A ogni accesso, entrambe le parti utilizzano un numero nuovo per generare il nuovo codice numerico di accesso.

Insomma, mi faccio un account sul sistema Pippo, e lui mi dà la mia chiave (e se la memorizza). Al mio primo accesso, per entrare, userò la chiave e il numero “1” per generare il mio codice di accesso. Il sistema Pippo farà lo stesso, e se i codici corrispondono mi fa entrare. La volta dopo uso il numero “2”, e così via.

TOTP funziona esattamente in questo modo, ma invece di utilizzare un numero che bisogna far crescere, utilizza il tempo. Il sistema Pippo mi dà la chiave, l’ora in cui l’ha generata, e un intervallo (ad esempio un minuto). Quando farò login, mi calcolerò il numero di minuti passati dall’ora iniziale, e userò quella cifra al posto di “1” o “2”, e la stessa cosa farà il sistema.

In questo modo posso usare come secondo fattore un codice che non ho deciso io (dipende dalla chiave, decisa dal sistema), e che cambia di continuo, ad esempio una volta ogni minuto. Questo risolve entrambi i problemi presentati nell’introduzione di questo articolo. Non male, no?

Sì ma devo usare una calcolatrice a ogni login?

No, ovviamente, anche perché il calcolo è una menata non da poco.

I sistemi che utilizzano TOTP generalmente danno chiave e intervallo sia esplicitamente che sotto forma di codice QR. Esistono moltissimi programmi e app in grado, dal codice a barre, di calcolare per noi quale sia il codicino numerico da usare in questo momento.

La più diffusa è sicuramente l’app di Google, che si chiama Authenticator e che è pensata per funzionare con i sistemi Google. È però una delle soluzioni peggiori possibile, perché non ha alcun modo comodo di fare un backup delle chiavi. Io uso Aegis, che trovo ottima, e il gestore di password BitWarden nella sua versione a pagamento, ma credo che troverete altri consigli nel thread di questo post su /r/ItalyInformatica.

Le fregature

Ovviamente un sistema così semplice ha delle vulnerabilità.

La principale è legata al fatto che è basata sul tempo, e per funzionare bene ha bisogno di una risoluzione molto elevata (fare codici numerici troppo più durevoli di un minuto, se non sono molto lunghi, è rischioso). L’orologio dell’utente e quello del sistema, però, non sono necessariamente ben sincronizzati, quindi è necessaria un minimo di tolleranza: i codici hanno una vita un po’ più lunga di quella dichiarata, perché i sistemi tendono ad accettare anche codici scaduti da poco o del prossimo futuro, per evitare che una piccola asincronia generi frustranti problemi di accesso.

La seconda è dovuta al fatto che, per quanto difficili da intercettare, le chiavi TOTP sono ai fatti normali password. Un attaccante che dovesse scoprire chiave e intervallo è in possesso di tutto il necessario per generare il codice di accesso.

Nonostante queste vulnerabilità, però, TOTP resta un ottimo sistema da associare alla semplice password come secondo fattore. Due sistemi con vulnerabilità indipendenti tra loro sono assai meglio che un solo sistema vulnerabile.

Conclusioni

E attivate l’autenticazione a due fattori, su, che ormai è supportata quasi ovunque.

Alcune riflessioni sulla digitalizzazione della PA

Per lavoro, mi occupo molto di digitalizzazione di processi “cartacei”, e mi trovo quindi, in Italia, a lavorare anche per la Pubblica Amministrazione, che è nel pieno di un processo veramente enorme di ricostruzione – e talvolta costruzione – dei sistemi informativi e dei processi digitali.

(altro…)

Informatica per script kiddies 16 – I perché e i come del sistema binario

Eccoci con il sedicesimo Informatica per script kiddies, che punta parecchio alle basi e spiega perché nell’informatica ci piacciono tanto gli zero e gli uno. Quest’articolo potrà essere un po’ troppo “di base” per molti di quelli che frequentano /r/ItalyInformatica, ma trovo possa essere utile e interessante per moltissimi di quelli che si interessano all’informatica, magari da un approccio di livello relativamente alto e da un percorso di studi senza troppa matematica.

(altro…)

Informatica per script kiddies 15 – Versionamento e git

Eccoci con il quindicesimo Informatica per script kiddies, in cui parleremo di uno degli strumenti più utili nella programmazione di software (ma anche nella vita in generale, ne sogno un’applicazione ai codici legislativi), che per qualche motivo è anche uno dei meno conosciuti ai programmatori in erba: il controllo versione.

(altro…)

Informatica per script kiddies 14 – Le tastiere meccaniche

Un po’ in ritardo, questo quattordicesimo Informatica per script kiddies è un po’ atipico. Non parliamo infatti di una cosa strettamente informatica, ma della tastiera, una periferica che per forza di cose chi si occupa di informatica utilizza abbastanza da finire per chiedersi se ci sia di meglio di quelle fornite con i PC. E sì: c’è di meglio: le tastiere meccaniche.

(altro…)

Informatica per script kiddies 13 – Le API REST e quel mondo lì

Eccoci con Informatica per script kiddies, che è arrivato al tredicesimo numero! Insomma, sì, nasceva un anno fa e non mi aspettavo di essere ancora qui a scrivere dopo un anno. Vi ringrazio per l’entusiasmo, che mi ha dato la voglia di continuare a scrivere questi articoli, e ringrazio u/Sudneo, che ha scritto l’ottavo numero permettendomi di riprendere un po’ il fiato (e che spero di rivedere presto, magari assieme ad altri, in questa rubrica).

(altro…)

Informatica per script kiddies 12 – I formati per lo scambio dei dati

Eccoci un po’ in ritardo con Informatica per script kiddies, il dodicesimo numero! Qualche settimana fa, un bell’articolo del Post mi ha fatto venire voglia di parlare di questo argomento che è molto parte del mio lavoro, e che purtroppo non è chiarissimo non solo a molti che all’informatica ci si avvicinano, ma anche a tantissimi che si trovano a dirigere, più o meno direttamente, branche Information technology di aziende.

(altro…)

Informatica per script kiddies 11 – Le comunicazioni sicure

Questo mese un Informatica per script kiddies un po’ più nello spirito dei primi, che viene dritto da dubbi che ho visto in giro di recente.

Parliamo in termini molto generali di come avviene una comunicazione sicura, e di cosa significhi “sicura”, con qualche riferimento ai sistemi tutti italiani di comunicazione certificata che sono molto utili in questo periodo e che, con serie colpe da parte dell’amministrazione pubblica, sono stati compresi pochissimo.

(altro…)

Informatica per script kiddies 10 – I sistemi operativi

Eccoci al nostro appuntamento mensile con Informatica per script kiddies!

Oggi parliamo dei sistemi operativi, quei software che utilizziamo tutti i giorni e delle cui funzioni, nonostante questo, tendiamo ad avere un’idea un po’ fumosa.

I sistemi operativi infatti, nonostante siano dei programmi a tutti gli effetti, vivono in quel limbo che sembra sempre un po’ essere a metà tra hardware e software, e non sentiamo quasi mai di starlo direttamente utilizzando.

(altro…)

Informatica per script kiddies 9 – I linguaggi di programmazione, una panoramica

È il terzo mercoledì del mese, ed eccoci con Informatica per script kiddies!

Oggi proviamo a dire qualche parola di orientamento sulle caratteristiche dei linguaggi di programmazione, ovvero delle lingue che utilizziamo per spiegare al computer cosa fare.

(altro…)