Mot de passe à usage unique basé sur le temps
Un mot de passe à usage unique basé sur le temps (TOTP, Time based One Time Password en anglais) est un algorithme permettant de générer un mot de passe à usage unique.
Il permet la génération d'une séquence de caractères valable seulement pendant un intervalle de temps limité afin d'utiliser un mécanisme de double authentification. C'est une extension du mot de passe à usage unique basé sur HMAC (HOTP), standardisée en 2011 dans la RFC 6238[1] par l'IETF. Contrairement à HOTP qui nécessite un compteur incrémental partagé entre les deux entités pour garantir l'utilisation unique, TOTP utilise l'heure et un secret partagé. Un intervalle de temps de validité est défini pour tolérer une désynchronisation des horloges.
Algorithme
L'algorithme de génération est utilisé symétriquement par les deux parties : le « prouveur » souhaitant se connecter et le « vérifieur » responsable de la vérification de la connexion. Ils doivent donc partager un certain nombre d'informations[1] :
- un temps Unix, noté T0, correspondant au temps d'origine (par défaut il est à 0, soit l'epoch) ;
- un choix d'intervalle de temps commun, noté X ;
- un secret commun (ou une clé secrète identique), noté k.
Le partage de ces caractéristiques est primordial pour le bon fonctionnement de l'algorithme. Il est fréquemment fait grâce à un QRcode[2].
Soit T, le nombre d'intervalle s'étant écoulé depuis l'epoch, c'est-à-dire : T = ( temps de la machine sous sa forme POSIX - T0 ) / X.
Le TOTP est généré en utilisant l'algorithme HOTP, avec pour paramètres la clé secrète et un nombre T, de la façon suivante : TOTP = HOTP(K,T).
Sécurité
Contrairement aux mots de passe, les codes TOTP sont à usage unique, ainsi un identifiant compromis n'est valide que pour une période limitée. Les utilisateurs doivent cependant entrer le code TOTP dans un formulaire d'authentification ce qui laisse une possibilité d'attaque par hameçonnage. Grâce à la brêve fenêtre durant laquelle est valide un code TOTP, les attaquants doivent émuler les identifiants en temps réel[3].
Les identifiants TOTP sont aussi basés sur un secret partagé connu du client et du serveur, créant de nombreux points où le secret peut être dérobé[4]. Un attaquant ayant accès à ce secret partagé peut alors générer de nouveaux codes TOTP à sa guise. Ceci peut représenter un véritable problème si l'attaquant à ainsi accès à une importante base de données d'authentification[5].
Implémentations existantes
- FreeOTP
- KeepassXC
- Google Authenticator
- Microsoft authenticator [6]
Notes et références
- « TOTP: Time-Based One-Time Password Algorithm », sur datatracker.ietf.org (consulté le )
- « Blog Stéphane Bortzmeyer: RFC 6238: TOTP: Time-Based One-Time Password Algorithm », sur www.bortzmeyer.org (consulté le )
- (en-US) Jovi Umawing, « Has two-factor authentication been defeated? A spotlight on 2FA's latest challenge » [archive du ], sur Malwarebytes Labs, (consulté le )
- « Time-Based One-Time Passwords (TOTP) », www.transmitsecurity.com, (lire en ligne, consulté le )
- (en-US) Kim Zetter, « RSA Agrees to Replace Security Tokens After Admitting Compromise », WIRED, (lire en ligne [archive du ])
- « Application d’authentification pour téléphone mobile Microsoft | Sécurité Microsoft », sur www.microsoft.com (consulté le )