Le hachage


Le principe du hachage

De nombreux réseaux de P2P utilisent la technique du hachage (Hashing). Le hachage d'un fichier peut être comparé à une empreinte digitale. Cette technique permet une identification, unique et certaine, du contenu de ce fichier, en n'utilisant qu'une faible quantité de données.

Le protocole eDonkey/eMule utilise l'algorithme MD4 (message digests 4), dont la longueur est fixe de 16 octets (128 bits). Quelle que soit la taille du fichier, 10 octets, 20 kilo octets ou 1,5 giga octets, la valeur de hachage fait toujours 16 octets. Deux fichiers de même taille mais dont les contenus diffèrent ont des valeurs de hachage différentes (en théorie, car il y a toujours un très petit risque que deux contenus distincts produisent le même hachage. Toutefois, cet algorithme autorise 2^128 valeurs).

Le hachage du fichier représente donc l'identifieur ultime de son contenu.

Hachage des fichiers (Hash, File ID)


Le protocole prévoit que pour être mis en partage, chaque fichier doit être "découpé" en morceaux élémentaires. Ces entités élémentaires ont une taille de 9,28 Mo*. Seuls les morceaux complets et non corrompus sont partagés.
Ainsi, chaque fois qu'eMule termine le téléchargement d'un morceau, elle s'assure de l'absence de corruption des données. S'il est valide, il est proposé en partage.

Comment le morceau est-il reconnu sur le réseau ?

Le morceau, tout comme n'importe quel fichier est reconnu, non par son nom (un morceau n'a pas de nom), mais par la valeur de son hachage. eMule applique l'algorithme MD 4 sur les données constitutives de chaque morceau élémentaire complet. Le résultat de cette opération est une valeur de hachage, unique.

Qu'est-ce que la valeur de hachage d'un fichier ?

C'est la valeur obtenue en appliquant un algorithme MD4 aux valeurs de hachage de l'ensemble des morceaux qui le constituent.

Table de hachage

Lorsque l'on ajoute un téléchargement à eMule, la première source qui envoie des données envoie pour commencer la table de hachage (ou hash set) du fichier. C'est l'ensemble des valeurs de hachage de tous les morceaux qui constituent le téléchargement, la position précise du début et de la fin de chacun de ces morceaux et la valeur de hachage du fichier lui-même. Le fichier part.met est alors créé, en fonction des instructions de cette table. Le part.met est donc le plan permettant à eMule la construction du téléchargement. Grâce à lui, elle sait si le morceau reçu est valide ou non (en comparant la valeur de son hachage à celui de la table de hachage) et où il doit se placer. Lorsque le téléchargement est achevé, toutes les valeurs de hachage des morceaux ont été vérifiées. Il ne reste plus à eMule qu'à calculer la valeur de hachage du fichier lui-même, en appliquant l'algorithme MD4 aux valeurs de tous les morceaux élémentaires. Puis à la comparer à la valeur reçue dans la table de hachage. Si elle est identique, le fichier est transféré dans le répertoire de réception et partagé.

Autres valeurs de hachage

L'algorithme MD4 est aussi utilisé pour générer d'autres identifiants nécessaires à eMule. Ainsi, chaque utilisateur du réseau est reconnu par la valeur de hachage qui lui est attribuée une fois pour toute (sauf mauvaise manipulation), lors du premier lancement d'eMule et qui est sauvegardée dans le fichier preferences.dat.

Quel que soit le pseudo que vous utilisez sur le réseau et même si vous ne modifiez pas le pseudo par défaut, ce qui est déconseillé, les autres clients vous reconnaissent infailliblement. Heureusement pour vous, car vous pouvez ainsi bénéficier des crédits que vous avez accumulé chez eux. Toutefois, dans ce cas, l'identification est sécurisée grâce à une clé de cryptage contenue dans le fichier cryptkey.dat.

 

* : Certains morceaux complets ont une taille inférieure à 9,28 Mo. Les fichiers de taille inférieure à 9,28 Mo ne sont constitués que d'un seul morceau. Le dernier morceau d'un fichier a une taille correspondant au reste de la division de la taille totale du fichier par 9,28 Mo.

21/03/2004 - Ogmios


Copyright © 2007-2008 by Team © #eMule-french