Come funzionano i codici TOTP: il codice che cambia ogni 30 secondi

21 maggio 2026 7 min di lettura

Scopri come funzionano i codici TOTP delle app di autenticazione: segreto condiviso, tempo, QR code, codici di recupero, phishing e comandi Linux per capire il meccanismo.

Come funzionano i codici TOTP: il codice che cambia ogni 30 secondi

Nei primi episodi di questa serie abbiamo seguito il viaggio verso un sito: prima abbiamo imparato a leggere una URL, poi abbiamo visto come il DNS traduce i nomi in indirizzi IP, infine abbiamo parlato di sicurezza DNS, DNSSEC, DNS over HTTPS, DNS over TLS e protezione del dominio.

Ora immaginiamo di essere arrivati sul sito giusto. Il dominio è corretto, la connessione è HTTPS, il DNS ci ha portato alla destinazione legittima. Inseriamo username e password, poi il servizio ci chiede un codice di sei cifre generato da un’app di autenticazione.

Quel codice cambia ogni trenta secondi. Il telefono spesso non sta ricevendo SMS e non deve nemmeno essere connesso a Internet. Eppure il server riesce a capire se il codice è corretto.

Il meccanismo si chiama TOTP, cioè Time-based One-Time Password: password monouso basata sul tempo.

L’idea base del TOTP

Il TOTP si basa su un principio semplice: il server e l’app di autenticazione condividono un segreto.

Quando attivi l’autenticazione tramite app, il servizio genera un segreto e di solito te lo mostra come QR code. Tu apri l’app, scansioni il QR code, e l’app salva quel segreto insieme al nome del servizio e dell’account.

Da quel momento, server e telefono conoscono la stessa informazione. Quando serve un codice, entrambi fanno lo stesso calcolo: prendono il segreto, prendono l’orario corrente, applicano una funzione crittografica e ottengono un codice breve, spesso di sei cifre.

Il telefono non manda il codice al server in anticipo. Lo genera localmente. Sei tu che lo leggi e lo inserisci nella pagina di login. Il server calcola il codice atteso e confronta.

Se il codice combacia, il secondo passaggio del login viene accettato.

Il QR code è una credenziale

Un errore comune è pensare che il QR code sia solo una comodità grafica. In realtà contiene il segreto che permette di generare i codici futuri.

Questo significa che il QR code va trattato come una credenziale.

Se qualcuno lo fotografa durante la configurazione, può aggiungere lo stesso account alla propria app di autenticazione e generare gli stessi codici. Il codice cambia ogni trenta secondi, ma il segreto resta lo stesso.

Per questo non conviene salvare screenshot del QR code nella galleria del telefono o in un cloud non protetto. Se devi conservare il segreto, usa strumenti adatti, come un password manager affidabile, e ragiona sempre in base all’importanza dell’account.

Un esempio da terminale Linux

Per vedere il meccanismo senza usare account reali possiamo usare oathtool, uno strumento da riga di comando che genera codici OTP.

Su Debian e Ubuntu si installa così:

sudo apt install oathtool

Poi possiamo usare un segreto di prova:

SECRET="JBSWY3DPEHPK3PXP"
oathtool --totp -b "$SECRET"

Il comando restituisce un codice numerico:

482913

Se ripeti subito il comando, probabilmente ottieni lo stesso codice:

oathtool --totp -b "$SECRET"

Se aspetti il cambio della finestra temporale, di solito trenta secondi, il codice cambia.

Questo esperimento mostra una cosa importante: il codice non viene scaricato da Internet. Viene calcolato a partire da segreto e tempo.

Il ruolo del tempo

Il TOTP non usa l’ora come la leggiamo noi sul calendario. Usa un contatore temporale.

Da terminale puoi vedere il timestamp Unix con:

date +%s

Questo valore indica i secondi trascorsi dal primo gennaio 1970. Il TOTP prende questo numero e lo divide in finestre temporali, spesso da trenta secondi.

Puoi vedere la finestra corrente con:

echo $(( $(date +%s) / 30 ))

Questo numero cambia ogni trenta secondi. Se il server e l’app usano lo stesso segreto e una finestra temporale compatibile, generano lo stesso codice.

Possiamo anche chiedere a oathtool codici per momenti diversi:

oathtool --totp -b --now "2026-05-19 10:00:00" "$SECRET"
oathtool --totp -b --now "2026-05-19 10:00:30" "$SECRET"
oathtool --totp -b --now "2026-05-19 10:01:00" "$SECRET"

Stesso segreto, tempi diversi, codici diversi.

Perché TOTP è diverso dagli SMS

Gli SMS sono stati usati per anni come secondo fattore, ma hanno limiti importanti. Dipendono dalla rete telefonica, possono arrivare in ritardo, possono essere esposti ad attacchi di SIM swapping e possono essere letti da malware sul dispositivo.

