Call-Informatique
Call-Informatique
Le média tech
 2FA avancé : TOTP, FIDO2, clés de secours — Guide complet
CybersécuritéGuides9 min de lecture

2FA avancé : TOTP, FIDO2, clés de secours — Guide complet

Implémentation complète du 2FA sur Google, GitHub et Discord. TOTP vs FIDO2, backup chiffré, révocation, CLI GitHub et politiques d'équipe.

2FA avancé : TOTP, FIDO2, clés de secours

Ce guide couvre l'implémentation complète de l'authentification à deux facteurs sur les trois plateformes les plus critiques en environnement de développement et de production. On va au-delà du simple scan de QR code : gestion des seeds TOTP, rotation des clés, politiques GitHub pour les organisations, et intégration des passkeys FIDO2.

Choix de la méthode 2FA

Il existe plusieurs mécanismes de second facteur, avec des compromis très différents :

| Méthode | Résistance au phishing | Récupération | Complexité |

|—-|—-|—-|—-|

| SMS | Faible (SIM swap) | Facile | Aucune |

| TOTP (app) | Moyenne | Moyenne (backup chiffré) | Faible |

| FIDO2/WebAuthn | Très haute | Difficile sans backup | Moyenne |

| Passkey | Très haute | Via plateforme | Faible |

Recommandation 2026 : FIDO2 en primary sur les services qui le supportent (GitHub, Google), TOTP en fallback obligatoire. Ne jamais utiliser SMS seul.

—-

Outillage recommandé

Applications TOTP

Aegis Authenticator (Android) est la référence open-source :

Raivo OTP (iOS) : alternative sérieuse, synchro iCloud optionnelle.

Itsme / Bitwarden Authenticator : si tu gères déjà Bitwarden, son module TOTP intégré (offre Premium) centralise tout.

Clés physiques FIDO2

YubiKey 5 Series (NFC recommandé) ou OnlyKey pour les environnements haute sécurité. Google Titan Key comme alternative. Budget : 50 à 80 €.

—-

Google : activation TOTP + passkey

Activer TOTP via l'interface

  1. Connecte-toi à myaccount.google.com/security
  2. Section Validation en deux étapes > Commencer
  3. Sélectionne Application d'authentification (ignore les propositions Google Prompt)
  4. Scanne le QR code avec Aegis ou extrait le secret en texte pour stockage manuel
  5. Valide avec un code TOTP généré

Extraire et stocker le seed TOTP manuellement

Lors de l'affichage du QR code, Google propose toujours un lien *"Je ne peux pas le scanner"* qui révèle la clé secrète en base32. Cette clé, c'est ce qu'Aegis stocke en interne. Tu peux la sauvegarder dans un coffre-fort comme KeePassXC directement dans le champ TOTP :

bash
## Générer un code TOTP depuis la ligne de commande avec oathtool
oathtool —base32 —totp "JBSWY3DPEHPK3PXP" 
## Remplace par ta vraie clé secrète base32

Installer oathtool :

bash
## Debian/Ubuntu
apt install oathtool

## macOS
brew install oath-toolkit

Codes de secours Google

Google génère 10 codes à usage unique. Les télécharger et les chiffrer immédiatement :

bash
## Chiffrer les codes de secours avec GPG
gpg —symmetric —cipher-algo AES256 google-backup-codes.txt
## Entrer une passphrase forte - le fichier chiffré porte l'extension .gpg
rm google-backup-codes.txt
## Stocker google-backup-codes.txt.gpg sur ton NAS ou coffre-fort cloud

Ajouter une clé physique FIDO2 sur Google

  1. Retourne dans Validation en deux étapes
  2. Section Clés de sécurité > Ajouter une clé de sécurité
  3. Branche ta YubiKey en USB ou approche-la en NFC
  4. Suis les instructions et nomme la clé

Avec une clé FIDO2, même un site de phishing parfait échoue : la vérification est liée à l'origine cryptographique du domaine.

