Descripción general. TOTP es bastante simple y se describe bastante bien en la RFC a la que te vinculaste de nuevo. Es posible que desee leer el RFC en otro momento: está todo allí. Voy a resumir el RFC para usted, pero podría haberlo conseguido usted mismo leyendo el RFC.
Pasos de tiempo. Por ejemplo, preguntaste sobre qué es una marca de tiempo frente a un paso de tiempo. Los dos primeros párrafos de la Sección 4.2 definen estos términos. Como dice allí, T es el número de pasos de tiempo entre el tiempo de contador inicial T0 y el tiempo actual de Unix. X es el tamaño del paso de tiempo, por ejemplo, 30 segundos. Consulte el tercer párrafo de la Sección 4.2 de la RFC para ver un ejemplo.
Resincronización. La sección 6 describe cómo funciona la resincronización. Lee esa sección para más detalles.
Por ejemplo, supongamos que el cliente piensa que la hora actual es 10:01:20 (es decir, 1 minuto y 20 segundos después de las 10 horas), y el servidor cree que la hora actual es 10:02:07. En otras palabras, el reloj del servidor será 47 segundos adelante del cliente. Digamos por simplicidad que la hora inicial son las 10:00:00 (en la práctica será mucho más antigua que antes, pero quiero mantener los números pequeños aquí), y el intervalo de tiempo es de 30 segundos. El cliente calculará T como el número de pasos de tiempo desde el punto de inicio, es decir, T = piso (80/30) = 2. El cliente generará una contraseña de un solo uso como HOTP (K, 2). Sin embargo, la hora del servidor es diferente, por lo que el servidor calculará T '= piso (127/30) = 4, y el servidor esperará la contraseña HOTP (K, 4). La contraseña del cliente no coincidirá con lo que espera el servidor.
Si la contraseña de un solo uso del cliente no coincide con HOTP (K, T '), entonces el servidor también verifica si coincide con HOTP (K, T'-1) y HOTP (K, T'-2). En nuestro ejemplo anterior, la contraseña de un solo uso del cliente coincide con HOTP (K, T'-2), por lo que el servidor permite que el cliente inicie sesión correctamente. El servidor también puede decir que el reloj del cliente está aproximadamente 2 pasos de tiempo detrás del servidor, por lo que el servidor puede actualizar sus registros para ese cliente. La próxima vez que el cliente intente iniciar sesión, el servidor calculará T 'sobre la base de una versión ajustada de su propio reloj, ajustada por su estimación del sesgo del reloj.
Esto es bastante sencillo y estándar, y todo se explica en la Sección 6.
Discusión y advertencias. ¿Para qué estás usando contraseñas de un solo uso? Tenga en cuenta que tienen una serie de inconvenientes. Sus limitaciones más graves son que no están seguros contra ataques de intermediarios, no están seguros contra el malware del lado del cliente y no están protegidos contra los ataques de phishing.
Es posible que desee considerar otros medios de autenticación del usuario y volver a considerar si las contraseñas de un solo uso son la mejor solución para su problema particular. El método que sea mejor para usted dependerá de su aplicación particular.