Pour être chiffré, le mot de passe est mis en majuscules et complété par des zéros s'il faisait moins de quatorze caractères. Ensuite, la chaîne 0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25 est cryptée avec les sept premiers caractères du mot de passe par du DES pour former la première partie du mot de passe chiffré. De manière indépendante, cette même chaîne est chiffrée avec les sept caractères suivants pour former la seconde partie du mot de passe. Le DES, Data Encryption Standard, est un algorithme de chiffrage par bloc datant des années 70 fonctionnant avec une clé de 56 bits. Il a déjà fait l'objet d'une présentation dans un précédent Pirate Mag.
mot de passe = "PaSswOrd"
|| Mise en majuscule,
|| on complète avec des zéros
\/
PASSWORD,0,0,0,0,0,0
|| ||
\/ \/
PASSWOR D,0,0,0,0,0,0
|| || Chiffrement DES de la constante
|| || 0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25
\/ \/
e5 2c ac 67 41 9a 9a 22 4a 3b 10 8f 3f a6 cb 6d
|| Concaténation
\/
e5 2c ac 67 41 9a 9a 22 4a 3b 10 8f 3f a6 cb 6d
Cette forme cryptée s'appelle le LANMAN hash. Elle est apparue dans Windows 3.11 pour Workgroup.
Cette méthode de chiffrement présente plusieurs faiblesses:
- Un même mot de passe a toujours la même forme codée. Chercher à casser un mot de passe ou un millier est aussi rapide: il suffit de chiffrer le mot de passe une fois et de comparer sa forme cryptée avec les différents comptes à casser. Effectuer une comparaison ou un millier prend quasiment le même temps (progression logarithmique), temps négligeable devant celui du chiffrement proprement dit.
- Les mots de passe de sept caractères ou moins sont directement repérables. Leurs formes LANMAN se terminent toujours par aa d3 b4 35 b5 14 04 ee: chiffrement DES de la constante 0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25 par la chaîne 0,0,0,0,0,0,0.
- L'espace de recherche est restreint: pas de minuscule. Des attaques par force brute sont envisageables.
Certaines personnes voulaient savoir d'où venait la constante, si son choix était important pour la sécurité de l'algorithme. Ce n'est pas le cas. Par exemple, sous Linux et de nombreux Unix, la constante cryptée par du DES est formée uniquement de 0, difficile de faire plus simple.