—-

GitHub : 2FA obligatoire + configuration organisation

Activer le 2FA sur un compte personnel

bash
## Via l'API GitHub pour vérifier le statut 2FA de ton compte
curl -H "Authorization: Bearer TON_TOKEN" \
     https://api.github.com/user \
  | jq '.two_factor_authentication'
## Retourne true ou false

Via l'interface :

  1. github.com/settings/security
  2. Enable two-factor authentication
  3. Choix : Authenticator app (TOTP) ou Security key (FIDO2)
  4. Pour TOTP : scanne le QR code ou copie la clé secrète base32
  5. Valide avec un code actif
  6. Télécharge les codes de secours (format texte, 16 codes)

GitHub CLI et tokens d'accès

Une fois le 2FA activé, les opérations Git via HTTPS requièrent un Personal Access Token, jamais le mot de passe du compte :

bash
## Authentification avec GitHub CLI
gh auth login
## Choisir GitHub.com > HTTPS > Yes authenticate with browser
## gh stocke le token dans le trousseau système

## Vérifier l'état d'authentification
gh auth status

## Pour les scripts CI/CD, créer un token fine-grained
## github.com/settings/personal-access-tokens/new
## Scope minimal : Contents (read) pour la plupart des besoins

Imposer le 2FA à toute une organisation GitHub

bash
## Via l'API GitHub - Activer la contrainte 2FA pour une org
curl -X PATCH \
  -H "Authorization: Bearer TOKEN_ADMIN" \
  -H "Accept: application/vnd.github+json" \
  https://api.github.com/orgs/NOM-ORG \
  -d '{"two_factor_requirement_enabled": true}'

Via l'interface : Organization Settings > Authentication security > Require two-factor authentication for everyone.

Attention : les membres sans 2FA sont immédiatement retirés de l'organisation. Prévoir une communication en amont et un délai de 48 h minimum.

Vérifier quels membres d'une org n'ont pas le 2FA

bash
curl -H "Authorization: Bearer TOKEN_ADMIN" \
  "https://api.github.com/orgs/NOM-ORG/members?filter=2fa_disabled" \
  | jq '.[].login'

—-

Discord : 2FA compte + serveur

Activer le 2FA sur son compte

  1. Paramètres utilisateur (icône engrenage) > Mon compte
  2. Mot de passe et authentification > Activer l'authentification à deux facteurs
  3. Confirme ton mot de passe Discord
  4. Scanne le QR code avec Aegis
  5. Saisis le code TOTP généré
  6. Télécharge les codes de secours Discord (8 codes)

Discord n'impose pas FIDO2 nativement en 2026. Le TOTP reste la méthode disponible.

Imposer le 2FA sur un serveur Discord (admin)

Via l'interface :

  1. Paramètres du serveur > Modération
  2. Niveau de sécurité > Haute : modérateurs doivent avoir le 2FA activé

Cela bloque les actions de modération (kick, ban, gestion des rôles) pour tout admin/mod sans 2FA actif.

Générer un token de bot Discord avec 2FA activé

Les bots ne sont pas concernés par le 2FA des comptes utilisateurs. En revanche, si ton compte développeur a le 2FA, la régénération de token nécessite de fournir un code TOTP :

bash
## Vérifier les permissions d'un bot via l'API Discord
curl -H "Authorization: Bot TON_BOT_TOKEN" \
  https://discord.com/api/v10/users/@me

—-

Backup et récupération : stratégie complète

Export Aegis chiffré automatique

Aegis permet de configurer un dossier de backup automatique :

  1. Paramètres Aegis > Sauvegardes > Activer les sauvegardes automatiques
  2. Choisir un dossier synchronisé (Syncthing, Nextcloud, etc.)
  3. Le fichier exporté est chiffré AES-256 avec ta passphrase maître

Structure du fichier d'export Aegis (pour référence) :

