lm-hash et nt-hash

Un petit billet sur les hash utilisé pour l’authentification locale sous Windows.

Le LM-Hash

Le lm-hash est utilisé depuis Windows 3.11 pour générer les empreintes des mot de passe d’authentification locale Windows. Son fonctionnement est du fait de son age très rudimentaire.

Un mot de passe LM-hash a 2 contraintes :

  • Il ne peut pas faire plus de 14 caractères.
  • Il ne peut contenir que des caractères ASCII imprimable : [a-zA-Z0-9 ! »#$%&'()*+,-./:;<=>?@[\]^_`{|}~].

Il fonctionne ainsi :

1 / Le mot de passe est convertis en majuscule.

2 / Si le mot de passe ne fait pas 14 bytes, alors des zero sont rajoutés derrière le mot de passe.

3 / Le mot de passe est découpé en 2 bloc de 7 bytes.

4 / Chaque bloc de 7 bytes permet de générer une clé DES. Une clé DES ayant besoin de 64 bits pour être généré, il est ajouté tous les 7 bits un bit de parité et les bloc sont convertis en bit stream.

5 / Ces 2 clés DES permettent de chiffrer en ECB la chaine ASCII « KGS !@#$% » ( soit : 0x4B,0x47,0x53,0x21,0x40,0x23,0x24,0x25 en hexadecimal), ce qui génère 2 textes chiffré de 8 bytes.

6 / Ces 2 textes chiffrés sont concaténés pour créer une chaine de 16 bytes qui devient le LM hash.

Voici un exemple :

Le mot de passe est : ArtifLo23 (41 72 74 69 66 4c 6f 32 33)

1 / Tout est converti en majuscule :

ARTIFLO23

2 / Des zero sont ajouté a la fin pour atteindre 14 bytes :

ARTIFLO2300000

3 / Le mot de passe est découpé en 2 blocs de 7 bytes (entre parenthèse la valeur hexadécimale) :

Bloc 1 : ARTIFLO (41 52 54 49 46 4c 4f)

Bloc 2 : 2300000 (32 33 00 00 00 00 00)

4 / 2 clés DES sont générés à partir des blocs (j’affiche uniquement à présent la valeur hexadécimale):

Bloc1 : 40 a8 94 89 94 32 31 9e

Bloc2 : 32 19 c1 01 01 01 01 01

5 / Ces 2 clés génèrent le hash de la chaine « KGS!@#$% » :

Bloc1 : 2c fb 54 1d 29 3b a1 db

Bloc2 : b7 5e 0c 8d 76 95 4a 50

6 / Les 2 blocs de hash sont concaténés pour créer le LM-Hash :

2cfb541d293ba1dbb75e0c8d76954a50

Le NT-hash ou NTLM hash

Depuis Windows Vista, le NT-hash est devenu le système de hash par défaut pour l’authentification locale sous Windows.

Face au LM-Hash le NT-Hash possède ces avantages :

  • Le mot de passe du nt-hash peut faire jusqu’à 127 caractères
  • En plus des caractères ASCII, les caractère régionaux peuvent être utilisé.
  • Il prend en compte la casse.
  • Ce n’est plus un algorithme de chiffrement qui est utilisé mais un algorithme de générateur d’empreinte : le MD4.

Son fonctionnement est beaucoup plus simple :

1 / Le mot de passe est défini en UTF-8 pour harmoniser tous les alphabets.

2 / Il est converti en UNICODE little endian

3 / Il est haché en MD4.

Voici un exemple :

Le mot de passe est : ArtifLo23 (41 72 74 69 66 6c 6f 32 33)

1 / En UTF-8 rien ne change.

2 / La conversion en Unicode little endian

410072007400690066004c006f0032003300

3 / Le hash MD4 qui donne le NT-Hash

6bbb885acc9fe37317e6c2c7725efa93

Si vous voulez tester vos mot de passe, je vous recommande ce site avec lequel j’ai put faire tous mes test :

http://nediam.com.mx/winhashes/index.php