¿El algoritmo TOTP se basa en que la hora del cliente siempre se sincroniza correctamente?

-1

¿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? 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 Protocolo de tiempo de red servidor para asegurar que todo está sincronizado?

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.

Además, ¿cómo garantizan todos los clientes que su marca de tiempo comienza al mismo tiempo que se inicia la época del servidor?

    
pregunta Ole 10.11.2017 - 00:01
fuente

2 respuestas

2
  

¿El algoritmo TOTP depende de que la hora del cliente siempre se sincronice correctamente?

  

¿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 podrían autenticarse correctamente . Esto no es exactamente un token no válido , solo un token para un tiempo diferente.

  

las zonas horarias desempeñan un papel en que el token sea correcto

No

  

¿el cliente y el servidor se comunican con un servidor de Network Time Protocol para asegurarse de que todo está sincronizado?

No . Un servidor NTP es una forma de hacer que cualquiera de ellos obtenga la hora correcta , pero su abuela, introduciendo manualmente la fecha y la hora actuales (y el dispositivo que se configura en la zona horaria correcta) también funcionará.

  

suponga que hubo 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 tardaba 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.

El servidor puede ser un poco indulgente al aceptar algunos pasos de tiempo alrededor del correcto (desde el punto de vista del servidor) y usar un paso de tiempo no muy pequeño.

Por ejemplo, con un intervalo de tiempo de 30 segundos, y aceptar 3 TS por encima o por debajo del servidor, le da a su abuela 1.5-2 minutos para escribirlo. Auméntelo a 10 y le daría 5 minutos ... Es solo una cuestión de determinar cuánto tiempo desea aceptarlos. Pero a la inversa, eso permite que una ventana de ataque mayor utilice de manera fraudulenta dicho código.

Con respecto al sesgo del reloj, tenga en cuenta que puede registrar la diferencia entre los códigos esperados y proporcionados y extrapolar el sesgo esperado de eso. Si en el día 1 10:00, el usuario proporciona el código para 09:58, y al día siguiente el código para 09:56, podría inferir que tiene un sesgo de reloj de 2 minutos por día, y ajustar en consecuencia la expectativa del servidor. para este usuario a valores antiguos que de otro modo no se utilizarían (restablecer correctamente cuando el reloj del usuario está "fijo"). Sin embargo, este cálculo aumenta notablemente la complejidad. La mayoría de las veces, no creo que generalmente necesites hacer eso.

  

Además, ¿cómo garantizan todos los clientes que su marca de tiempo comienza al mismo tiempo que se inicia la época del servidor?

El algoritmo que ambos acuerdan usar, establece un tiempo dado desde el cual comienza el instante (típicamente la época de Unix).

    
respondido por el Ángel 10.11.2017 - 02:15
fuente
2

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.

    
respondido por el cornelinux 10.11.2017 - 07:35
fuente

Lea otras preguntas en las etiquetas