🔑 Politique de mots de passe et MFA

Bloc 3 Module 3.2 BTS SIO SISR
FormationBTS SIO option SISR — IRIS Mediaschool
BlocB3 — Cybersécurité des services informatiques
ModuleM3.2 — Identité numérique et authentification
Durée3,5 heures
PrérequisC3.2.1 — Gestion des identités et des comptes

🎯 Objectifs

  • Définir et implémenter une politique de mots de passe robuste
  • Comprendre le stockage sécurisé des mots de passe (hachage, salage)
  • Connaître les attaques sur les mots de passe (force brute, dictionnaire, credential stuffing)
  • Déployer l'authentification multi-facteurs (MFA) : TOTP, FIDO2, SMS
  • Configurer la MFA via Active Directory et Azure AD
  • Comprendre l'évolution vers le passwordless

📖 Politique de mots de passe

Recommandations actuelles (ANSSI / NIST)

Les recommandations ont évolué. L'ANSSI et le NIST (SP 800-63B) ont révisé leurs préconisations :

CritèreAncienne pratiqueRecommandation actuelle
Longueur minimale8 caractères12 caractères minimum (idéalement 16+)
ComplexitéMaj + min + chiffre + spécial obligatoiresLongueur privilégiée sur complexité arbitraire
RenouvellementChangement tous les 90 joursPas de renouvellement périodique sauf suspicion de compromission
PassphrasesNon encouragéesTrès recommandées (ex : "MonChienMangeDes3Pommes!")
Gestionnaire de mots de passeMéfianceFortement recommandé
Vérification contre listes compromisesRareÀ implémenter (ex : API HaveIBeenPwned)
💡 Pourquoi abandonner le renouvellement périodique ?

Les études montrent que forcer le changement régulier du mot de passe conduit les utilisateurs à adopter des patterns prévisibles (ex : "Janvier2024!" → "Fevrier2024!"). Le NIST recommande désormais de ne changer le mot de passe qu'en cas de suspicion de compromission, et de compenser avec la MFA.

Configuration de la politique de mots de passe Active Directory

# GPO — Politique de mot de passe de domaine
# Chemin : Configuration ordinateur > Paramètres Windows > Paramètres de sécurité
#          > Stratégies de compte > Stratégie de mot de passe

# Via PowerShell (Fine-Grained Password Policy — FGPP)
# Créer une politique renforcée pour les admins
New-ADFineGrainedPasswordPolicy `
  -Name "PSO_Admins" `
  -Precedence 10 `
  -MinPasswordLength 16 `
  -PasswordHistoryCount 24 `
  -ComplexityEnabled $true `
  -ReversibleEncryptionEnabled $false `
  -MaxPasswordAge "180.00:00:00" `
  -LockoutThreshold 5 `
  -LockoutDuration "00:30:00" `
  -LockoutObservationWindow "00:30:00"

# Appliquer à un groupe
Add-ADFineGrainedPasswordPolicySubject -Identity "PSO_Admins" -Subjects "GRP_Admins"

📖 Stockage sécurisé des mots de passe

Hachage et salage

Les mots de passe ne doivent jamais être stockés en clair. Le stockage correct utilise :

  • Hachage cryptographique : transformation unidirectionnelle (bcrypt, Argon2, scrypt)
  • Salage : ajout d'une valeur aléatoire unique à chaque mot de passe avant hachage, pour empêcher les attaques par rainbow tables
# Python — Hachage sécurisé avec bcrypt
import bcrypt

# Hachage lors de la création du compte
password = "MonMotDePasse2026!".encode('utf-8')
salt = bcrypt.gensalt(rounds=12)  # Facteur de coût : 12 (recommandé)
hashed = bcrypt.hashpw(password, salt)
# Stocker 'hashed' en base, jamais le mot de passe en clair

# Vérification lors de la connexion
def verify_password(plain_password, hashed_password):
    return bcrypt.checkpw(plain_password.encode('utf-8'), hashed_password)

# Algorithmes recommandés (2026) : bcrypt, Argon2id, scrypt
# Algorithmes à éviter : MD5, SHA-1, SHA-256 seul (trop rapides)

Attaques sur les mots de passe

AttaqueDescriptionContre-mesure
Force bruteTest exhaustif de toutes les combinaisonsLongueur, verrouillage de compte, MFA
DictionnaireTest de mots communs et variantesVérification contre listes connues, complexité
Rainbow tablesTables précalculées de hashSalage unique par mot de passe
Credential stuffingRéutilisation de couples login/mdp issus de fuitesMFA, pas de réutilisation, surveillance des connexions
PhishingVol du mot de passe par tromperieMFA résistant au phishing (FIDO2), sensibilisation
Pass-the-HashRéutilisation du hash Windows sans connaître le clairCredential Guard, LAPS, segmentation réseau

📖 Authentification Multi-Facteurs (MFA)

Les trois facteurs d'authentification

  • Ce que je sais : mot de passe, code PIN
  • Ce que je possède : token physique, smartphone, carte à puce
  • Ce que je suis : empreinte digitale, reconnaissance faciale, iris

