Come generare OTP di prova con TOTP o HOTP
Per generare un OTP di prova, scegli TOTP o HOTP, usa un segreto condiviso fittizio in Base32, imposta cifre e periodo oppure contatore, quindi confronta il risultato con un vettore RFC noto.
Per generare un OTP devi prima sapere quale meccanismo usa il sistema: TOTP, basato sul tempo, oppure HOTP, basato su un contatore. Usa un segreto condiviso esclusivamente fittizio, imposta i parametri richiesti e confronta il codice con un vettore di test ufficiale. Un codice prodotto localmente non dimostra che un servizio esterno lo accetterà e non autentica da solo alcun utente.
Il generatore SmartPlusLab verificato implementa HOTP secondo RFC 4226 e TOTP secondo RFC 6238 con HMAC-SHA1. Non genera codici casuali arbitrari.
Che cos'è un codice monouso
Un OTP, One-Time Password, è un valore calcolato per essere usato una volta nel contesto di un sistema di verifica. La RFC 4226 definisce HOTP come calcolo basato su HMAC, un segreto condiviso e un contatore crescente. La RFC 6238 deriva TOTP da HOTP sostituendo il contatore di eventi con un fattore temporale.
È importante separare quattro azioni:
- il generatore calcola e mostra il codice;
- un canale può trasmettere il codice;
- un verificatore ripete il calcolo e confronta il valore;
- il servizio decide se completare l'autenticazione.
Il generatore svolge soltanto il primo passaggio. La visualizzazione di sei o otto cifre non prova che l'accesso sia valido.
Scegliere tra TOTP e HOTP
TOTP cambia in base all'intervallo temporale. Generatore e verificatore devono condividere segreto, algoritmo, numero di cifre e parametri temporali. Se l'orologio o il periodo non coincidono, i risultati possono essere diversi.
HOTP usa invece un contatore. Ogni avanzamento produce un codice successivo. Generatore e verificatore devono mantenere un contatore compatibile; se uno dei due avanza senza l'altro, può essere necessaria una procedura di risincronizzazione prevista dal sistema.
Nel runtime verificato, mode accetta totp e hotp. Un test con mode uguale a random viene rifiutato. Perciò non descrivere lo strumento come generatore di codici casuali, anche se una vecchia descrizione della pagina inglese menziona quella funzione.
Capire i parametri prima di compilare i campi
Il campo secret richiede un segreto Base32. È il materiale condiviso su cui si basa il calcolo, non una password da inventare per un account reale. digits seleziona sei oppure otto cifre. mode stabilisce TOTP o HOTP.
In modalità TOTP, period indica la durata dell'intervallo in secondi. In modalità HOTP, counter rappresenta il contatore. Non scambiare questi valori: un contatore non è un timestamp e il periodo non sostituisce lo stato HOTP.
Per una prova riproducibile, annota:
- algoritmo;
- modalità;
- segreto del vettore di test;
- numero di cifre;
- periodo e istante per TOTP;
- contatore per HOTP;
- valore atteso dalla fonte.
Procedura sicura con dati di laboratorio
Scegli un vettore pubblicato nelle RFC e non un segreto associato a un account. Non inserire credenziali SPID, bancarie, PEC o di altri servizi reali. I vettori esistono proprio per controllare un'implementazione senza coinvolgere un'identità o un accesso attivo.
Imposta i parametri esattamente come indicato nel vettore. Cambiare cifre, algoritmo, periodo, istante o contatore cambia anche il risultato. Esegui poi il generatore e confronta il codice carattere per carattere.
Se il risultato non coincide, non provare combinazioni a caso. Ricontrolla prima la codifica Base32, poi modalità, cifre, periodo o contatore. Per TOTP verifica anche l'istante usato nella prova. Per HOTP controlla che il contatore non sia già avanzato.
Esempio TOTP verificato
Il caso runtime selezionato usa un vettore della RFC 6238 con HMAC-SHA1:
- timestamp:
59; - cifre:
8; - periodo:
30secondi; - modalità:
totp; - risultato atteso e verificato:
94287082.
Il segreto standard del vettore resta nel codice di test e non viene riprodotto qui. Il test dimostra che questa combinazione specifica coincide con il valore RFC. Non dimostra compatibilità con ogni servizio, algoritmo o impostazione possibile.
Per HOTP, la suite verificata confronta i contatori da 0 a 9 con i valori ufficiali della RFC 4226. Anche in questo caso il risultato riguarda il vettore noto e l'implementazione HMAC-SHA1.
Proteggere il segreto condiviso
La NIST SP 800-63B distingue l'autenticatore che genera il codice dal verificatore che lo controlla e richiede protezione delle chiavi simmetriche nel sistema di verifica. Questo principio non autorizza a dedurre come il sito tratti i dati inseriti.
Il runtime testato non restituisce nel risultato il segreto Base32 sottoposto in un caso TOTP. Tuttavia, questo fatto non prova assenza di log, conservazione o altri trattamenti. Finché tali aspetti non sono documentati e revisionati, usare soltanto dati fittizi.
Un OTP non sostituisce inoltre il canale protetto, la limitazione dei tentativi, la prevenzione del riuso o le altre misure che appartengono al verificatore.
Perché un codice può non funzionare
Le cause possibili includono un segreto diverso, una modalità errata, un numero di cifre non coincidente, un periodo differente, un orologio fuori sincronia o un contatore disallineato. Può anche darsi che il servizio usi un algoritmo diverso da HMAC-SHA1.
Il generatore non può diagnosticare un account esterno. Per un servizio reale, seguire la procedura ufficiale di configurazione e recupero del fornitore. Non sostituire il segreto registrato né tentare di ricostruirlo.
La pagina italiana del generatore e quella del QR code generator non sono ancora pubblicate, quindi questo articolo non include collegamenti interni a tali destinazioni.
Domande frequenti
TOTP è più corretto di HOTP?
No. Risolvono problemi diversi: TOTP usa il tempo, HOTP un contatore. La scelta dipende dal sistema completo di verifica.
Posso usare un segreto reale per fare una prova?
Non è necessario e non è prudente in assenza di fatti approvati sul trattamento dei dati. Usa un vettore RFC fittizio.
Il generatore crea codici casuali?
No. Il runtime verificato supporta soltanto TOTP e HOTP e rifiuta la modalità random.
Perché il codice cambia?
In TOTP cambia con l'intervallo temporale. In HOTP cambia quando avanza il contatore. I parametri devono coincidere con quelli del verificatore.