One-Time Password (OTP): cosa sono, come vengono generate e perché sono cruciali per la sicurezza online
Il codice OTP è una password usa e getta generata in modo casuale che viene usata in associazione a un’altra password nell’autenticazione a due fattori per aumentare la sicurezza dei servizi online.
L’OTP può apparire su un display che si aggiorna a cadenza regolare oppure può essere condivisa con l’utente tramite SMS, email o app dedicate. In ogni caso, il codice OTP può essere usato per un’unica operazione, dopodiché diventa inutilizzabile.
L’OTP (one-time password) è una password monouso che può essere usata per accedere a piattaforme informatiche, verificare la propria identità e autorizzare diverse operazioni online, dalla registrazione di un nuovo account alla disposizione di un bonifico tramite home banking.
Noto anche come OTAC (one-time authorization code), il codice OTP è una combinazione casuale di numeri che permette di superare le limitazioni delle password “statiche”, tradizionalmente esposte ad attacchi informatici di vario tipo.
Il codice OTP viene spesso utilizzato in associazione a un’altra password, come componente fondamentale della cosiddetta Two-Factors Authentication (2FA, autenticazione a due fattori). L’esempio più classico è l’accesso a un servizio online in cui, dopo aver inserito username e password, viene richiesto di inserire un OTP ricevuto via SMS, email o tramite applicazione sul proprio smartphone.
L’OTP, che può essere usata una sola volta e ha spesso una validità limitata nel tempo, garantisce che l’operazione venga eseguita dalla persona che detiene un certo dispositivo (il token fisico o lo smartphone su cui si riceve l’OTP) oppure che sia a conoscenza di alcune informazioni, come un codice PIN.
Per essere sicuro, il codice OTP deve essere impossibile da indovinare o dedurre, motivo per cui si tratta sempre di una sequenza casuale, generalmente numerica, che viene comunicata tramite canali sicuri come SMS e token.
Ma come viene generato un codice monouso? In termini molto semplici, possiamo dire che il codice OTP è il “riassunto” di una più o lunga serie di calcoli che partono essenzialmente da due dati di input: il primo è sempre una chiave segreta condivisa tra server e utente (le credenziali di accesso, un codice PIN, etc.), mentre il secondo può variare.
Gli algoritmi di generazione dell’OTP possono essere basati sulla password precedente, sulla sincronizzazione tra il server di autenticazione e il dispositivo dell’utente, e quindi sull’orario, o semplicemente su un numero random.
In ogni caso, le password usa e getta sono il risultato di algoritmi complessi e non invertibili, ovvero che non permettono di risalire all’input originale a partire dall’output. Quando usiamo un codice OTP per confermare un’operazione o per accedere a un servizio che richiede un’autenticazione a due fattori, quindi, aggiungiamo un ulteriore livello di sicurezza dato da due elementi fondamentali: la casualità del risultato e la complessità dei calcoli necessari a ottenerlo.
Come dicevamo, l’OTP viene generato a partire da due dati di input: una chiave segreta condivisa e un secondo dato che può variare. Quest’ultimo può essere basato sulla sincronizzazione temporale di due dispositivi, su un contatore che tiene traccia del numero di iterazioni oppure su una cifra casuale che può essere a sua volta generata nei modi più disparati.
Riassumendo, gli approcci più diffusi per la generazione di codici OTP sono:
Il codice OTP così generato può essere condiviso con l’utente finale tramite diversi canali. Le TOTP, per esempio, che dipendono dalla sincronizzazione dei dispositivi, possono essere condivise su appositi dispositivi hardware, come OTP display o smart card oppure utilizzando dei cosiddetti soft token, generalmente delle applicazioni sincronizzabili come Google Authenticator e altri gestori password.
Nelle HOTP, invece, è sufficiente che il dispositivo dell’utente sia sincronizzato con il contatore del server, che aumenta ogni volta che viene generato un codice. Gli OTP generati tramite hash possono essere inviati via SMS, anche se si prediligono token fisici e applicazioni specifiche per smartphone.
Nei codici OTP generati a partire da un dato randomico, infine, l’elemento di sincronizzazione è dato dalla challenge specifica (che cambia ad ogni tentativo di accesso): la sicurezza poggia sul segreto condiviso tra server e utente, per cui le password possono essere inviate via SMS, via email o in altro modo, senza grandi limitazioni.
Nonostante restino esposte, seppur minimamente, ad alcuni attacchi informatici, le password usa e getta sono sempre più diffuse. Le OTP, infatti, riducono significativamente il rischio legato alle password compromesse e agli attacchi informatici, rendendo le operazioni online più sicure.
Il fatto che possano essere condivise in tempo reale tramite canali estremamente accessibili come SMS, email e applicazioni da scaricare sullo smartphone, rende le password monouso anche molto semplici da implementare nei propri sistemi.
Le password usa e getta sono inoltre uno strumento essenziale in materia di compliance: le normative sulla protezione dei dati come il GDPR, infatti, richiedono meccanismi di autenticazione robusti per la protezione dei dati sensibili. Le password OTP, quindi, possono essere utilizzate per garantire la conformità alla normativa in operazioni delicate come la firma digitale di un documento.