TOTP riduce alcune di queste dipendenze. L’app genera codici localmente. Non serve campo telefonico, non serve ricevere un messaggio, non serve che l’operatore telefonico partecipi a ogni login.

Questo però non significa che TOTP sia invulnerabile.

Il rischio più importante da capire è il phishing in tempo reale. Se un utente inserisce username, password e codice TOTP in una pagina falsa, l’attaccante può usare subito quei dati sul sito vero. Il codice dura poco, ma quei pochi secondi possono bastare.

Per questo il TOTP non certifica che la pagina sia legittima. Dimostra solo che chi sta inserendo il codice ha accesso al dispositivo o al segreto che genera il codice.

Il collegamento con URL e DNS

Qui si vede il collegamento con gli episodi precedenti.

Puoi avere una connessione HTTPS, ma se sei sul dominio sbagliato stai parlando in modo cifrato con il sito sbagliato. Puoi avere il DNS funzionante, ma se clicchi un dominio ingannevole il browser risolve proprio quel dominio. Puoi avere un codice TOTP valido, ma se lo consegni a una pagina falsa il codice può essere riusato subito.

La sicurezza è una catena. URL, DNS, HTTPS, password e secondo fattore lavorano insieme. Nessun singolo elemento cancella gli altri.

Prima di inserire un codice TOTP, quindi, non chiederti solo se il codice è corretto. Chiediti anche se sei sul sito corretto.

Orologi, tolleranza e finestre temporali

TOTP dipende dal tempo. Se l’orologio del telefono è molto sballato, i codici potrebbero non funzionare.

Per evitare problemi agli utenti, i server spesso accettano una piccola tolleranza: per esempio il codice della finestra corrente e magari quello immediatamente precedente o successivo. Questa tolleranza è utile, ma deve restare limitata. Se un sistema accettasse codici di troppe finestre temporali, allargherebbe inutilmente lo spazio di attacco.

Il punto pratico è semplice: tieni l’orologio del dispositivo sincronizzato e, se i codici non funzionano, non dare subito per scontato che l’account sia rotto. Potrebbe essere anche un problema di orario.

Codici di recupero

Quando attivi TOTP, molti servizi ti mostrano codici di recupero. Sono codici monouso da conservare in un posto sicuro. Servono se perdi il telefono, cambi dispositivo, rompi lo schermo o non riesci più ad aprire l’app di autenticazione.

Qui gli errori comuni sono due.

Il primo è non salvarli affatto, rischiando di restare fuori dall’account.

Il secondo è salvarli male, per esempio in screenshot non protetti o in file lasciati in giro.

Una scelta pratica, per molti utenti, è conservarli in un password manager affidabile. Per account molto critici può avere senso anche una copia offline protetta.

Dove attivare TOTP per primo

Se non sai da dove partire, parti dall’email principale.

L’email è spesso l’account più importante: permette di recuperare password, confermare registrazioni, ricevere documenti, codici, fatture e comunicazioni bancarie. Se qualcuno entra nella tua email, può provare a prendere il controllo di molti altri account.

Subito dopo vengono gli account di lavoro, i repository di codice, i pannelli cloud, hosting, registrar e DNS. Negli episodi precedenti abbiamo visto quanto conta il controllo del dominio: se qualcuno entra nel pannello DNS, può cambiare record, creare sottodomini e indirizzare utenti verso risorse controllate da lui.

Per questi account il secondo fattore non dovrebbe essere opzionale.

Errori da evitare

Il primo errore è salvare il QR code come screenshot. Quel QR code contiene il segreto.

Il secondo è non salvare i codici di recupero.

Il terzo è inserire codici senza contesto. Se ricevi una richiesta mentre non stai facendo login, fermati. Se una pagina ti chiede il codice ma la URL non convince, fermati. Se qualcuno al telefono ti chiede il codice “per verificare la tua identità”, fermati.

Il quarto è pensare che TOTP renda impossibile il furto dell’account. TOTP è molto meglio della sola password, ma non è resistente al phishing quanto passkey e chiavi hardware moderne, perché un codice copiato nel posto sbagliato può essere usato subito.

Conclusione

TOTP non è magia. È un accordo tra server e dispositivo, basato su un segreto condiviso e sul tempo.

Funziona bene quando il segreto resta segreto, l’orologio è abbastanza corretto, i codici di recupero sono conservati bene e noi inseriamo il codice solo nel sito giusto.

Il codice che cambia ogni trenta secondi è utile, ma non deve farci spegnere l’attenzione. Proprio quando una pagina chiede un codice, dobbiamo essere ancora più sicuri che quella pagina sia davvero quella legittima.

Nel prossimo episodio allargheremo il quadro: vedremo la differenza tra 2FA e MFA, e perché non tutti i secondi fattori offrono lo stesso livello di protezione.