4. Authentification đâïž
1. Les facteurs d'authentificationâïž
âą La connaissance JE CONNAIS
âą La possession JE POSSEDE
⹠Les caractéristiques biométriques JE SUIS

2. Authentification simple : le mot de passeâïž
đ facteur d'authentification : la connaissance
Source
- Contenu extrait du MOOC SecNumAcadĂ©mie de lâANSSI
- CNIL
2.1 A quoi sert un mot de passe ?âïž
âą AccĂšs Ă des services en ligne grĂące au contrĂŽle dâaccĂšs.
⹠Imputabilité, preuve de qui a fait quoi.
⹠Traçabilité des actions, historique des actions.
Exemple,
tĂ©lĂ©dĂ©claration de lâimpĂŽt : imputabilitĂ© = lien entre la dĂ©claration et la personne ET traçabilitĂ© = connaĂźtre lâheure et la date de la dĂ©claration.
2.2 Les risques d'un mot de passeâïž
âą Divulgation :
- Par nĂ©gligence : faiblesse dâune personne, support amovible, diffusion Ă un tiers.
- Par un service non sécurisé : protocoles https, imaps, pop3s, etc⊠à privilégier.
- Par lâutilisation dâun vecteur infectĂ©.
- Mot de passe enregistré sans protection.
âą Malveillance :
- Authentification sur un service illégitime.
- Attaque par ingénierie sociale, piÚge.
- Attaque par force brute ou divulgation dâune base de donnĂ©es mal sĂ©curisĂ©e.
âą Ces deux cas de figure peuvent entraĂźner :
- La compromission des messages personnels.
- La destruction de données.
- La publication de messages ou photos préjudiciables sur les réseaux sociaux par exemple.
- Des achats.
- Des virements bancaires.
2.3 Craquer un mot de passeâïž
- Par force brute
- Par dictionnaire, en gĂ©nĂ©ral avant lâattaque par force brute
- Par permutation en échangeant des caractÚres (exemple : E par 3 ou O par 0).
Mais un souci de temps ...

2.4 Comment construire un mot de passe fort ?âïž
Le mot de passe doit apporter un niveau de sĂ©curitĂ© suffisant, câest-Ă -dire difficile Ă dĂ©couvrir par un attaquant dans un temps raisonnable Ă lâaide dâoutils automatisĂ©s de recherche qui mettent en oeuvre les diffĂ©rentes techniques dâattaque. Il doit ĂȘtre composĂ© au minimum de 10 caractĂšres et ceux-ci doivent ĂȘtre de tout type.
Préconisations ANSI
Créez un mot de passe suffisamment long, complexe et inattendu : de 8 caractÚres minimum et contenant des minuscules, des majuscules, des chiffres et des caractÚres spéciaux. source
Quelques astuces :
- Grùce à une phrase de passe avec des mots concaténés.
- Par phonétique.
- Les premiĂšres lettres des mots dâune phrase, citation, chanson, etcâŠ
- Mixer les trois méthodes.
Coffre fort
AUjourd'hui, rien de mieux que l'utilisation d'un coffre électronique de mot de passe (keypass, bitwarden, Cosy pass, ...) et la génération aléatoire de mot de passe complexe et unique par usage.
Seule prĂ©caution đ„ : ne pas oublier le mot de passe du coffre fort ...
2.5 Les rainbows Tablesâïž
2.5.1 Ă quoi sert une Rainbow Table ?âïž
Une Rainbow Table est un fichier volumineux contenant une multitude de mots de passe reliés à leur valeur de hachage (empreinte).

