Comment fonctionnent les codes 2FA ? Le TOTP expliqué
Par l’équipe Novaz · Mis à jour le 29 octobre 2026
Étapes Novaz vérifiées sur la version 1.0.5
Traduit du guide en anglais. Sur le site du service, les boutons et les menus peuvent porter des noms légèrement différents en français.
Sur cette page
Une application d’authentification et un site web calculent chacun de leur côté le même nombre à six chiffres, à partir de deux éléments qu’ils possèdent tous les deux : une clé secrète qu’ils ont partagée une fois, et l’heure actuelle. Rien ne s’échange entre eux au moment où vous vous connectez. C’est pour cela que le code fonctionne sans réseau, et qu’il change toutes les 30 secondes. Cette méthode s’appelle TOTP, pour « time-based one-time password » (mot de passe à usage unique basé sur le temps), et c’est un standard ouvert (RFC 6238).
Ingrédient n° 1 : la clé de configuration
Lorsque vous activez la 2FA, le site web génère un secret aléatoire et vous le présente sous forme de code QR, accompagné d’une version texte appelée clé de configuration. Votre app l’enregistre. À partir de là, le site et votre app possèdent la même clé, et personne d’autre ne devrait l’avoir.
Le code QR n’est qu’un lien dans un format standard, otpauth://totp/…, qui contient la clé, le nom du service, le nom de votre compte et, éventuellement, les réglages décrits plus bas. Notre décodeur de codes QR 2FA montre ce qu’il contient.
Ingrédient n° 2 : l’heure, comptée par paliers
Les deux côtés prennent l’heure actuelle sous forme de secondes écoulées depuis le 1er janvier 1970 (temps Unix) et la divisent par 30, en ignorant le reste. Le résultat est un nombre entier qui augmente de un toutes les 30 secondes. La RFC 6238 l’appelle T et recommande « a default time-step size of 30 seconds » (un palier de temps de 30 secondes par défaut).
Les combiner pour obtenir un code
L’app fait passer la clé et T dans HMAC, une fonction cryptographique, généralement avec SHA-1. Elle réduit ensuite le résultat à un nombre court, selon une méthode définie dans le standard HOTP (RFC 4226, section 5.3) :
- Les 4 derniers bits du résultat HMAC désignent une position dans ce résultat.
- L’app prélève 31 bits à partir de cette position, sous forme de nombre.
- Elle garde les 6 derniers chiffres de ce nombre. Certains services en utilisent 8.
Changez la clé ou le palier de temps, et vous obtenez un code complètement différent. Impossible de remonter d’un code jusqu’à la clé.
Try it: a live TOTP code
Calculated in your browser from an example key. Don't paste a real setup key here.
Current code
…
Previous: …
Next: …
- Unix time
- …
- Time step T = ⌊time ÷ 30⌋
- …
- Seconds left
- …
Pourquoi le site web l’accepte
Le site fait le même calcul avec sa copie de la clé et sa propre horloge. Si les nombres correspondent, vous êtes connecté. Deux détails rendent cela possible en pratique :
- Une petite marge pour le délai. Un code saisi à la fin d’un palier peut arriver pendant le suivant. La RFC 6238 recommande que « at most one time step is allowed as the network delay » (au plus un palier de temps soit toléré comme délai réseau) : beaucoup de sites acceptent donc aussi le code qui précède le code en cours.
- Chaque code ne sert qu’une fois. Le standard indique qu’un serveur « MUST NOT accept the second attempt » (ne doit pas accepter la seconde tentative) d’un code qu’il a déjà accepté. Les recommandations américaines du NIST disent la même chose : les vérificateurs « SHALL accept a given OTP only once while it is valid » (n’acceptent un OTP donné qu’une seule fois pendant sa validité) (NIST SP 800-63B-4).
C’est aussi pour cela qu’une horloge mal réglée casse les codes. Si votre iPhone a une minute d’écart, il calcule le code d’un autre palier de temps que celui du site. Consultez Le code d’authentification ne fonctionne pas ?
Les réglages qu’un service peut modifier
Les standards autorisent quelques variantes, et un code QR peut les transporter :
| Réglage | Valeur habituelle | Également autorisé |
|---|---|---|
| Hachage | SHA-1 | SHA-256, SHA-512 (RFC 6238, section 1.2) |
| Chiffres | 6 | 7 ou 8 (RFC 4226, section 5.3) |
| Intervalle | 30 secondes | D’autres durées |
Si un service utilise un réglage inhabituel, ajoutez-le en scannant le code QR plutôt qu’en saisissant la clé : votre app récupère ainsi les réglages aussi.
TOTP et HOTP
HOTP, le standard le plus ancien, utilise un compteur qui augmente chaque fois que vous demandez un code, au lieu de l’heure. TOTP, c’est HOTP avec le palier de temps comme compteur : « TOTP = HOTP(K, T) ». La plupart des sites web utilisent aujourd’hui TOTP.
Ce dont le TOTP ne protège pas
Comme vous saisissez le code vous-même, une fausse page de connexion convaincante peut vous le demander et s’en servir aussitôt. Le NIST le dit clairement : « OTP authentication is not phishing-resistant » (l’authentification par OTP ne résiste pas à l’hameçonnage). Les clés d’accès et les clés de sécurité, elles, y résistent. Pour en savoir plus : Application d’authentification ou SMS.
Dans Authenticator App - Novaz
Novaz génère des codes TOTP standard sur votre iPhone :
- À partir d’un code QR : SHA-1, SHA-256 ou SHA-512 ; de 6 à 8 chiffres ; des intervalles de 1 à 300 secondes.
- À partir d’une clé saisie à la main : toujours 6 chiffres, 30 secondes et SHA-1.
Elle ne génère pas de codes HOTP. Elle vérifie aussi l’horloge de votre iPhone, et vous avertit lorsque l’écart atteint 15 secondes ou plus.