L'authentification multifacteur (MFA) est un mécanisme essentiel de cybersécurité qui consiste à vérifier l'identité d'un utilisateur à l'aide d'au moins deux facteurs d'authentification appartenant à des catégories différentes. Elle renforce la sécurité des comptes, des applications et des infrastructures en réduisant les risques associés à la compromission d'un seul facteur, notamment un mot de passe.
1. À propos de l'authentification multifacteur (MFA)
L'authentification multifacteur, appelée Multi-Factor Authentication en anglais et abrégée MFA, désigne une méthode d'authentification reposant sur la combinaison de plusieurs catégories de preuves permettant de vérifier une identité.
Dans une authentification classique, l'utilisateur fournit généralement un identifiant et un mot de passe. Cependant, si le mot de passe est compromis, un attaquant peut tenter d'accéder au compte.
La MFA ajoute une ou plusieurs vérifications indépendantes afin de rendre cette compromission plus difficile.
Exemple simple
Supposons qu'un utilisateur souhaite accéder à son compte bancaire. Le système lui demande :
- Son mot de passe, correspondant à un facteur de connaissance.
- Une confirmation sur une application d'authentification liée à son appareil, correspondant à un facteur de possession lorsque le dispositif prouve effectivement cette possession.
La connexion n'est acceptée que lorsque les vérifications requises sont réussies.
Différence entre MFA et 2FA
La 2FA, pour Two-Factor Authentication, constitue un cas particulier de MFA utilisant exactement deux facteurs de catégories différentes.
La MFA peut utiliser deux facteurs ou davantage.
| Mécanisme | Principe | Exemple |
|---|---|---|
| Authentification simple | Un seul facteur. | Mot de passe. |
| 2FA | Deux facteurs distincts. | Mot de passe et clé de sécurité. |
| MFA | Au moins deux facteurs distincts. | Mot de passe et authentificateur matériel. |
Pourquoi utiliser la MFA ?
La MFA contribue notamment à :
- Réduire les risques d'accès non autorisé après le vol d'un mot de passe.
- Renforcer la protection des comptes administrateurs et des services sensibles.
- Limiter les conséquences de certaines attaques de phishing et de réutilisation d'identifiants.
- Protéger les accès distants aux applications et aux infrastructures.
- Renforcer la confiance dans les opérations nécessitant une vérification supplémentaire.
La MFA ne garantit toutefois pas une protection absolue. Son efficacité dépend des facteurs utilisés, de leur indépendance et de la sécurité de leur implémentation.
2. Les différents facteurs d'authentification
Les facteurs d'authentification sont généralement classés en trois grandes catégories : connaissance, possession et inhérence.
Facteur de connaissance
Ce facteur correspond à quelque chose que l'utilisateur connaît.
- Un mot de passe.
- Un code PIN mémorisé.
- Un autre secret personnel.
Un facteur de connaissance peut être compromis par le phishing, la divulgation accidentelle ou certaines attaques contre les mots de passe.
Facteur de possession
Ce facteur correspond à quelque chose que l'utilisateur possède.
- Une clé de sécurité matérielle.
- Une carte à puce.
- Un appareil contenant un authentificateur cryptographique.
- Une application TOTP correctement configurée sur un appareil.
La possession doit être vérifiée par un mécanisme approprié. La simple connaissance du numéro de téléphone d'un utilisateur ne constitue pas une preuve de possession.
Facteur d'inhérence
Ce facteur correspond à une caractéristique biométrique de la personne.
- Empreinte digitale.
- Reconnaissance faciale.
- Reconnaissance de l'iris.
La biométrie doit être utilisée avec des protections adaptées contre les présentations frauduleuses et les compromissions de données biométriques.
Deux preuves ne signifient pas nécessairement deux facteurs
Deux mots de passe différents appartiennent à la même catégorie de connaissance. Leur combinaison ne constitue donc pas une véritable authentification multifacteur.
En revanche, un mot de passe associé à une clé de sécurité matérielle combine un facteur de connaissance et un facteur de possession.
Les facteurs contextuels
Certains systèmes prennent également en compte des éléments comme la localisation approximative, l'adresse IP, l'horaire ou les caractéristiques d'un appareil.
Ces informations constituent généralement des signaux de risque utilisés pour l'authentification adaptative, plutôt que des facteurs d'authentification indépendants au même titre que les trois catégories précédentes.
3. Fonctionnement et principales méthodes MFA
Un système MFA doit vérifier plusieurs preuves avant de considérer une session comme suffisamment authentifiée.
Déroulement d'une authentification MFA
- L'utilisateur déclare son identité.
- Le système vérifie le premier facteur.
- Le système demande une preuve supplémentaire appartenant à une autre catégorie.
- Le second facteur est vérifié.
- Le système accepte ou refuse l'authentification.
- En cas de succès, une session sécurisée peut être établie.
Codes temporaires TOTP
Le TOTP, pour Time-Based One-Time Password, est une méthode produisant des codes temporaires à partir d'un secret partagé et du temps.
Les applications d'authentification peuvent générer ces codes même sans connexion Internet, à condition que le secret ait été préalablement enregistré et que l'horloge soit suffisamment synchronisée.
Les codes TOTP doivent être vérifiés côté serveur avec une fenêtre temporelle adaptée et des protections contre les tentatives répétées et la réutilisation.
Codes reçus par SMS
Un service peut envoyer un code à usage unique par SMS afin de vérifier l'accès au numéro de téléphone associé au compte.
Cette méthode présente des limites, notamment les risques de SIM Swapping, d'interception et de phishing.
Elle doit donc être considérée comme moins résistante que certaines solutions cryptographiques modernes.
Notifications Push
Une application peut envoyer une demande d'approbation sur un appareil enregistré.
Les systèmes doivent éviter les validations aveugles et prévoir des mécanismes limitant les attaques par multiplication des notifications.
Clés de sécurité FIDO2
Les clés compatibles avec FIDO2 utilisent la cryptographie asymétrique pour authentifier l'utilisateur auprès d'un service.
Les mécanismes WebAuthn associent les preuves cryptographiques à l'origine du service, ce qui offre une résistance importante aux attaques de phishing classiques.
Passkeys
Les passkeys reposent sur des clés cryptographiques et peuvent être utilisées pour une authentification sans mot de passe.
Une passkey peut être protégée localement par un code PIN ou une vérification biométrique.
Selon son implémentation et les propriétés de l'authentificateur, elle peut répondre à des exigences d'authentification multifacteur sans nécessiter la saisie de deux codes distincts.
Authentification adaptative
L'authentification adaptative ajuste les contrôles selon le niveau de risque.
Par exemple, une connexion depuis un nouvel appareil ou une opération particulièrement sensible peut entraîner une demande de vérification supplémentaire.
Comparaison des méthodes
| Méthode | Principe | Limite principale |
|---|---|---|
| SMS OTP | Code envoyé au téléphone. | SIM Swapping et phishing. |
| TOTP | Code temporaire généré localement. | Code pouvant être divulgué par phishing. |
| Push | Validation sur un appareil. | Approbation frauduleuse ou MFA Fatigue. |
| FIDO2 | Preuve cryptographique liée au service. | Compatibilité et gestion des authentificateurs. |
| Passkey | Authentification à clé publique. | Gestion des appareils et récupération du compte. |
4. Avantages, limites et menaces contre la MFA
L'authentification multifacteur améliore la sécurité, mais elle doit être correctement conçue et accompagnée de procédures adaptées.
Protection contre les mots de passe compromis
Si un mot de passe est divulgué, un attaquant doit encore satisfaire les autres vérifications requises pour accéder au compte.
Protection des comptes sensibles
La MFA est particulièrement importante pour les comptes administrateurs, les accès distants, les messageries professionnelles et les applications contenant des informations confidentielles.
Phishing des codes OTP
Un attaquant peut tenter de tromper un utilisateur pour obtenir son mot de passe et son code temporaire.
Les méthodes fondées sur des codes saisis manuellement ne sont donc pas nécessairement résistantes au phishing.
MFA Fatigue
Une attaque MFA Fatigue consiste à provoquer de nombreuses demandes de validation afin d'inciter l'utilisateur à approuver une connexion frauduleuse.
SIM Swapping
Le SIM Swapping consiste à prendre frauduleusement le contrôle d'un numéro de téléphone, ce qui peut compromettre les mécanismes reposant sur les SMS.
Vol de session
Une MFA réussie ne protège pas automatiquement contre toutes les formes de vol de session. Un jeton de session compromis peut parfois être utilisé sans répéter immédiatement les vérifications initiales.
Compromission d'un appareil
Si l'appareil hébergeant un authentificateur est compromis, certaines garanties de sécurité peuvent être affaiblies.
Récupération de compte
Les procédures de récupération constituent un élément critique. Un mécanisme de secours insuffisamment protégé peut permettre de contourner la MFA.
Perte de l'authentificateur
La perte d'un téléphone ou d'une clé de sécurité peut empêcher temporairement l'accès à un compte si aucune méthode de récupération sûre n'a été prévue.
Limites de la MFA
La MFA ne corrige pas les vulnérabilités des applications, les défauts d'autorisation, les mauvaises configurations ou les compromissions de systèmes déjà authentifiés.
Elle doit donc être intégrée dans une stratégie de défense en profondeur.
5. Implémentation et simulation de la MFA avec Python
Python permet d'illustrer les différentes étapes de l'authentification multifacteur. Les premiers exemples sont des simulations pédagogiques. Les derniers présentent des mécanismes cryptographiques réels, mais ne constituent pas à eux seuls une application d'authentification prête pour la production.
Exemple 1 : simulation d'une authentification à deux facteurs
Le programme suivant vérifie successivement un mot de passe et un code complémentaire. Les valeurs sont fixes uniquement pour faciliter la démonstration. Il ne s'agit pas d'une implémentation MFA sécurisée.
1 2 3 4 5 6 7 8 9 10 11 12 13 | mot_de_passe_attendu = "Secret2026!" code_attendu = "482913" mot_de_passe_saisi = "Secret2026!" code_saisi = "482913" if mot_de_passe_saisi == mot_de_passe_attendu: print("Premier facteur accepté") if code_saisi == code_attendu: print("Deuxième contrôle accepté") print("Authentification réussie") else: print("Code complémentaire incorrect") else: print("Mot de passe incorrect") |
Output :
1 2 3 | Premier facteur accepté Deuxième contrôle accepté Authentification réussie |
Exemple 2 : simuler une politique MFA
Le programme suivant utilise un dictionnaire Python pour représenter les résultats de plusieurs vérifications. L'accès est accordé uniquement lorsque les facteurs de connaissance et de possession sont validés.
1 2 3 4 5 6 7 8 9 10 | facteurs = { "connaissance": True, "possession": True } if facteurs["connaissance"] and facteurs["possession"]: print("MFA validée") print("Accès autorisé") else: print("MFA incomplète") print("Accès refusé") |
Output :
1 2 | MFA validée Accès autorisé |
Exemple 3 : générer un code temporaire TOTP avec Python
Le programme suivant implémente le principe du TOTP à l'aide des modules standards hmac, hashlib, struct et base64. Il utilise un secret fictif et un instant fixe afin d'obtenir une sortie reproductible.
Le code utilise un intervalle de 30 secondes et l'algorithme HMAC-SHA1, conformément au profil TOTP classique. HMAC-SHA1 reste défini pour cet usage, même si SHA-1 ne doit pas être utilisé pour des signatures numériques modernes.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | import base64 import hashlib import hmac import struct secret_base32 = "GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ" secret = base64.b32decode(secret_base32) instant = 59 compteur = instant // 30 message = struct.pack(">Q", compteur) empreinte = hmac.new(secret, message, hashlib.sha1).digest() position = empreinte[-1] & 15 valeur = struct.unpack( ">I", empreinte[position:position + 4] )[0] & 0x7fffffff code = valeur % 1000000 print("Code TOTP :", str(code).zfill(6)) |
Output :
1 | Code TOTP : 287082 |
Ce résultat correspond à un vecteur de test connu, adapté à six chiffres. Dans une application réelle, le secret doit être généré aléatoirement, protégé, associé à un utilisateur et utilisé avec une vérification côté serveur.
Exemple 4 : vérifier un code TOTP
Le programme suivant vérifie un code TOTP en recalculant la valeur attendue pour un instant fixe. Il utilise hmac.compare_digest() afin de comparer les codes sous forme de chaînes. Pour simplifier l'exemple, il ne gère qu'un seul intervalle temporel.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | import base64 import hashlib import hmac import struct secret = base64.b32decode("GEZDGNBVGY3TQOJQGEZDGNBVGY3TQOJQ") code_saisi = "287082" instant = 59 compteur = instant // 30 message = struct.pack(">Q", compteur) empreinte = hmac.new(secret, message, hashlib.sha1).digest() position = empreinte[-1] & 15 valeur = struct.unpack( ">I", empreinte[position:position + 4] )[0] & 0x7fffffff code_attendu = str(valeur % 1000000).zfill(6) if hmac.compare_digest(code_saisi, code_attendu): print("Code TOTP valide") else: print("Code TOTP invalide") |
Output :
1 | Code TOTP valide |
Un vérificateur TOTP de production doit notamment gérer la synchronisation temporelle, les limites de tentatives et la prévention de la réutilisation d'un code déjà accepté.
Exemple 5 : générer des codes de récupération
Le programme suivant utilise le module secrets pour générer des codes de récupération aléatoires. Ces codes peuvent servir de mécanisme de secours lorsqu'un utilisateur perd son authentificateur principal.
Pour produire une sortie reproductible, le programme affiche uniquement le nombre de codes générés et vérifie qu'ils sont distincts.
1 2 3 4 | import secrets codes = [secrets.token_hex(8) for i in range(5)] print("Nombre de codes :", len(codes)) print("Codes distincts :", len(set(codes)) == 5) |
Output :
1 2 | Nombre de codes : 5 Codes distincts : True |
Les codes de récupération doivent être protégés, conservés de manière sécurisée et invalidés après utilisation. Leur stockage côté serveur doit éviter la conservation en clair lorsque cela est possible.
Exemple 6 : authentification adaptative selon le niveau de risque
Le programme suivant simule une politique d'authentification adaptative. Lorsqu'une connexion est considérée comme présentant un risque élevé, une vérification MFA supplémentaire est demandée.
1 2 3 4 5 6 7 8 9 10 11 12 | nouvel_appareil = True connexion_inhabituelle = True score_risque = 0 if nouvel_appareil: score_risque += 40 if connexion_inhabituelle: score_risque += 50 print("Score de risque :", score_risque) if score_risque >= 70: print("Vérification MFA supplémentaire requise") else: print("Politique MFA habituelle appliquée") |
Output :
1 2 | Score de risque : 90 Vérification MFA supplémentaire requise |
Le score et les seuils utilisés sont purement pédagogiques. Une politique réelle doit être fondée sur une analyse des risques et éviter les décisions injustifiées.
Exemple 7 : surveiller les échecs MFA
Le programme suivant analyse des événements fictifs de validation MFA et produit une alerte lorsqu'un utilisateur accumule plusieurs refus. Il illustre une règle simple de surveillance pouvant contribuer à identifier des tentatives répétées ou une éventuelle attaque de type MFA Fatigue.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | evenements = [ ("alice", "refus"), ("bob", "accepte"), ("alice", "refus"), ("alice", "refus"), ("alice", "refus") ] refus = {} for utilisateur, resultat in evenements: if resultat == "refus": refus[utilisateur] = refus.get(utilisateur, 0) + 1 for utilisateur, nombre in refus.items(): if nombre >= 3: print("Alerte MFA :", utilisateur) print("Nombre de refus :", nombre) |
Output :
1 2 | Alerte MFA : alice Nombre de refus : 4 |
Plusieurs refus MFA ne constituent pas automatiquement une attaque. Les événements doivent être examinés en tenant compte du contexte, des horaires et des autres indicateurs de sécurité.
6. Bonnes pratiques pour sécuriser la MFA
Une authentification multifacteur efficace nécessite une configuration adaptée et une gestion rigoureuse des authentificateurs, des sessions et des procédures de récupération.
Privilégier les méthodes résistantes au phishing
Les mécanismes FIDO2, WebAuthn et les passkeys correctement déployées offrent une résistance importante aux attaques de phishing classiques.
Activer la MFA sur les comptes sensibles
Les comptes administrateurs, les accès distants, les messageries professionnelles et les services contenant des données confidentielles doivent bénéficier d'une protection renforcée.
Protéger les secrets TOTP
Les secrets utilisés pour générer les codes TOTP doivent être produits de manière cryptographiquement sûre, stockés de façon protégée et accessibles uniquement aux composants autorisés.
Limiter les tentatives de validation
Les systèmes doivent limiter les tentatives répétées de saisie des codes afin de réduire les risques d'essais automatisés.
Empêcher la réutilisation des codes
Les codes temporaires acceptés doivent être gérés de manière à empêcher leur réutilisation dans les situations où le protocole exige un usage unique.
Protéger les notifications Push
Les systèmes utilisant des notifications Push doivent limiter les sollicitations répétées et présenter suffisamment d'informations pour permettre à l'utilisateur de reconnaître une demande légitime.
Prévoir plusieurs authentificateurs
Lorsque cela est possible, l'utilisateur peut enregistrer plusieurs authentificateurs sécurisés afin de réduire le risque de perte d'accès.
Sécuriser les procédures de récupération
Les procédures de récupération doivent être protégées contre l'usurpation d'identité et ne doivent pas constituer un moyen facile de contourner la MFA.
Protéger les sessions authentifiées
La MFA doit être accompagnée d'une gestion sécurisée des sessions, notamment des cookies, des jetons, des expirations et des déconnexions.
Demander une nouvelle vérification pour les opérations sensibles
Certaines actions, comme la modification des facteurs MFA ou le changement de paramètres de sécurité, peuvent nécessiter une réauthentification.
Journaliser les événements importants
Les événements liés à l'activation, à la désactivation, aux refus et aux changements d'authentificateurs doivent être surveillés sans exposer les secrets.
Sensibiliser les utilisateurs
Les utilisateurs doivent apprendre à ne jamais communiquer leurs codes temporaires et à refuser toute demande de validation qu'ils n'ont pas initiée.
Utiliser les mécanismes des frameworks
Pour les applications développées avec Django, Flask ou d'autres frameworks, il est préférable d'utiliser des bibliothèques et des solutions d'authentification reconnues, régulièrement maintenues et correctement configurées.
La création d'un système MFA complet nécessite une attention particulière à la sécurité des secrets, à la gestion des sessions, aux procédures de récupération et aux contrôles d'accès.
Défense en profondeur
La MFA doit être associée à une stratégie de défense en profondeur comprenant les mises à jour, le contrôle d'accès, la surveillance, le chiffrement et les procédures de réponse à incident.
7. À retenir
L'authentification multifacteur (MFA) est une méthode de vérification de l'identité reposant sur au moins deux facteurs appartenant à des catégories différentes.
Les trois principales catégories sont la connaissance, la possession et l'inhérence biométrique.
La 2FA est un cas particulier de MFA utilisant exactement deux facteurs distincts.
Les principales méthodes comprennent les codes TOTP, les codes SMS, les notifications Push, les clés de sécurité FIDO2 et les passkeys.
La MFA réduit les risques liés au vol ou à la réutilisation des mots de passe, mais ne protège pas automatiquement contre toutes les formes de phishing, les compromissions d'appareils ou les vols de session.
Les mécanismes FIDO2/WebAuthn sont particulièrement importants pour mettre en place une authentification résistante au phishing.
Python permet d'illustrer la MFA, de générer et vérifier des codes TOTP, de produire des codes de récupération et d'analyser des événements d'authentification.
La sécurité d'un système MFA dépend également de la protection des secrets, de la limitation des tentatives, de la gestion des sessions et des procédures de récupération.
Enfin, la MFA constitue une composante essentielle d'une stratégie de défense en profondeur visant à protéger les utilisateurs, les applications et les infrastructures informatiques.
Auteur : Younes Derfoufi
Lieu de travail : CRMEF OUJDA
Site Web : www.tresfacile.net
Chaine YouTube : https://www.youtube.com/user/InformatiquesFacile
Me contacter : https://www.tresfacile.net/me-contacter/



