È un comune malinteso che l'algoritmo TOTP sia comunque coinvolto in Google o viceversa. TOTP si basa sull'algoritmo HOTP, che è stato pubblicato nel 2005 in RFC 4226 .
L'algoritmo TOTP sostituisce il contatore dell'algoritmo HOTP con un intervallo temporale di 30 o 60 secondi. È definito in RFC 6238 .
Va notato che l'idea degli algoritmi xOTP era basata lungo prima che ci fosse il primo smartphone in circolazione. Nessun dipendente di Google è stato coinvolto nelle specifiche ma piuttosto diverse persone dai fornitori di hardware di token.
Google ha semplicemente adottato l'algoritmo TOTP per i dispositivi Android, per il quale non è stato progettato in primo luogo!
What happens if for some reason a cell phones clock / calendar is off by a significant amount of time? Does the TOTP (Time-based OTP) algorithm generate an invalid token?
No, non necessariamente! Capitolo 6 della RFC raccomanda una risincronizzazione, ovvero l'orologio nel dispositivo di autenticazione potrebbe andare alla deriva e il server di autenticazione dovrebbe ricordare la deriva del clock. Quindi nel tempo il dispositivo di autenticazione può avere un offset di segno, se l'utente utilizza regolarmente il dispositivo di autenticazione. Il mio progetto, il sistema di autenticazione privacyIDEA si prende cura di tale deriva del clock.
Also, do time zones play a role in the token being correct or does both the client and the server talk to a Network Time Protocol server to ensure that everything is synced up?
Come ha sottolineato Ángel, non è necessario pensare ai fusi orari, poiché le fasce temporali vengono utilizzate in base al tempo di sistema unix.
E poiché RFC 6238 è stato definito per i token hardware, non vi è alcuna raccomandazione di utilizzare NTP, dal momento che il token hardware non ha una connessione Internet ma solo un orologio al quarzo locale alimentato a batteria.
Ovviamente, se implementi il tuo server, dovresti connettere il tuo server a ntp. E se stai eseguendo un'applicazione per smartphone come autenticatore, questo dovrebbe anche usare ntp.
So in other words if we wanted to bullet proof the design of the server to be sensitive to the above scenario how would we go about doing this? For instance suppose there was a 5 seconds differential between server time and client time and my grand mother was typing the the code on her phone, and just taking a long time. How would be assess the amount of buffer time the user has to type the code and whether it's correct or not.
Questo è definito nell'RFC . 5 secondi non importa, poiché cade nello stesso tempo. La tua autenticazione può controllare alcune fasce prima l'ora corrente e dopo l'ora corrente e quindi sapere se l'orologio (o l'utente) è un po 'lento o veloce.