La MFA combine au moins deux facteurs différents. Elle réduit drastiquement le risque de compromission : selon Microsoft, la MFA bloque 99,9% des attaques de prise de contrôle de compte.

TOTP — Time-based One-Time Password

Le TOTP (RFC 6238) génère un code à 6 chiffres qui change toutes les 30 secondes, basé sur un secret partagé et l'heure courante. Implémentations : Google Authenticator, Microsoft Authenticator, Authy.

# Python — Génération TOTP (bibliothèque pyotp)
import pyotp
import qrcode

# Générer un secret (à stocker côté serveur)
secret = pyotp.random_base32()
print(f"Secret: {secret}")

# Créer le TOTP
totp = pyotp.TOTP(secret)

# Vérifier un code saisi par l'utilisateur
user_code = "123456"  # code saisi
if totp.verify(user_code):
    print("Code valide !")
else:
    print("Code invalide ou expiré")

# Générer l'URI pour QR Code (compatible Authenticator)
uri = totp.provisioning_uri("jdupont@iris.local", issuer_name="IRIS")
img = qrcode.make(uri)
img.save("totp_qrcode.png")

FIDO2 / WebAuthn — Authentification sans mot de passe

FIDO2 est un standard d'authentification forte basé sur la cryptographie asymétrique. La clé privée reste sur l'appareil de l'utilisateur (token USB, smartphone), jamais envoyée sur le réseau. Avantages :

  • Résistant au phishing : le challenge est lié au domaine exact, impossible à intercepter sur un faux site
  • Pas de secret partagé côté serveur : seule la clé publique est stockée
  • Supports : YubiKey, Google Titan Key, Apple Touch/Face ID, Windows Hello

Déploiement MFA avec Azure AD (Entra ID)

# Azure AD — Activer la MFA via Conditional Access (PowerShell)
# Prérequis : module Microsoft.Graph

Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess"

# Créer une politique d'accès conditionnel forçant la MFA
$params = @{
    displayName = "Require MFA for All Users"
    state = "enabled"
    conditions = @{
        users = @{ includeUsers = @("All") }
        applications = @{ includeApplications = @("All") }
    }
    grantControls = @{
        operator = "OR"
        builtInControls = @("mfa")
    }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

📖 Vers le Passwordless

Le passwordless (authentification sans mot de passe) est l'évolution naturelle de la MFA. Les solutions incluent :

  • Windows Hello for Business : PIN + biométrie, basé sur FIDO2
  • Microsoft Authenticator (Passwordless) : notification push + biométrie
  • Passkeys (FIDO2/WebAuthn) : synchronisation entre appareils via le cloud du fournisseur (Apple, Google, Microsoft)

🛠️ Outils / Ressources

  • HaveIBeenPwned : vérification des mots de passe compromis
  • KeePass, Bitwarden, 1Password : gestionnaires de mots de passe
  • Google Authenticator, Microsoft Authenticator : apps TOTP
  • YubiKey : token physique FIDO2/U2F
  • NIST SP 800-63B : guide de référence des politiques d'authentification
  • Recommandations ANSSI sur les mots de passe

📝 QCM — Testez vos connaissances

  1. Pourquoi le renouvellement périodique des mots de passe n'est-il plus recommandé par le NIST ?
  2. Qu'est-ce que le salage (salting) d'un mot de passe et pourquoi est-il important ?
  3. Quels sont les trois facteurs d'authentification ?
  4. En quoi FIDO2 est-il plus résistant au phishing que le TOTP ?
  5. Qu'est-ce qu'une attaque par credential stuffing ?
  6. Quel algorithme de hachage est recommandé pour stocker des mots de passe en 2026 ?
📝 Afficher les corrections
  1. Car les utilisateurs adoptent des patterns prévisibles (variations du même mot de passe, ajout d'un chiffre incrémental), rendant la rotation contreproductive. Mieux vaut un mot de passe long + MFA.
  2. Le salage ajoute une valeur aléatoire unique à chaque mot de passe avant le hachage, rendant les attaques par rainbow tables inopérantes : même deux utilisateurs avec le même mot de passe auront des hashs différents.
  3. Ce que je sais (mot de passe, PIN), ce que je possède (token, smartphone), ce que je suis (biométrie — empreinte, visage).
  4. FIDO2 lie le challenge cryptographique au domaine exact du site : un attaquant interceptant la communication ne peut pas rejouer l'authentification sur un autre site. Le TOTP, lui, peut être transmis sur un faux site.
  5. Réutilisation de couples identifiant/mot de passe issus d'une fuite de données sur d'autres services. Fonctionne car de nombreux utilisateurs réutilisent les mêmes mots de passe.
  6. Argon2id (vainqueur du Password Hashing Competition) ou bcrypt avec facteur de coût ≥ 12. À éviter : MD5, SHA-1, SHA-256 seul (trop rapides à calculer).
← Cours précédent Cours suivant →