L’HOTP si basa su un contatore per la seconda parte della funzione, separando il server e l’utente l’uno dall’altro. Il problema è che la password generata è valida fin quando non viene utilizzata. La TOTP ha invece una validità limitata: il suo codice può essere utilizzato solo entro un lasso di tempo stabilito. Come funziona?
Tre sono le formule importanti per l’algoritmo della Time-based-One-time Password:
TOTP = HOTP(SecretKey,CurrentTime)
Questa facile formula stabilisce solamente che la TOTP è un processo HOTP con due parametri, la SecretKey e il CurrentTime.
- SecretKey: è una password generata casualmente, conosciuta sia al server che al client
- CurrentTime: orario attuale in Tempo Unix
L’indicazione temporale cambia ogni secondo e tale tempo non basta per trasmettere il codice all’applicazione. Un secondo più tardi la TOTP non sarebbe più valida, in quanto il server ha già generato un nuovo valore hash. Per questo si ricorre a un’altra formula:
CurrentTime = floor((unixtime(now) – unixtime(T0))/T1)
Viene definito quindi il parametro CurrentTime:
- unixtime(now): orario attuale in Tempo Unix
- unixtime(T0): Tempo Unix al momento T0, si calcola nella maggior parte dei casi partendo dalla mezzanotte del 1/1/1970 (= 0)
- T1: l’intervallo di tempo nel quale la TOTP deve essere valida, solitamente 30 secondi
- floor: funzione di arrotondamento, per arrotondare il valore calcolato ad un numero intero