TOTP (Time-based One-Time Password)

1. Introduction au TOTP

Définition :

TOTP (Time-based One-Time Password) est un mécanisme de génération de mots de passe à usage unique basés sur le temps.

Objectif :

Fournir une couche supplémentaire de sécurité pour l’authentification, souvent utilisée dans le cadre de l’authentification à deux facteurs (2FA).

Norme :

Basé sur l’algorithme décrit dans la norme RFC 6238.

RFC 6238 — TOTP est un standard ouvert. Tous les générateurs (Google Auth, Authy, etc.) sont interopérables.

2. Principe de fonctionnement

Composants clés :

Clé secrète :

Une clé partagée entre le serveur et l’utilisateur, généralement encodée en Base32.

Horodatage :

Le temps est divisé en intervalles (souvent de 30 secondes).

Génération du mot de passe :

  • Combinaison de la clé secrète et de l’horodatage.

…​

  • Application de HMAC (Hash-based Message Authentication Code) avec une fonction de hachage (SHA-1, SHA-256, ou SHA-512).

…​

  • Troncature pour obtenir un mot de passe d’une longueur définie (souvent 6 ou 8 chiffres).

3. Avantages du TOTP

Sécurité renforcée :

Les mots de passe expirent rapidement, ce qui réduit le risque de réutilisation.

Indépendance réseau :

Les codes TOTP peuvent être générés localement sur l’appareil de l’utilisateur, sans connexion Internet.

Interopérabilité :

Compatible avec de nombreux systèmes et applications grâce à la norme RFC 6238.

4. Applications courantes

Authentification à deux facteurs (2FA) : Utilisé dans les systèmes comme Google, Microsoft, et d’autres pour sécuriser les comptes.

Gestion d’accès :

Protéger l’accès à des serveurs, applications, et systèmes critiques.

Intégration avec des applications :

Compatible avec des applications comme Google Authenticator, Microsoft Authenticator, et Authy.

6. Configuration d’un système TOTP

Générer une clé secrète :

Générée par le serveur et partagée avec l’utilisateur. Encodée en Base32 pour la lisibilité humaine.

Créer un QR Code (facultatif) :

Utilisé pour partager la clé secrète avec une application TOTP.

Exemple avec Python (bibliothèque pyotp et qrcode) :

import pyotp
import qrcode

secret = pyotp.random_base32()
totp = pyotp.TOTP(secret)
uri = totp.provisioning_uri("user@example.com", issuer_name="MyApp")
qrcode.make(uri).save("qrcode.png")

Configurer l’application cliente :

Scannez le QR Code avec une application comme Google Authenticator. Vérification des codes :

Le serveur doit calculer le même code pour valider l’entrée de l’utilisateur. Exemple avec pyotp :

if totp.verify(user_input_code):
    print("Code valide !")
else:
    print("Code invalide.")

7. Défis et solutions

Désynchronisation horaire :

Problème :

Les horloges du serveur et de l’utilisateur peuvent ne pas être synchronisées.

Solution :

Tolérance de temps (souvent ±1 intervalle de temps).

Partage de clé secrète :

  • Problème : Si la clé est compromise, la sécurité est brisée.

  • Solution : Stocker la clé dans un environnement sécurisé (HSM ou modules de gestion de secrets).

Préférer TOTP au SMS : le SMS est vulnérable au SIM swapping (l’attaquant fait transférer votre numéro sur sa carte SIM).

8. Sécurité et bonnes pratiques

Protéger la clé secrète :

  • Ne jamais stocker la clé en texte clair.

  • Utiliser des solutions de gestion de secrets.

Configurer des sauvegardes :

  • Permettre à l’utilisateur de récupérer l’accès en cas de perte de l’appareil.

Combiner avec d’autres facteurs :

  • Assurez-vous que le TOTP est utilisé comme un facteur additionnel (2FA), pas comme la seule méthode d’authentification.

9. Alternatives et outils

HOTP (HMAC-based OTP) :

Basé sur un compteur incrémental.

YubiKey :

Générateur physique de codes TOTP.

Applications populaires :

Google Authenticator, Authy, FreeOTP.

10. Commandes utiles et exemples

Générer un code TOTP (Python) :

import pyotp
totp = pyotp.TOTP("JBSWY3DPEHPK3PXP")
print(totp.now())

11. Ressources complémentaires

  • RFC 6238 - TOTP

  • Bibliothèque PyOTP pour Python

Conclusion

TOTP est le standard de fait pour la MFA grand public et entreprise — simple, sûr, gratuit, partout disponible.

Pour une sécurité encore supérieure : FIDO2 / WebAuthn avec clé matérielle (YubiKey, Titan Key).