Un mot de passe à usage unique basé sur le temps (TOTP) est un code court qui change toutes les 30 secondes. Votre application d'authentification et le site connaissent un secret partagé et l'heure actuelle : chacun peut donc calculer seul le même code. La méthode est définie dans la RFC 6238, qui s'appuie sur le HOTP à compteur de la RFC 4226. Essayez avec le générateur TOTP.
L'algorithme en cinq étapes
- Transformer le temps en compteur.
compteur = floor(temps_unix / 30). - Appliquer HMAC au compteur. Calculez HMAC-SHA1 (ou SHA-256/512) du compteur de 8 octets en big-endian, avec le secret comme clé. Vous pouvez expérimenter avec le générateur HMAC.
- Choisir quatre octets. Le dernier quartet du résultat est un décalage ; prenez les quatre octets qui commencent là.
- Effacer le bit de poids fort. Appliquez le masque
0x7FFFFFFFpour que le nombre soit positif. - Garder les derniers chiffres. Prenez le nombre modulo 10⁶ (pour six chiffres), complété de zéros.
Un exemple vérifié
Le secret de test de la RFC 4226 est la chaîne ASCII 12345678901234567890, qui sous la forme Base32 utilisée par les applications d'authentification donne GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ. Pour les compteurs 0, 1 et 2, HOTP donne 755224, 287082 et 359152.
Pour TOTP, la RFC 6238 utilise la seconde 59 avec un pas de 30 secondes et 8 chiffres :
| Étape | Valeur |
|---|---|
| Compteur | 59 ÷ 30 → 1 |
| HMAC-SHA1 | 75a48a19d4cbe100644e8ac1397eea747a2d33ab |
| Décalage (dernier quartet) | 11 |
| Quatre octets, bit de poids fort effacé | 1094287082 |
| 8 derniers chiffres | 94287082 |
La version à six chiffres du même code est 287082. Convertissez des horodatages avec le convertisseur de timestamp Unix pour voir dans quel pas tombe un instant.
Ce que contient le QR code
Le QR code contient un lien otpauth://totp/... portant le secret, l'émetteur, le nombre de chiffres, la période et l'algorithme, par exemple otpauth://totp/Example:[email protected]?secret=GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ&issuer=Example&digits=6&period=30. Quiconque voit le secret peut générer vos codes : traitez-le comme un mot de passe.
Limites
| Méthode | Résistante à l'hameçonnage | Remarques |
|---|---|---|
| Codes SMS | Non | Peuvent être interceptés ou victimes d'un échange de SIM |
| Application TOTP | Non | Mieux que le SMS, mais un faux site peut relayer le code |
| Clé matérielle ou passkey | Oui | Vérifie le vrai domaine du site |
Pièges courants
- Mauvaise horloge. La cause la plus fréquente de codes refusés.
- Perdre le secret. Gardez les codes de secours ou la clé de configuration d'origine en lieu sûr, sinon vous risquez d'être bloqué.
- Coller de vrais secrets dans des pages web. N'utilisez le générateur qu'avec des secrets de test.
- Réutiliser un code. Chaque code vaut pour un pas ; les serveurs rejettent en général un rejeu.
Voir Comment générer des mots de passe et phrases de passe robustes pour le premier facteur, et HMAC et Authentification multifacteur (MFA) pour les définitions.