Authentification à deux facteurs : TOTP, ce qui la contourne
11 min · Avancé · 7 août 2026
Un deuxième facteur, indépendant du mot de passe
Un mot de passe (chapitre 1) prouve « ce que tu connais ». Un 2FA basé sur TOTP ajoute « ce que tu possèdes » : un secret partagé une seule fois avec ton application d’authentification (généralement via un QR code), qui permet ensuite de générer un code à usage unique, hors ligne, sans aucune connexion réseau.
Comment un code TOTP se calcule réellement
TOTP combine deux éléments vus dans le cours sur la cryptographie : une fonction de hachage (via HMAC, une variante qui intègre une clé secrète) et une notion de temps découpé en tranches fixes.
import hmac, hashlib, struct, time, base64
def totp(secret_b32, temps=None, periode=30, chiffres=6):
cle = base64.b32decode(secret_b32.upper())
tranche = int((temps or time.time()) // periode)
message = struct.pack(">Q", tranche)
empreinte = hmac.new(cle, message, hashlib.sha1).digest()
decalage = empreinte[-1] & 0x0F
code_brut = struct.unpack(">I", empreinte[decalage:decalage + 4])[0] & 0x7fffffff
return str(code_brut % (10 ** chiffres)).zfill(chiffres)
# Secret partage une seule fois, au moment du scan du QR code
secret = "JBSWY3DPEHPK3PXP"
print("Code TOTP actuel :", totp(secret))
print("Code dans 30s (tranche suivante) :", totp(secret, temps=time.time() + 30))
print("Ce code change automatiquement toutes les 30 secondes, sans reseau.") Le secret ne change jamais : seule la tranche de temps utilisée dans le calcul évolue, ce qui suffit à produire un code totalement différent à chaque tranche, exactement comme l’effet avalanche du chapitre 2 du cours sur la cryptographie.
Ce qui contourne malgré tout un 2FA
Danger
La technique la plus efficace ne casse aucune mathématique : le phishing en temps réel présente une fausse page de connexion à la victime, récupère mot de passe et code TOTP au moment même où elle les saisit, et les relaie instantanément vers le vrai site avant l’expiration du code.
Trois autres angles fréquents :
- Absence de limitation de tentatives : un code à 6 chiffres ne représente qu’un million de possibilités, un nombre bien trop faible sans limitation stricte des essais.
- Codes de secours mal protégés : les codes de récupération fournis à l’activation du 2FA contournent totalement TOTP s’ils sont stockés sans précaution.
- Jeton « se souvenir de cet appareil » : un cookie de confiance qui dispense du 2FA pendant plusieurs jours redevient une cible aussi intéressante qu’un vol de session classique (chapitre 2) s’il est mal protégé.