La sicurezza del sistema OTP è basata sulla non invertibilità delle funzioni hash. Tali funzioni hanno la proprietà di essere facilmente calcolabili, ma computazionalmente impossibili da invertire.

Analizziamo ora la modalità d'utilizzo delle funzioni hash nel sistema OTP.

Si supponga di applicare una funzione hash f due volte ad un dato valore x, giungendo così a f ( f ( x ) ).

Si immagini che l'utente comunichi ad un altro utente o ad un computer, sia la funzione usata sia il risultato dell'operazione. L'altra parte non può conoscere né il valore di x né quello di f ( x ), dato che la funzione usata non è invertibile, ma può verificare se un valore y qualsiasi che gli sia fornito può essere usato per ottenere f ( f ( x ) ).

Per fare questo basta applicare una volta la funzione hash a y e confrontare il risultato ottenuto con f ( f ( x ) ). Se tale confronto dà esito positivo, il soggetto verificatore può essere ragionevolmente sicuro che y sia proprio f ( x ) e di conseguenza può considerare verificata l'identità dell'utente. Se poi tale soggetto memorizzasse il valore di y, potrebbe autenticare l'utente una seconda volta: basterebbe che quest'ultimo gli inviasse proprio x affinché il verificatore possa applicarvi la funzione hash e quindi verificare che f ( x ) è proprio uguale a y.

Tale procedimento si presta ad essere esteso a piacimento, semplicemente fornendo al verificatore il valore calcolato applicando n volte ad x la funzione hash. In questo modo il verificatore è in grado di provare n volte l'identità dell'utente.


Il protocollo OTP usa come funzioni hash gli algoritmi MD4 , MD5 e SHA.
Tutte le implementazioni sia dei server che dei client devono supportare MD5, dovrebbero supportare SHA e possono supportare anche MD4.
Chiaramente, il client ed il server devono usare la stesso algoritmo allo scopo di interoperare. Altri algoritmi hash potrebbero essere utilizzati per il sistema OTP mediante la pubblicazione delle loro interfacce.

Il protocollo OTP calcola le One Time Password utilizzando gli algoritmi dell’appendice A. Tali algoritmi ricevono come ingresso una stringa di qualunque dimensione e producono, mediante l'applicazione di una funzione hash, un valore a 128 bit (MD4 e MD5) o 160 bit (SHA). Tale valore viene poi ridotto, mediante l'utilizzo di una serie di XOR, in un valore a 64 bit che è anche la lunghezza delle One Time Password. Si ritiene che tale valore sia abbastanza lungo da essere sicuro e abbastanza corto per poter essere inserito manualmente, quando necessario.

Negli schemi delle sezioni successive viene indicata con "H" la funzione che il client utilizza per computare le One Time Password. Tale funzione corrisponde ad uno degli algoritmi sopra citati e viene rappresentata dal seguente schema: