Sécurité des mots de passe
Un attaquant qui tente d’accéder à une application protégée par mot de passe (une archive RAR chiffrée, une messagerie…) dispose de plusieurs moyens de parvenir à ses fins sans connaître le mot de passe. Certains demandent un peu d’intelligence, d’astuce et de connaissances, d’autres un peu de chance et une bonne condition physique. Commençons donc par récapituler les possibilités de l’attaquant.
Comment percer un mot de passe
- Trouver la personne qui connaît le mot de passe (par exemple le titulaire de la messagerie) et le lui soutirer : la convaincre, la soudoyer ou la frapper. Je ne décrirai pas davantage cette méthode dans l’article :-).
- Essayer de lui soutirer le mot de passe discrètement, par exemple au moyen d’un faux courriel ; on parle plus savamment d’hameçonnage (phishing). Le principe consiste à envoyer au titulaire du compte un courriel dans lequel on lui demande de renvoyer son identifiant et son mot de passe. Tout dépend de la crédibilité du message : une simple demande ne suffirait sans doute pas, il faut y ajouter une histoire. On rencontre souvent le prétexte d’une panne de base de données, qui pousse à demander à tous les utilisateurs de ressaisir leur identifiant et leur mot de passe, faute de quoi leur boîte sera supprimée, etc. Si le message semble vraiment sérieux, le taux de réussite n’est pas négligeable.
- Attaque par dictionnaire : on télécharge sur Internet des listes des mots de passe les plus fréquents et on les essaie tous. Si l’on a de la chance et que le titulaire a choisi un mot de passe courant, on le trouve facilement. De là découle la leçon essentielle : ne choisis pas de mot de passe qui ait un sens. Mets par exemple « chocolat » comme mot de passe, et je te garantis que le premier pirate venu le percera en quelques secondes. C’est sans doute la méthode la plus efficace : avec un très gros dictionnaire de mots de passe, on peut deviner le mot de passe d’une grande partie des utilisateurs sans grand effort.
- L’attaque par force brute (brute force) est la méthode la plus bête : elle consiste à essayer toutes les combinaisons possibles de mots de passe. Le programme compose les caractères un à un selon un algorithme donné et vérifie s’il a trouvé le mot de passe recherché. Dès qu’il le trouve, il le mémorise et s’arrête. Nous allons examiner cette méthode plus en détail.
Force brute
Le programme qui utilise cette méthode ne fait que former différents k-uplets de lettres et vérifie s’il ne tombe pas par hasard sur le mot de passe. Calculons combien de temps cette recherche peut lui prendre.
Supposons que nous ayons un mot de passe de cinq caractères, composé uniquement de lettres minuscules de l’alphabet anglais (sans les lettres accentuées, etc.). L’alphabet anglais compte vingt-six lettres. Calculons maintenant simplement combien de mots de passe différents on peut former avec cinq de ces lettres. L’ordre compte (le mot de passe « loupe » n’est pas le même que « poule », bien qu’ils soient composés des mêmes lettres), et une lettre peut apparaître plusieurs fois dans un mot de passe : on compte donc des k-uplets avec répétition. Passons au calcul : le nombre de k-uplets d’un ensemble à n éléments est nk. On remplace n par le nombre de lettres parmi lesquelles on choisit, c’est-à-dire vingt-six, et k par le nombre de lettres du mot de passe, ici cinq. On obtient 265, soit environ douze millions de possibilités. Est-ce beaucoup ou peu ?
Cela dépend de la machine dont on dispose. Un vieil appareil réalise peu de comparaisons par seconde, alors que les ordinateurs ultramodernes en font dix mille fois plus. Dans ces exemples, je supposerai que l’ordinateur effectue dix millions de comparaisons et évaluations par seconde. Tu l’as sans doute déjà compris : un ordinateur de ce type découvrirait un mot de passe de cinq caractères en deux secondes, ce qui n’est vraiment pas rassurant. Mais ne baissons pas les bras.
Renforcer le mot de passe
Un mot de passe de cinq caractères n’est pas du tout sûr, et certains systèmes raisonnables ne permettent même pas de le choisir si court. On considère qu’un mot de passe ne devrait pas comporter moins de huit caractères. Calculons maintenant le nombre de possibilités pour un mot de passe de huit caractères. Comme précédemment, nous ne considérons que les lettres minuscules de l’alphabet anglais. En appliquant la formule, on obtient 268, soit environ deux cents milliards de possibilités. C’est déjà un plus joli nombre. Notre ordinateur vérifierait toutes ces possibilités en moins de six heures. C’est mieux qu’avant, mais voyons comment la force du mot de passe augmenterait si tu utilisais aussi des majuscules, des chiffres et des caractères spéciaux comme le tiret bas ou le tiret.
Il y a 26 lettres minuscules et 26 majuscules, soit 52 caractères. Il faut y ajouter les 10 chiffres et quelques caractères spéciaux. Tous ne sont pas autorisés partout, donc pour simplifier je ne compte que huit caractères spéciaux, afin d’arrondir le nombre de caractères à un joli 70. La longueur du mot de passe reste huit. En appliquant la formule, on obtient 708, soit environ 5,8 · 1014, c’est-à-dire près de six cent mille milliards de possibilités. C’est déjà un nombre respectable. Notre ordinateur vérifierait toutes ces possibilités en seize mille heures ! Soit un peu moins de deux ans. Un attaquant devrait avoir beaucoup de chance pour trouver le mot de passe dans un délai réaliste. Il devrait en outre connaître la longueur de ton mot de passe ; s’il ne la connaissait pas, il devrait encore tester les variantes plus courtes.
Certaines personnes ont tellement peur pour leurs données qu’elles utilisent des mots de passe numériques. Ces mots de passe résistent très bien à l’attaque par dictionnaire, car il est peu probable qu’un dictionnaire de mots de passe courants contienne justement le nombre 41 274 390 553. Malheureusement, ils résistent moins bien à la force brute. Il n’y a que dix chiffres, donc le nombre de possibilités vaut toujours 10k. Seule la longueur du mot de passe compte. Notre mot de passe précédent de huit caractères, avec toutes sortes de caractères, offrait environ 5,8 · 1014 possibilités. Pour atteindre au moins la même chose avec un mot de passe numérique, il faudrait quinze chiffres, presque deux fois plus de caractères. Il est clair qu’il vaut mieux choisir un mot de passe plus court, mais comportant plusieurs types de caractères.
Ne sous-estime pas l’attaquant
L’attaquant peut être malin. Supposons que, après avoir lu les lignes précédentes, tu décides de remplacer ton mot de passe actuel, « citronnade », au moins par « Citronnade ». Cela multiplie plusieurs fois le nombre de possibilités, car l’attaquant doit désormais aussi intégrer les majuscules. Mais il peut supposer que la majuscule n’apparaîtra qu’en première position, car c’est plus facile à retenir et qu’il n’est pas habituel de mettre une majuscule au milieu d’un mot. Il écrira donc un algorithme qui teste toutes les variantes de mots en minuscules, avec éventuellement une seule majuscule tout au début.
Ton ancien mot de passe avait une complexité de 268 (c’est-à-dire le nombre total de possibilités en gardant la même forme : huit lettres minuscules). Si l’attaquant ne réfléchissait pas, le nouveau mot de passe aurait une complexité de 528. Mais s’il utilise l’algorithme esquissé plus haut, sa complexité est de 52 · 267. En première position, le caractère peut être une minuscule ou une majuscule, soit 52 possibilités au total ; sur les sept positions suivantes, seules des minuscules sont possibles, ce qui correspond tout simplement à un k-uplet avec répétition.
De plus, l’attaquant peut savoir que ton mot de passe se compose de quatre lettres et de quatre chiffres, sans mélange : les lettres d’abord, puis les chiffres, ou l’inverse. La complexité d’un tel mot de passe se calcule ainsi : la première série de quatre lettres a 264 possibilités, la seconde série de quatre chiffres a 104 possibilités. On multiplie ensuite ces deux résultats : 264 · 104. Si l’attaquant ne savait pas si les chiffres ou les lettres viennent en premier, il faudrait encore multiplier le résultat précédent par deux.