Les cybercriminels sâen servent pour cracker des mots de passe. Les Rainbow Tables permettent gĂ©nĂ©ralement de rĂ©duire le temps et la mĂ©moire nĂ©cessaires Ă lâattaque, contrairement aux attaques par force brute qui requiĂšrent beaucoup de temps et aux attaques par dictionnaires qui nĂ©cessitent beaucoup de mĂ©moire.
Ă noter que les Rainbow Table peuvent Ă©galement ĂȘtre utilisĂ©es par des experts en cybersĂ©curitĂ© pour identifier des failles ou effectuer des tests de sĂ©curitĂ©.
2.5.2 Comment fonctionne une Rainbow Table ?âïž
Lors de la gĂ©nĂ©ration dâune Table arc-en-ciel, chaque mot de passe est hachĂ© (le procĂ©dĂ© peut ĂȘtre rĂ©pĂ©tĂ© plusieurs fois en fonction des cas).
Seul le mot de passe initial et la valeur finale sont conservĂ©s dans la Table. Ce processus est ensuite rĂ©pĂ©tĂ© Ă partir de nouveaux mots de passe, jusquâĂ obtenir une Table importante.
Pour cracker un mot de passe, le cybercriminel va chercher son empreinte dans la Table arc-en-ciel. Une fois trouvée, il peut donc récupérer le mot de passe initial de cette empreinte.
Activité : Génération et utilisation d'une rainbow Table

Etape 1 : génération d'une rainbow Table
Le projet Richelieu, créé par les développeurs Maxime Alay-Eddine et Paul Barbaste, établit une liste des mots de passe français les plus courants. Ceux-ci proviennent de fuites de données rendues publiques, filtrées sur les adresses e-mail en « .fr ».
Par simplication de performance, nous utiliserons un fichier réduit contenant les 1000 mots de passe français les plus utilisés ici.
construction de la rainbow Table
- Ouverture et lecture du fichier txt french_passwords_top1000.txt
- Création d'un dictionnaire clé-valeur, dont la clé est le mot de passe en clair et la valeur l'empreinte du mot de passe.
- Pour chaque ligne, on calcule l'empreinte MD5 du mot de passe.
- Ecriture d'un fichier CSV pour sauvegarder le dictionnaire
Correction
import hashlib
# Dictionnaire pour stocker les mots de passe générés et leurs hachages MD5
passwords = {}
#ouverture du fichier contenant les mots de passe
with open("./data/french_passwords_top1000.txt", "r") as file:
#pour chaque mot de passe, on créé un hachage MD5 et on stocke le mot de passe et son hachage dans le dictionnaire
for line in file:
password = line.strip()
password_hash = hashlib.md5(password.encode()).hexdigest()
passwords[password] = password_hash
#Sauvegarde des hachages dans un fichier
with open("./data/md5_passwords.csv", "w") as file:
for password, hash in passwords.items():
file.write(password + ';' +hash + "\n")
#fermeture du fichier
file.close()
Utilisation de la rainbow Table
Scénario : un utilisateur saisi un mot de passe dans un formulaire, qui est immédiatement chiffrer à l'aide l'algorithme MD5. Un hacker réussit grùce à une lecture de trame réseau à capter cette empreinte.
Activité supplémentaire :
Créer une fonction find_password qui prend en paramÚtre une rainbow Table sous forme de dictionnaire et une empreinte et qui retourne le mot de passe en clair ou "non trouvé" sinon.
- Ouverture et lecture du fichier csv contenant la rainbow Table
- Pour chaque ligne, comparaison de l'empreinte captée et de la valeur dans le dictionnaire.
- Si on trouve l'empreinte, retournez le mot de passe en clair, sinon retournez "Non trouvé"
Correction
def find_password(passwords, hash):
#On vérifie si le hachage est dans le dictionnaire
if hash in passwords.values():
#si le hachage est dans le dictionnaire, on affiche le mot de passe correspondant
for password, password_hash in passwords.items():
if password_hash == hash:
return (f"Le mot de passe associé au hachage {hash} est {password}")
#sinon on affiche que le mot de passe n'a pas été trouvé
return(f"Le mot de passe associé au hachage {hash} n'a pas été trouvé")
hash = hashlib.md5("secret".encode()).hexdigest() #5ebe2294ecd0e0f08eab7690d2a6ee69
find_password(hash)
Exemple pour : 5ebe2294ecd0e0f08eab7690d2a6ee69
'Le mot de passe associé au hachage 5ebe2294ecd0e0f08eab7690d2a6ee69 est secret'
2.6 Stockage d'un mot de passeâïž
La rĂšgle de "base" en hygiĂšne de codeur est de ne JAMAiS stockĂ© un mot de passe en clair, que ce soit dans un fichier ou pire dans une base de donnĂ©es. Un site ne doit jamais ĂȘtre en capacitĂ© de vous communiquer votre mot de passe initial !
Le seul moment oĂč un mot de passe est en clair est quand il est saisi dans le champ du formulaire.
Imaginons ... Si tous les sites avaient tous la mĂȘme mĂ©thode de chiffrement (MD5 ou SH256) et qu'un utilisateur utilisait le mĂȘme mot de passe sur tous ces sites ...
Il existe des fuites de données recensant le couple identifiant/mot de passe d'un grand nombre de personne !
Vous pouvez tester votre adresse mail sur le site ';--have i been pwned? pour savoir si celle ci appartient à une fuite de données connue.
Mise en exemple :
Alphonse (al@mail.com) utilise le mot de passe "secret" pour les sites monsite.fr et concurrent.fr
Chacun des deux sites utilise la mĂȘme mĂ©thode de chiffrement MD5.
Donc chacun des deux sites possĂšdent dans sa base le couple al@mail.com et 5ebe2294ecd0e0f08eab7690d2a6ee69.
monsite.fr subit une attaque et une fuite de données massive.
le pirate possĂšde donc le moyen de se connecter Ă concurrent.fr avec le compte d'alphonse...
C'est la que l'on introduit la notion de salage.
DĂ©finition : Le salage est un procĂ©dĂ© utilisĂ© en cryptographie pour renforcer la sĂ©curitĂ© des mots de passe stockĂ©s. Il consiste Ă ajouter une valeur alĂ©atoire unique (appelĂ©e "sel" ou "salt") Ă chaque mot de passe avant de le hacher. Cela rend plus difficile pour les attaquants d'utiliser des attaques par table arc-en-ciel ou par dictionnaire, car mĂȘme si deux utilisateurs ont le mĂȘme mot de passe, leurs hashs seront diffĂ©rents grĂące aux sels uniques.

