HOTP (HMAC-based One-Time Password, RFC 4226) est un algorithme de génération de mot de passe à usage unique fondé sur un compteur. Le générateur et le serveur partagent une clé secrète et un compteur ; à chaque demande, on calcule un HMAC de la valeur du compteur avec la clé, puis on en tronque le résultat pour obtenir un code de six à huit chiffres. Le compteur est ensuite incrémenté.
La question de la synchronisation
Comme le code ne dépend pas du temps, il reste valide tant qu'il n'a pas été consommé. Si l'utilisateur génère des codes sans les valider — pressions répétées sur un jeton de poche —, son compteur avance plus vite que celui du serveur. Les implémentations gèrent ce décalage par une fenêtre d'anticipation : le serveur teste les quelques valeurs suivantes et resynchronise le compteur en cas de correspondance. Cette fenêtre doit rester étroite, sous peine d'élargir la surface d'attaque par force brute.
À ne pas confondre avec TOTP
| HOTP | TOTP | |
|---|---|---|
| Variable d'entrée | Compteur d'événements | Temps (pas de 30 s en général) |
| Validité du code | Jusqu'à consommation | Fenêtre temporelle courte |
| Dérive à gérer | Compteur | Horloge |
| Référence | RFC 4226 | RFC 6238 |
TOTP est en réalité une spécialisation de HOTP, où le compteur est dérivé de l'horloge. Dans les deux cas, le code est saisissable par l'utilisateur, donc transmissible : ni HOTP ni TOTP ne résistent au phishing en temps réel ni à l'AiTM, puisque rien ne lie le code au site qui le demande.
Aller plus loin : définition de TOTP · TOTP ou SMS-OTP : lequel choisir · MFA résistant au phishing · l'authentification cognitive