Come funziona TOTP
Quando scansioni un codice QR 2FA, l’app memorizza un segreto condiviso, tipicamente 20 byte casuali mostrati come una stringa Base32 di 32 caratteri. Ogni 30 secondi calcola HMAC-SHA1(segreto, ⌊adesso / 30⌋), prende quattro byte del risultato a un offset dato dal suo ultimo nibble, e riduce quel numero modulo 10⁶ per ottenere sei cifre. Il server fa lo stesso, di solito accettando anche la finestra precedente e quella successiva per tollerare lo scostamento degli orologi. Sul telefono non c’è alcuna rete coinvolta, ed è per questo che le app di autenticazione funzionano offline.
L’URI otpauth
Il codice QR contiene un URI come otpauth://totp/Example:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Example&digits=6&period=30&algorithm=SHA1. Incollandolo qui vengono compilati tutti i parametri. La maggior parte dei servizi usa i default (SHA-1, 6 cifre, 30 s); alcuni usano 8 cifre o SHA-256, e alcune app ignorano il parametro dell’algoritmo, una causa comune di ticket «il codice è sbagliato».
Debug di una configurazione 2FA
- Metti il segreto qui e nell’app; i codici devono coincidere. Se no, il segreto è stato scritto male o l’app ignora i parametri.
- Se i codici coincidono ma il server li rifiuta, l’orologio del server è sbagliato. TOTP dipende dal fatto che entrambe le parti concordino sull’ora entro la finestra.
- Controlla che il server verifichi con una finestra di ±1 e rifiuti il riuso dello stesso codice (replay).
Note di sicurezza
Il segreto è tutta la sicurezza: chiunque lo abbia può generare codici per sempre. Memorizzalo cifrato, non registrarlo mai nei log, e preferisci WebAuthn / passkey dove possibile, perché i codici TOTP possono essere sottratti con phishing in tempo reale. Questa pagina è per sviluppatori che testano la propria configurazione; tratta qualsiasi segreto incollato in un browser come dato di prova.
Domande
Perché il mio codice è diverso da quello dell’app?
Controlla che il segreto sia identico (Base32 ignora maiuscole e spazi ma ogni lettera conta), che cifre, periodo e algoritmo corrispondano a quanto specificato dal servizio, e che l’orologio del computer sia corretto. Un codice sfasato di esattamente una finestra indica una differenza di orologio di circa 30 secondi.
Qual è l’alfabeto Base32?
A–Z e 2–7; niente 0, 1, 8 o 9, così i segreti non sono ambigui quando letti ad alta voce. Il padding = è opzionale. Lo strumento rifiuta gli altri caratteri e ti dice quali.
Che differenza c’è tra TOTP e HOTP?
HOTP (RFC 4226) usa un contatore che si incrementa a ogni uso; TOTP (RFC 6238) sostituisce il contatore con l’ora corrente divisa per il periodo. I token hardware con un pulsante sono HOTP; le app sono TOTP. Inserisci un contatore qui sopra per calcolare HOTP.
Posso generare codici per Google Authenticator o Authy?
Sì, entrambi implementano il TOTP standard. Steam Guard e alcune app bancarie usano varianti proprietarie che questo strumento non riproduce.