TOTP es una variante basada en el tiempo de HOTP . En ambos casos, la secuencia de posibles contraseñas se deriva de una clave secreta y un "valor cambiante". Con TOTP, el "valor cambiante" es la hora actual, que ambos extremos del protocolo supuestamente saben (la hora actual es de conocimiento público). En HOTP, el "valor cambiante" es un contador, que se incrementa después del uso. Ambas partes (cliente y servidor) recuerdan el último valor de contador utilizado.
Si el cliente y el servidor se desincronizan (por ejemplo, el cliente envió una contraseña e incrementó su contador, pero un problema de red interrumpió la conexión y el servidor nunca la recibió), entonces hay un proceso para la resincronización: al recibir una contraseña, el servidor no lo compara con la siguiente contraseña (según su contador), sino con las siguientes 100 o más contraseñas, lo que permite una desincronización del contador de aproximadamente 100.
Este mecanismo se adapta bien a las llaves de los autos, que:
- No tiene una fuente de tiempo común (no hay reloj en la clave).
- Necesita trabajar con una comunicación unidireccional (desde la llave hasta el automóvil, no al revés).
- Tenga una "resincronización manual" si no está sincronizada (su sobrino de 3 años jugó con la llave durante toda una tarde, obteniendo el contador de la llave más allá del mostrador del auto, incluso con la compensación de +100; puede ya no abra el automóvil a distancia, pero cuando enciende el motor, el automóvil y la llave se comunican a través de RF de corto alcance para restablecer los contadores).
En cuanto al código, una simple solicitud de google en "hotp php" apunta a this y that .