| đ Python | |
|---|---|
1 2 3 4 5 6 7 8 9 10 11 | |
5ebe2294ecd0e0f08eab7690d2a6ee69
b'\xc3;K\xc2\xfb\xb4z\xca`f\xc4T\xc9I\x1b.'
3. L'authentification multi-facteur (MFA)đâïž
3.1 Introduction au MFAâïž
Lâauthentification multi-facteur (MFA) est une mĂ©thode de sĂ©curitĂ© qui exige lâutilisation dâau moins deux facteurs dâauthentification diffĂ©rents pour accĂ©der Ă un systĂšme ou une application. Elle permet de renforcer la sĂ©curitĂ© en rendant beaucoup plus difficile lâusurpation dâidentitĂ©.

Exempleâïž
- Authentification simple : identifiant + mot de passe.
- Authentification multi-facteur : identifiant + mot de passe et code à usage unique envoyé par SMS ou généré par une application mobile.
đ Objectif : limiter les risques en cas de vol ou de fuite de mot de passe.
Limites du mot de passe seulâïž
- Attaques par force brute (essais massifs de combinaisons).
- RĂ©utilisation dâun mĂȘme mot de passe sur plusieurs sites.
- Phishing (vol par fausse page de connexion).
Le MFA répond à ces problÚmes en ajoutant une seconde barriÚre.
3.2 Les principaux mĂ©canismes MFAâïž
Les dĂ©veloppeurs disposent de plusieurs solutions pour mettre en Ćuvre lâauthentification multi-facteur.
a) OTP (One-Time Password)âïž
- TOTP (Time-based One-Time Password) : mot de passe temporaire, généré toutes les 30 secondes (ex. Google Authenticator, Authy, FreeOTP).
- HOTP (HMAC-based One-Time Password) : mot de passe unique basé sur un compteur.
â Avantage : ne nĂ©cessite pas de connexion Internet.
b) SMS ou e-mailâïž
- Envoi dâun code Ă usage unique par SMS ou e-mail.
- Simple à mettre en place, mais vulnérable (interception SMS, piratage boßte mail, SIM swapping).
c) Applications mobiles dâauthentificationâïž
- Génération de codes via des applis comme Microsoft Authenticator ou Google Authenticator.
- Fonctionnent mĂȘme hors ligne.
- Solution robuste et gratuite.
d) ClĂ©s physiques (U2F / FIDO2 / YubiKey)âïž
- Dispositifs USB ou NFC servant de second facteur.
â TrĂšs sĂ©curisĂ©s (rĂ©sistent au phishing et aux attaques distantes).
â Limite : coĂ»t dâachat du matĂ©riel.
e) Notifications pushâïž
- Une demande de validation est envoyĂ©e directement sur le smartphone de lâutilisateur.
- Exemple : connexion Ă un compte Google â âAccepter la connexion ?â ou github â se connecter Ă l'application
â Confortable pour lâutilisateur, mais â nĂ©cessite un smartphone connectĂ©.
4. Mise en Ćuvre cĂŽtĂ© dĂ©veloppeurâïž
Un développeur doit savoir intégrer du MFA dans ses applications.
Lâexemple le plus simple est le TOTP avec une application mobile comme Google Authenticator.
Principeâïž
- Le serveur génÚre une clé secrÚte unique pour chaque utilisateur.
- Lâutilisateur scanne un QR code dans son application dâauthentification.
- Lors de la connexion, le serveur vĂ©rifie le code gĂ©nĂ©rĂ© par lâapplication.
Exemple avec Pythonâïž
import pyotp
import qrcode
# Ătape 1 : GĂ©nĂ©rer un secret unique pour un utilisateur
secret = pyotp.random_base32()
print("Secret partagé :", secret)
# Ătape 2 : GĂ©nĂ©rer un QR Code compatible Google Authenticator
uri = pyotp.totp.TOTP(secret).provisioning_uri(
name="etudiant@bts-sio.fr",
issuer_name="DemoMFA"
)
qrcode.make(uri).show()
# Ătape 3 : VĂ©rification lors de la connexion
totp = pyotp.TOTP(secret)
code = input("Entrez le code affiché par votre application: ")
if totp.verify(code):
print("â
Authentification réussie")
else:
print("â Code invalide")
đ A faire :
- Lancer ce script.
- Scanner le QR code avec Google Authenticator.
- Tester la saisie dâun code valide.
Bonnes pratiques đ
- Toujours combiner MFA avec un mot de passe fort.
- Ăviter lâusage du SMS seul (faible sĂ©curitĂ©).
- PrĂ©voir des codes de secours pour lâutilisateur.
- Mettre en place une procédure de récupération sécurisée.
- Ne jamais stocker les clés secrÚtes en clair (utiliser un chiffrement).
â RĂ©sumĂ©
Lâauthentification multi-facteur est une mesure de sĂ©curitĂ© indispensable.
Elle peut ĂȘtre mise en Ćuvre facilement par les dĂ©veloppeurs via des solutions comme TOTP et amĂ©liore grandement la sĂ©curitĂ© des applications contre les attaques les plus courantes.
5. DĂ©tection et stratĂ©gie d'authentification sĂ©curisĂ©eâïž
Scénario 1 : Paul, un peu fatigué, galÚre à se connecter à son site web favori. Il en est à sa troisiÚme tentative.
ScĂ©nario 2 : Pierre tente une attaque par force brut sur le mĂȘme site web en utilisant une attaque par permutation.
5.1 Principes gĂ©nĂ©rauxâïž
- Détecter : mesurer tentatives par compte, par IP, et par couple IP+compte.
- RĂ©agir graduellement (dĂ©fense en profondeur) : ne pas verrouiller immĂ©diatement lâutilisateur lĂ©gitime, mais rendre lâattaque coĂ»teuse.
- Journaliser & alerter : conserver logs (IP, user agent, timestamp, résultat) et déclencher alertes si pic anormal.
- Ne pas divulguer dâinformation : messages gĂ©nĂ©riques (« Identifiants incorrects ») pour Ă©viter lâĂ©numĂ©ration dâutilisateurs.
- Prévoir remédiation : procédure assistée pour utilisateur légitime (codes secours, support).
5.2 StratĂ©gie recommandĂ©e (dĂ©fense en couches â ordonnĂ©e par prioritĂ©)âïž
1.Limiter les tentatives par compte (user)
- Objectif : empĂȘcher un attaquant dâutiliser une attaque par force brut.
- Toujours enregistrer
failed_attempts,last_failed_at,lock_until. -
Politique conseillée (exemple) :
- 0â4 Ă©checs consĂ©cutifs : rien.
- 5â9 Ă©checs : afficher CAPTCHA + dĂ©lai progressif (ex. 2s â 4s â 8s).
- â„10 Ă©checs : verrouillage temporaire du compte 15 minutes.
- â„20 Ă©checs : verrouillage plus long (24 h) + notification par email.
2.Limiter les tentatives par IP
- Objectif : ralentir les attaques distribuĂ©es depuis une mĂȘme IP (ou NAT).
-
Exemples :
- 100 tentatives par IP / heure â challenge CAPTCHA.
- 500 tentatives par IP / heure â blocage temporaire IP (ex. 1 heure) ou rate-limit au proxy/WAF.
â ïž Attention au NAT/partage : soyez pondĂ©rĂ© (ne pas bloquer un domaine entier).
3.Limiter par couple IP+username
- EmpĂȘche un attaquant distribuĂ© dâattaquer un seul compte depuis plusieurs IP sans coĂ»t.
- Par ex. 20 tentatives IP+user en 1 heure â bloqueo temporaire pour ce couple.
4.Progressive delays / exponential backoff
- AprÚs chaque échec, ajouter un délai croissant cÎté serveur avant de répondre (p. ex. 0s, 1s, 2s, 4s, 8s).
- Plus efficace et moins disruptif quâun blocage immĂ©diat.
5.CAPTCHA / challenge adaptatif
- Afficher un CAPTCHA aprÚs X échecs ou comportement suspect.
- Utile pour différencier bot / humain.
- Préférer des CAPTCHAs modernes (reCAPTCHA v3 ou invisible) pour UX.
6.Verrouillage Ă double sens & codes de secours
- Si compte verrouillé, envoyer email avec lien de déverrouillage (avec OTP) ou codes de secours pré-générés.
- Ne jamais envoyer le secret MFA ou mot de passe.
7.Surveillance & alerting
- Surveiller pics dâĂ©checs, login success aprĂšs Ă©checs rĂ©pĂ©tĂ©s, pattern dâĂ©numĂ©ration.
- Alerter SOC / admin quand seuils critiques franchis.
5.2 UX & sĂ©curitĂ© : rĂšgles pratiquesâïž
- Messages génériques : « Identifiants incorrects. » Ne dire ni « email inconnu » ni « mot de passe incorrect ».
- Procédure support : autoriser un canal support pour déverrouiller aprÚs vérifs (ne pas faire de verrouillage permanent sans recours) : mail, SMS, ...
- Pas de lockout permanent : privilégier lockout temporaire, puis escalade.
- Notifiez lâutilisateur (email) en cas de verrouillage prolongĂ© ou dâactivitĂ©s suspectes.
Il faut arbitrer entre la sécurité et le confort des utilisateurs. Il ne s'agit pas de faire fuire ces derniers avec un processus de connexion/récupération trop compliqué.
ParamÚtres conseillés (à adapter selon contexte)
- Tentatives consécutives tolérées avant challenge : 5
- Tentatives avant verrouillage temporaire : 10
- Durée lockout temporaire : 15 minutes
- Durée lockout prolongé (abuse confirmé) : 24 heures
- FenĂȘtre pour compter tentatives (sliding window) : 15â60 minutes
- Rate limit IP (soft) : 100â200 req/h sur endpoint
/login - Window IP+user : 20 tentatives / heure â blocage
Outils & composants utiles
- Reverse proxy / WAF: Nginx
limit_req, Cloudflare Rate Limiting, AWS WAF. - fail2ban: pour bloquer IPs aprĂšs patterns dâĂ©chec (utile si logs accessibles).
- Redis: pour compteurs et token bucket (rate limiting).
- reCAPTCHA / hCaptcha: pour challenge adaptatif.
- SIEM / ELK: agrégation logs + alertes.
- Services anti-bot / Bot-management (Cloudflare Bot Management, Akamai).
checklist Ă appliquer đ
- Compteurs par user, par IP, et IP+user.
- StratĂ©gie progressive : CAPTCHA â Retard â Lock temporaire â Lock long.
- Messages gĂ©nĂ©riques pour Ă©viter lâĂ©numĂ©ration.
- Procédure de récupération & notifications.
- Logging centralisé + alertes.
- Rate-limiting aussi au niveau infra (WAF / reverse proxy).
- Tester les faux positifs & lâimpact sur utilisateurs lĂ©gitimes.