json
{
  "version": 1,
  "header": {
    "slots": [{"type": 1, "uuid": "...", "key_params": {...}}],
    "params": {"nonce": "...", "tag": "..."}
  },
  "db": "<contenu chiffré base64>"
}

Script de vérification des codes de secours

bash
#!/bin/bash
## verify-backup-codes.sh
## Vérifie que les fichiers de codes de secours sont bien présents et récents

BACKUP_DIR="/chemin/vers/backup"
MAX_AGE_DAYS=90

for service in google github discord; do
  FILE="$BACKUP_DIR/${service}-backup-codes.txt.gpg"
  if [ ! -f "$FILE" ]; then
    echo "MANQUANT : $FILE"
    continue
  fi
  
  AGE=$(( ( $(date +%s) - $(stat -c %Y "$FILE") ) / 86400 ))
  if [ "$AGE" -gt "$MAX_AGE_DAYS" ]; then
    echo "OBSOLETE ($AGE jours) : $FILE"
  else
    echo "OK ($AGE jours) : $FILE"
  fi
done
bash
chmod +x verify-backup-codes.sh
## Ajouter en cron mensuel
echo "0 9 1 * * /chemin/verify-backup-codes.sh" | crontab -

—-

Dépannage : erreurs courantes

Code TOTP refusé ("Code incorrect")

L'heure de ton téléphone n'est pas synchronisée. TOTP est basé sur l'horodatage Unix.

bash
## Vérifier l'heure système (Linux/macOS)
date
timedatectl status  # Linux avec systemd
## Forcer la synchro NTP
timedatectl set-ntp true  # Linux
sntp -sS time.apple.com   # macOS

Perdu l'accès à l'application TOTP sans codes de secours

  • Google : procédure de vérification d'identité (délai 3 à 5 jours)
  • GitHub : contacter le support avec preuves de propriété du compte
  • Discord : support Discord uniquement, délai variable

C'est la raison principale de toujours stocker les codes de secours chiffrés hors device.

GitHub : push rejeté après activation 2FA

Le mot de passe compte ne fonctionne plus pour Git HTTPS. Utiliser un PAT :

bash
## Configurer Git pour utiliser le trousseau système
git config —global credential.helper osxkeychain  # macOS
git config —global credential.helper libsecret     # Linux Gnome
## Au prochain push, saisir login + PAT (pas le mot de passe)

YubiKey non reconnue sous Linux

Problème de règles udev :

bash
## Installer les règles udev Yubico
wget https://raw.githubusercontent.com/Yubico/libu2f-host/master/70-u2f.rules \
  -O /etc/udev/rules.d/70-u2f.rules
udevadm control —reload-rules && udevadm trigger

—-

Hardening supplémentaire

Une fois le 2FA en place, compléter avec :

Sessions actives : audite régulièrement les sessions ouvertes sur Google (myaccount.google.com/device-activity), GitHub (github.com/settings/sessions) et Discord (Paramètres > Vie privée et sécurité > Appareils autorisés).

Alertes de connexion : active les notifications email sur chaque service pour toute nouvelle connexion depuis un appareil inconnu.

Rotation annuelle des codes de secours : régénère tes codes de secours une fois par an et mets à jour les fichiers chiffrés stockés.

Gestionnaire de mots de passe : KeePassXC supporte nativement les seeds TOTP (champ TOTP dans chaque entrée) et permet d'avoir une copie de sauvegarde locale chiffrée de tes seeds en plus d'Aegis.

bash
## Exemple d'entrée KeePassXC avec seed TOTP en CLI
keepassxc-cli add -g -u user@exemple.com —totp-secret JBSWY3DPEHPK3PXP MonBD.kdbx Google

L'activation du 2FA est une mesure de protection immédiate et concrète. Avec TOTP partout et FIDO2 sur Google et GitHub, ton exposition aux compromissions de compte passe de "probable" à "quasi nulle" pour les vecteurs d'attaque courants.

Sur le même sujet

À lire aussi

#tutoriel#guide-technique#2fa#totp#fido2#securite