Es un error común que el algoritmo TOTP esté involucrado de alguna manera con Google o al revés. TOTP se basa en el algoritmo HOTP, que se publicó en 2005 en RFC 4226 .
El algoritmo TOTP reemplaza el contador del algoritmo HOTP con un intervalo de tiempo de 30 o 60 segundos. Se define en RFC 6238 .
Se debe tener en cuenta que la idea de los algoritmos xOTP se basó en mucho antes de que existiera el primer teléfono inteligente. Ningún empleado de Google estuvo involucrado en la especificación, sino varias personas de proveedores de hardware .
Google simplemente adoptó el algoritmo TOTP para dispositivos Android, ¡para el cual no fue diseñado en primer lugar!
¿Qué sucede si, por algún motivo, el reloj / calendario de un teléfono celular está apagado por una cantidad de tiempo significativa? ¿El algoritmo TOTP (OTP basado en tiempo) genera un token no válido?
No, no necesariamente! Capítulo 6 de la RFC recomienda una resincronización, es decir, el reloj en el dispositivo de autenticación puede desviarse y el servidor de autenticación debe recordar la deriva del reloj. Entonces, con el tiempo, el dispositivo de autenticación puede tener un desplazamiento significativo , si el usuario usa el dispositivo de autenticación con regularidad. En mi propio proyecto, el sistema de autenticación privacyIDEA se encarga de la deriva del reloj.
Además, ¿las zonas horarias desempeñan un papel en el token que es correcto o el cliente y el servidor se comunican con un servidor de protocolo de tiempo de red para garantizar que todo esté sincronizado?
Como señaló Ángel, no es necesario pensar en zonas horarias, ya que las franjas horarias se utilizan en función de la hora del sistema Unix.
Y como RFC 6238 se definió para tokens de hardware, tampoco hay recomendaciones para usar NTP, ya que el token de hardware no tiene una conexión a Internet, sino solo un reloj de cuarzo local con batería.
Por supuesto, si implementa su servidor, debe conectar su servidor a ntp. Y si está ejecutando una aplicación de teléfono inteligente como autenticador, esto también debería usar ntp.
En otras palabras, si quisiéramos que el diseño del servidor fuera sensible al escenario anterior, ¿cómo podríamos hacer esto? Por ejemplo, supongamos que había una diferencia de 5 segundos entre la hora del servidor y la del cliente, y mi abuela estaba escribiendo el código en su teléfono y solo estaba tomando mucho tiempo. Cómo evaluar la cantidad de tiempo de búfer que tiene el usuario para escribir el código y si es correcto o no.
Esto se define en el RFC . 5 segundos no importa, ya que cae en el mismo intervalo de tiempo. Su autenticación puede verificar algunos intervalos de tiempo antes de la hora actual y después de la hora actual y, por lo tanto, saber si el reloj (o el usuario) es un poco lento o rápido.