Depuis quelques années, j’utilise les capacités cryptographiques de Linux pour chiffrer mes clés usb, disques durs de portable ou disque dur externe. Bien plus efficace qu’un hypothétique mot de passe root, cela permet de garantir une assez bonne confidentialité à mes données personnelles et professionnelles …

… Jusqu’au jour où, après environ un an sans reboot, un serveur personnel redémarre et me demande la passphrase … que j’ai bien évidemment oubliée !

N’ayant rien trouvé sur le net pour brute-forcer une partition Linux chiffrée avec Luks, voici le script que j’ai produit afin de m’aider dans cette tâche …

Brute-Force de Luks ?

Tout d’abord, sachez que brute-forcer Luks n’est pas chose aisée : la norme PBKDF2 utilisée par Luks fait que ce dernier n’utilise pas directement la passphrase comme source pour déchiffrer la clé, mais la passe à travers un algorithme de calcul et ce un grand nombre de fois (dans mon cas 191609 fois), ce qui nécessite environ 1 seconde sur ce serveur pour calculer la clé résultante. Ainsi, à chaque test de mot de passe, il faut 1 seconde pour avoir le résultat !

Cette protection est très utile pour éviter un brute-force sauvage essayant toutes les combinaisons de clé possible sur un supercalculateur…

Cependant, dans mon cas, j’avais une assez bonne idée de ce que pouvait être cette passphrase : « Blessent mon coeur d’une langueur monotone. » était un candidat, il y avait aussi « Tant va la cruche à l’eau qu’à la fin elle me les brises. »… Mais bon, ce n’était évidemment ni l’une ni l’autre.

Par contre ma passphrase pouvait être un de ces candidats :

  • Blessent mon coeur d’une langueur monotone.
  • blessent mon coeur d’une langueur monotone.
  • Blessent mon coeur d’une langueur monotone
  • blessent mon coeur d’une langueur monotone
  • Blessent mon coeur, d’une langueur monotone.
  • « Blessent mon coeur d’une langueur monotone »
  • « blessent mon coeur d’une langueur monotone. »

bref, je vous laisse deviner mon problème … avec guillemets ou parenthèses autour, ou avec ou sans point, virgule et majuscules de ci de là, je devais retrouver mes données quelque part parmi ces … 2 * 5 * 2^3 * 3 … enfin bref, quelque chose comme 10 000 combinaisons …

Il n’était, par contre, pas question pour moi de chercher à la main toutes ces combinaisons.

Un programme pour semi-brute-forcer Luks

N’ayant pas trouvé de programme sur Internet pour m’aider dans cette tâche, j’ai donc écrit un petit script en php-script (le langage que j’avais sous la main et qui me prendrait moins de 1/4h à écrire …)

Voici donc, pour votre plus grand plaisir :

luks-brute-force.php

Ce script permet de tenter d’ouvrir une partition luks (ici /dev/md1, remplacez-là par votre partition, comme /dev/sda3 ou /dev/mapper/encrypted-root) en essayant toutes les combinaisons possibles autour d’une ou plusieurs phrases que vous soupçonnez d’être votre mot de passe.

Afin de l’utiliser, il faut donc

  • remplacer /dev/md1 par votre partition Luks,
  • remplacer le tableau de tableau par chacune des phrases que vous voulez essayer et les variantes locales de ces dernières (avec ou sans ., () espace etc.).
  • remplacer le mail bidon par le votre : il vous enverra un mail si la bonne combinaison a été trouvée !

Lancez le tout, par exemple dans une console avec screen, et laissez le charme agir (et un peu de patience si le nombre de combinaisons est grand …)

Ce programme m’a sauvé un joli volume de données personnelles (ici un disque de 2To avec 15 ans de photos), profitez-en s’il peut vous aider dans ce sens : il est distribué sous licence GPL v3.

Catégories : français