Al crescere delle minacce informatiche è diventato sempre più indispensabile adottare strumenti di sicurezza per la protezione dei propri dati. Il nome utente e la password sono dati insufficienti a garantire elevati standard di sicurezza perché sono facili da sottrarre e possono essere utilizzati da soggetti non autorizzati. Ne abbiamo parlato anche in occasione del World Password Day.
Molte applicazioni online chiedono oggi agli utenti di aggiungere un ulteriore livello di sicurezza al proprio account e lo fanno abilitando l’autenticazione a due fattori o 2FA (two factor authentication).
Abbiamo visto cos’è l’autenticazione a due fattori e sappiamo che esistono vari metodi per implementarla e utilizzarla, alcuni molto più di sicuri di altri. Ad esempio gli SMS sono meno sicuri nell’ambito di un sistema per l’autenticazione a due fattori: la crescita vorticosa del numero di attacchi SIM swap ne è la conferma.
Codici OTP: cosa sono
Acronimo di One-time password, gli OTP sono codici che vengono generati sul dispositivo dell’utente e che sono validi, in combinazione con altri fattori (ad esempio username e password), per autenticarsi e ottenere l’accesso a un sito Web o un servizio online.
Sono anche comunemente utilizzati per apporre la firma digitale remota, utile per sottoscrivere documenti digitali così come se vi si fosse applicata la propria firma autografa.
Gli OTP sono anche conosciuti come “password usa e getta” perché restano validi per breve tempo e in ogni caso solo per una singola sessione di accesso o una specifica transazione.
I codici OTP vengono generati da parte di apposite app di autenticazione installabili e avviabili su un dispositivo mobile o su un computer. Qualche esempio:
- App di autenticazione per Android: Google Authenticator, Microsoft Authenticator, Cisco Duo Mobile, FreeOTP, andOTP, Twilio Authy.
- App di autenticazione per iOS: OTP auth, Step Two, Twilio Authy, Google Authenticator, Microsoft Authenticator, Cisco Duo Mobile, FreeOTP, strumento di autenticazione integrato in iOS.
- App di autenticazione per Windows: WinAuth, Twilio Authy.
- App di autenticazione per macOS: Step Two, Twilio Authy, OTP Auth (solo a pagamento).
Come funzionano le app che generano OTP
Le applicazioni come quelle citate permettono di generare un OTP valido per un breve periodo di tempo: basta aggiungere l’account che si vuole configurare quindi inquadrare il codice QR visualizzato dal servizio che si desidera configurare e il gioco è fatto. In alternativa si può digitare manualmente un codice fornito dalla piattaforma che si sta configurando.
L’autenticazione Time-based One-Time Password (TOTP) è quella più diffusa: utilizzandola viene creata una password unica ovvero un codice lato utente invece che lato server servendosi di un’app per l’autenticazione come quelle citate.
Gli utenti hanno sempre accesso a un codice univoco valido per l’accesso allo specifico servizio semplicemente aprendo l’app di autenticazione. In questo modo si evita che il server debba inviare un messaggio di testo (si pensi agli SMS) ogni volta che l’utente tenta di effettuare il login.
Nello specifico, quando l’utente attiva l’autenticazione a due fattori su un qualunque servizio che la supporta accadono alcune cose:
– Lato backend il server crea una chiave segreta per l’utente che l’ha richiesta.
– Il server condivide la chiave segreta con l’applicazione di autenticazione usata dall’utente (come detto può essere acquisita digitando manualmente un codice o inquadrando un codice QR).
– L’applicazione installata sul dispositivo dell’utente inizializza un contatore.
– L’applicazione genera una password unica utilizzando la chiave segreta e il contatore.
– L’applicazione modifica il contatore dopo un certo intervallo e rigenera il codice OTP.
L’algoritmo HOTP (HMAC-Based One-Time Password) definisce le “regole” per creare un codice a breve scadenza da una chiave segreta e indica come utilizzare il contatore.
Tutta la procedura è descritta in questo documento redatto dall’IETF (Internet Engineering Task Force).
Ma come si aggiorna il contatore? E come fa il server Web che gestisce il servizio sul quale si è attivata l’autenticazione a due fattori a tenere traccia del contatore?
Il già citato schema TOTP utilizza l’algoritmo HOTP per ottenere una password unica. La differenza è che TOTP utilizza il tempo al posto di un contatore: invece che inizializzare il contatore e tenere traccia del valore che esso assume, è possibile usare il tempo come contatore nell’algoritmo HOTP per generare un codice OTP valido.
Poiché sia il server che il dispositivo dell’utente (ad esempio lo smartphone) hanno entrambi visibilità sul tempo (giorno e ora corrente), con lo schema TOTP nessuna delle due entità deve tenere in alcun modo traccia di un contatore.
E se l’utente e il fornitore del servizio usano fusi orari differenti? Semplice. Il cosiddetto Unix time o Epoch time esprime il numero di secondi trascorsi dal 1° gennaio 1970, data scelta convenzionalmente. Un timestamp del genere risulta così indipendente da qualunque fuso orario e ha valenza universale.
Di recente si era parlato di una sorta di millennium bug che potrebbe affliggere alcuni dispositivi nel 2038, ma soltanto device e programmi a 32 bit non aggiornati: ecco perché non sarà un problema.
Per evitare problemi il codice OTP generato usando lo Unix time è valido per alcuni secondi: nel caso di Google Authenticator esso cambia ogni 30 secondi per dare modo all’utente di utilizzarlo per l’autenticazione.
In caso di difficoltà, ogni app di autenticazione integra uno strumento per la correzione dell’ora utile ad esempio per forzare una sincronizzazione dello Unix time.
Alcuni fornitori di servizi usano delle “varianti” per la creazione degli OTP: oltre alla sincronizzazione temporale tra server di autenticazione e client sul quale viene generato il codice, possono essere impiegati algoritmi matematici che generano una nuova password in base alla precedente oppure approcci in cui la password è basata su un qualche tipo di sfida (“challenge“). In quest’ultimo caso un numero casuale viene scelto dal server di autenticazione, si usa un contatore oppure viene chiesto all’utente di inserire dei numeri presenti in una tabella a lui nota (“specificare il terzo e il quinto numero“, o qualcosa di simile).
A differenza delle password tradizionali, gli OTP non sono vulnerabili ai cosiddetti replay attack in cui l’aggressore intercetta i dati (come l’invio di una password) di autenticazione, li registra e li riutilizza per accedere al sistema o all’account altrui.