En detalle
HOTP, definido en el RFC 4226, calcula un HMAC de un contador de 8 bytes, toma cuatro bytes del resultado mediante una regla llamada truncamiento dinámico y se queda con las últimas seis u ocho cifras decimales. El servidor y el token mantienen el contador sincronizado. Los tokens de hardware que generan un código al pulsar un botón suelen usar HOTP, y TOTP es la misma idea con el contador sustituido por la hora.
Por qué importa
Como el contador solo avanza cuando se usa un código, un token y un servidor pueden desincronizarse si se pulsa muchas veces el botón sin iniciar sesión. Por eso los servidores aceptan códigos dentro de una pequeña ventana hacia delante y luego se resincronizan. Un código es válido hasta que se usa, no durante un número fijo de segundos, que es la principal diferencia práctica con TOTP.
Ejemplo
Con el secreto de prueba del RFC 12345678901234567890, los contadores 0, 1 y 2 dan los códigos 755224, 287082 y 359152.
Confusión habitual
HOTP y TOTP se confunden a menudo porque al usuario le parecen idénticos. La diferencia es lo que cambia el código: un contador en HOTP, el reloj en TOTP.