Le Grid Computing
Démonstration de la grille de calcul
Pour illustrer notre travail, nous avons choisi de proposer un programme de crackage de mots de passe hachés via MD5. Pour plus de facilité du traitement, on considèrera que la chaîne de caractères n'est composée uniquement que de chiffres.Petit rappel sur le MD5
Le MD5 (ou Message Digest 5) est une fonction de hachage.
Elle permet d'associer une série d'octets unique à chaque chaîne de caractères.
Le procédé est irréversible.
Par exemple, le nombre "3527620" a pour clé MD5 la chaîne "b41162f945e36624b357a2ffc1290f8a".
L'intérêt de cette fonction est que l'on peut vérifier l'intégrité de données
envoyées sur un réseau non fiable. L'autre intérêt est de conserver des mots de passe
incompréhensible par le commun des mortels dans une base de données, pour la connexion
à un site Web.
Les programmes
Le but de la manoeuvre consiste à retrouver un mot de passe correspondant à une chaîne MD5. Pour cela, nous allons utiliser la méthode du Brute Force. Elle consiste en le test de toutes les possibilités de mot de passe.
Pour mettre en oeuvre ce procédé, nous allons découper les phases de tests en plusieurs parties,
qui seront redistribués sur les postes clients du Grid Computing.

Nous allons utiliser, pour ce faire, un serveur MySQL, disponible sur son site officiel.
Les clients vont donc s'y connecter pour prendre une partie du calcul avant de la traiter, puis retourner le résultat de la recherche.
Pour montrer qu'il n'est pas nécessaire de se trouver dans un même environnement, nous avons développé 2 clients: l'un en VB.Net (2.0), l'autre en Java (1.5). Pour le client DotNet, il est nécessaire d'installer au préalable le connecteur adéquat. Pour ce qui est du client Java, la librairie est fournie avec les sources.
Voici les fichiers sources DotNet, et les fichiers sources Java.
Avant de commencer la démonstration, il est nécessaire de créer 2 tables dans la base de données:
CREATE TABLE KeyToFind(
idKeyToFind INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(idKeyToFind),
nomKeyToFind VARCHAR(255) NOT NULL,
found INT NOT NULL,
startTime BIGINT,
endTime BIGINT
);
CREATE TABLE KeyRange(
idKeyRange INT NOT NULL AUTO_INCREMENT,
nbStart BIGINT UNSIGNED NOT NULL,
nbEnd BIGINT UNSIGNED NOT NULL,
idKeyToFind INT NOT NULL,
dateCreated BIGINT NOT NULL,
done INT NOT NULL,
IP VARCHAR(50) NOT NULL,
PRIMARY KEY(idKeyRange),
FOREIGN KEY (idKeyToFind) REFERENCES KeyToFind(idKeyToFind)
);
COMMIT;
La première table va stocker l'ensemble des clés MD5 à décrypter.
La seconde table va stocker l'ensemble des plages de mots de passe testés pour chaque clef MD5.
2 autres programmes ont été développés pour le serveur qui héberge la base de données.
Les codes sources, développés aussi en VB.Net, sont disponibles ici.
Le premier programme est un générateur de clés MD5 et qui ajoute ces dernières dans la base les données à traiter.
Le second programme est un moniteur.
Celui-ci va scanner la base et faire des statistiques sur les travaux des clients.
La mise en oeuvre
On lance tout d'abord le générateur de tāches sur le serveur:

Celui-ci nous génère un certain nombre de clés à retrouver pour les clients.
On lance ensuite le moniteur sur le serveur:

Le moniteur est activé en appuyant sur la touche "Start Monitoring"; il regarde l'ensemble des clés et évalue le temps nécessité pour retrouver le mot de passe.
Passons maintenant sur les clients. On peut lancer indiféremment l'un des 2 clients.
On lance alors l'exécution du calcul en appuyant sur le bouton "Let's Calculate!". Dès lors, on peut voir que des informations sont récupérées sur le serveur de base de données. Les plages sont traitées une à une, et le résultat est retourné sur le serveur:

Si une clé a été découverte, le serveur est immédiatement prévenu. Il ne reste plus qu'à récupérer de nouvelles plages pour une nouvelle clé à décrypter.
Cas où l'un des clients s'arrête en plein calcul...
Un des problèmes de la grille de calcul est que les clients ne sont pas assurés d'une qualité de service.
C'est pour cela qu'un système de timeout est mis en place. Quand un client voit qu'une tāche n'a pas été réalisée,
il regarde son temps de création.
Si son congénéraire responsable du calcul n'a pas répondu au-délà de 20 secondes,
il reprend en charge l'opération en assignant une nouvelle date de traitement:

Ainsi, la grille n'assure certes pas une qualité de service au niveau de ses noeuds de calcul, mais garantie un traitement de toutes les tâches.
Dans notre exemple, les découvertes de 10 mots de passe se sont passées en près de 700s avec un seul poste client. (cadencé ą 1,4Ghz). Lors d'un test avec 5 machines de puissance ą peu près équivalente, on se retrouve alors avec un traitement réussi en 183s! Le gain est alors important, puisque l'on divise le temps de calcul par 4.
L'utilité du calcul en grille a donc été démontrée.