# Attaque par dictionnaire

L'attaque par dictionnaire est une méthode utilisée en cryptanalyse pour trouver un mot de passe ou une clé. Elle consiste à tester une série de mots de passe potentiels, les uns à la suite des autres, en espérant que le mot de passe utilisé pour le chiffrement soit contenu dans le dictionnaire. Si ce n'est pas le cas, l'attaque échouera.
Cette méthode repose sur le fait que de nombreuses personnes utilisent des mots de passe courants (par exemple : un prénom, une couleur ou le nom d'un animal). C'est pour cette raison qu'il est toujours conseillé de ne pas utiliser de mot de passe comprenant un mot ou un nom.
L'attaque par dictionnaire est une méthode souvent utilisée en complément de l'attaque par force brute qui consiste à tester, de manière exhaustive, les différentes possibilités de mots de passe. Cette dernière est particulièrement efficace pour des mots de passe n'excédant pas 5 ou 6 caractères.

## Contenu du dictionnaire et règles

Outre le contenu habituel d'un dictionnaire qui renferme un ensemble de mots, le dictionnaire peut être rendu plus efficace en combinant les mots ou en y appliquant certaines règles, qui correspondent aux habitudes de choix des mots de passe actuels. Pour citer quelques exemples courant, pour chaque mot, on peut essayer de changer la casse de certaines lettres ou les remplacer par leurs équivalents en leet speak. Une autre astuce consiste à répéter deux fois le mot (par exemple « secretsecret »). On peut aussi générer des dictionnaires correspondant à l'ensemble des numéros de plaque, des numéros de sécurité sociale, des dates de naissance, etc. De tels dictionnaires permettent de casser assez facilement des mots de passe d'utilisateurs faisant appel à ces méthodes peu sûres pour renforcer leurs mots de passe.

## Logiciels

Le logiciel John the Ripper, le plus connu dans ce domaine, est fourni avec une liste de règles qui permettent d'étendre l'espace de recherche et explorer les failles classiques dans l'élaboration des mots de passe ou des clés par les utilisateurs. Il existe des dictionnaires qui contiennent plusieurs millions de mots et qui ne sont pas fournis avec le logiciel. Citons encore L0phtcrack et Cain & Abel qui fournissent des services similaires.
Toutefois, ce type de logiciels n'est pas forcément utilisé dans un but malveillant. Ces outils peuvent être utiles pour les administrateurs qui veulent sécuriser les mots de passe et alerter les utilisateurs sur les risques encourus.

## Détection

Il est possible de détecter les attaques de force brute en limitant la durée entre deux tentatives d’authentification ce qui augmente considérablement la durée de déchiffrage. Autre possibilité, le système des cartes à puces (exemple carte bancaires) ou les cartes SIM qui bloque le système au bout de 3 tentatives infructueuses ce qui rend impossible toute attaque par force brute.

## Salage de mot de passe

Dans les applications, les mots de passe sont souvent stockés sous forme de hash à partir desquels il est très difficile de retrouver le contenu du mot de passe. Certains dictionnaires utilisés pour les attaques comportent le résultat des signatures des mots de passe les plus communs. Une personne malveillante ayant accès aux résultats du hachage des mots de passe pourrait donc deviner le mot de passe originel. Dans ce cas on peut utiliser le « salage » du mot de passe. C'est-à-dire l'ajout d'une séquence de bit servant à modifier la séquence finale. Prenons par exemple le mot de passe « Wikipedia », qui utilisé avec l’algorithme SHA-1 produit : 664add438097fbd4307f814de8e62a10f8905588. Utilisons un salage du mot de passe en y ajoutant « salé ». En hachant « Wikipediasalé », le hashage est maintenant : 1368819407812ca9ceb61fb07bf293193416159f, rendant tout dictionnaire « de base » inutile.
Une bonne pratique est de ne pas utiliser une clé de salage unique mais de la générer aléatoirement pour chaque enregistrement. Même si la clé de salage est lisible, il faudra pour chaque mot de passe régénérer un dictionnaire salé complet. On peut aussi intégrer une partie dynamique et une partie intégrée au code source de l’application pour une sécurité maximale. Les systèmes d’exploitation de type Unix utilisent un système de mots de passe hachés salés.