TOTP & HOTP
TOTP (Time-based One-Time Password, RFC 6238) et HOTP (HMAC-based One-Time Password, RFC 4226) sont les deux RFC qu'implémentent tous les QR d'enrôlement 2FA. Le schéma URI otpauth:// encodé est le standard de facto de Google Authenticator, universel sur toutes les grandes applications d'authentification.
Spec TOTP :RFC 6238 (basé sur le temps, 2011).
Spec HOTP :RFC 4226 (basé sur compteur, 2005).
Schéma URI :Google Authenticator Key URI Format, le format sur lequel tous les authentificateurs s'accordent.
Spec HOTP :RFC 4226 (basé sur compteur, 2005).
Schéma URI :Google Authenticator Key URI Format, le format sur lequel tous les authentificateurs s'accordent.
Ce que c'est
Un QR d'enrôlement 2FA est une URL dans le schéma otpauth:// qui porte le secret partagé plus des métadonnées d'identification. Format :
otpauth://TYPE/LABEL?secret=SECRET&issuer=ISSUER&algorithm=ALG&digits=N&period=SEC- TYPE,
totp(basé sur le temps) ouhotp(basé sur compteur). - LABEL,
Issuer:Account, encodé URL. Exemple :GitHub:alice@example.com. - secret, la clé partagée, encodée en Base32 (alphabet RFC 4648 §6 : A-Z, 2-7).
- issuer, le nom du service, affiché dans l'app d'authentification. Redondant avec le label mais améliore l'UX sur les apps qui ne parsent pas le label.
- algorithm,
SHA1(par défaut),SHA256ouSHA512. Tous les authentificateurs supportent SHA1 ; peu supportent SHA256/SHA512. - digits,
6(par défaut) ou8. La plupart des apps grand public attendent 6. - period, TOTP uniquement.
30(par défaut) ou60secondes. HOTP a un paramètrecounterà la place.
Vecteurs de test canoniques
| Cas | Entrées | URI otpauth:// attendu |
|---|---|---|
| TOTP, minimal (SHA1, 6 chiffres, 30 s) | issuer=GitHub | otpauth://totp/GitHub:alice@example.com?secret=JBSWY3DPEHPK3PXP&issuer=GitHub |
| TOTP, SHA256, 8 chiffres | issuer=Corp | otpauth://totp/Corp:bob?secret=JBSWY3DPEHPK3PXP&issuer=Corp&algorithm=SHA256&digits=8 |
| HOTP, counter=0 | issuer=YubiKey | otpauth://hotp/YubiKey:carol?secret=JBSWY3DPEHPK3PXP&issuer=YubiKey&counter=0 |
| TOTP, secret de référence RFC 6238 | issuer=Example | Secret de test RFC standard (12345678901234567890). Produit TOTP 94287082 à T=59 s. |
Validateur de secret Base32 en direct
Les apps d'authentification rejettent les secrets qui contiennent quoi que ce soit hors de l'alphabet Base32 (A-Z, 2-7). Voici le même validateur qu'Abundera exécute dans le générateur TOTP, tourne dans votre navigateur.
Entrez un secret à valider.
Pièges courants
- Base32 n'est pas Base64. Base64 utilise A-Z, a-z, 0-9, +, /, l'une de ces lettres minuscules ou les chiffres 0, 1, 8, 9 dans votre secret signifie qu'on vous a remis une chaîne Base64 qui sera rejetée par tout authentificateur.
- Longueur du secret. RFC 4226 §4 recommande au moins 128 bits (26 chars Base32) pour HOTP et 160 bits (32 chars) pour TOTP. Les secrets sous 80 bits (16 chars) sont techniquement légaux mais signalés comme faibles.
- Le support d'algorithme varie. Google Authenticator ignore le paramètre
algorithmet utilise toujours SHA1. Pour que SHA256/SHA512 prenne effet, vos utilisateurs doivent être sur 1Password, Authy, Bitwarden ou Microsoft Authenticator. - Le support de chiffres varie. La plupart des authentificateurs ignorent
digits=8et tronquent silencieusement à 6. Si les OTP à 8 chiffres comptent (banque, certaines apps gouvernementales), testez votre authentificateur cible avant de déployer. - Encodez le label en URL. Les caractères spéciaux dans issuer ou account (
:,@, espace) doivent être percent-encodés dans le label, sinon les anciens authentificateurs suppriment le label entièrement. Abundera gère cela automatiquement. - Ne jamais réutiliser les secrets. Chaque compte obtient un secret frais et cryptographiquement aléatoire. Réutiliser un secret sur des services signifie qu'une compromission sur l'un casse tous les autres.
- Le stockage compte plus que le QR. Le QR est un bootstrap ponctuel. L'app d'authentification stocke le secret après le premier scan. Si ce secret est ensuite exporté en texte clair (certaines apps le font), une fuite disque = tout 2FA compromis.
Compatibilité des apps d'authentification
| App | TOTP SHA1 | TOTP SHA256/512 | HOTP | 8 chiffres | Notes |
|---|---|---|---|---|---|
| Google Authenticator | Oui | Ignoré | Oui | Ignoré | La référence de facto. Toujours cibler cela en premier. |
| 1Password | Oui | Oui | Oui | Oui | Support RFC complet. |
| Authy | Oui | Oui | Non | Oui | Supprime HOTP dans les versions récentes. |
| Bitwarden | Oui | Oui | Oui | Oui | Support RFC complet. |
| Microsoft Authenticator | Oui | Oui | Oui | Oui | Support RFC complet. |
| YubiKey Authenticator | Oui | Oui | Oui | Oui | HOTP est le mode canonique YubiKey. |
| Duo Mobile | Oui | Ignoré | Non | Ignoré | Utilise son propre flux push ; TOTP est uniquement en fallback. |
Voir aussi
- /totp-2fa-qr-code/, le générateur TOTP avec validateur Base32 intégré.
- /hotp-qr-code/, variante HOTP basée sur compteur.
- /standards/, retour à l'index des standards.