Le terme « hash » en anglais, vient du verbe français « hacher », qui indique comment une fonction de hachage est conçue pour hacher les données. Une autre structure de données, la table de hachage, est fréquemment utilisée pour identifier rapidement deux hashs (ou « valeur de hachage ») identiques.
En vingt ans, le développement de la cryptographie s’est accéléré après que Diffie et Hellman ont identifié la nécessité d’un hachage à sens unique dans leur papier précurseur sur la cryptographie à clé publique en 1976. En 1990, Ronald Rivest, cryptographe et professeur au MIT, a inventé le hachage MD4, et plus tard le hachage MD5 et MD6. En 1995, la NSA (« National Security Agency ») a conçu le SHA-1 (« Secure Hash Algorithm 1 »), inspiré de la création de Rivest, suivi de sa mise à jour SHA-2 en 2001. Le SHA-2 est le standard qui a inspiré le SHA-256, qui a lui-même servi de fondation à l’algorithme de consensus de Bitcoin.
L’intérêt du hachage
Le hachage est né de la nécessité d’uniformiser la longueur des contenus d’une part, et du besoin d’identificateurs uniques d’autre part. En dehors de la cryptosphère, les utilisations courantes du hachage incluent :
Le calcul d’une (courte) valeur de contrôle pour un objet, pour un ISBN (« Numéro international normalisé du livre » en français) par exemple ;
L’identification « brève » de tout contenu, sans ambiguïté, et sans rien révéler dans les applications cryptographiques.
Les propriétés du hachage
Le hachage cryptographique doit être efficace en matière de calcul, ce qui signifie qu’il doit être rapide pour créer la valeur de hachage. Il doit être déterministe, c’est-à-dire qu’à chaque fois qu’un certain input est introduit, le même output doit être produit, mais aussi résister à la préimage. Par conséquent, le hachage ne peut pas révéler la moindre information sur les inputs et outputs.
Enfin, le hachage doit également être résistant aux collisions : il doit être impossible pour deux inputs différents de produire le même output. Cette nature déterministe et cette résistance à la préimage et aux collisions sont les trois propriétés fondamentales du hachage dans le processus de mining de Bitcoin.
Le hachage doit également être résistant aux collisions : il doit être impossible pour deux inputs différents de produire le même output.
Le hachage dans le processus de mining
Pour en revenir rapidement au processus de validation du réseau Bitcoin, lorsqu’un bloc est regroupé, il contient plusieurs transactions ainsi que des informations concernant le précédent bloc. Autrement dit, si quelqu’un voulait modifier le registre ou effectuer une double-dépense, il ou elle devrait changer le hash dans tous les blocs précédents.
Pour que le bloc regroupé soit ajouté à la blockchain, les mineurs doivent trouver un hash correspondant à la difficulté donnée. Chaque bloc contient un en-tête (« blockheader » en anglais) où se trouvent le numéro du bloc ; le hash du bloc précédent et un « nonce » qui comporte un horodatage. Le but d’un nonce est de varier les inputs d’un hachage cryptographique, c’est-à-dire d’en augmenter le caractère aléatoire, pendant le processus de mining.
Résoudre le hash
Le node commence ensuite à « hacher » les données en les convertissant en valeur de hash, ou « hash », qui doit toujours contenir un certain nombre de zéros. Le node vérifie ensuite que le hash répond bien à la difficulté établie. Le hash doit toujours commencer avec le nombre correct de zéros. Si le hash correspond à la difficulté, il est diffusé aux autres mineurs du réseau. Le premier mineur qui trouve un hash valide peut valider le bloc et reçoit la récompense et les frais du bloc en bitcoin.
Si le hash ne correspond pas à la difficulté, un autre nonce est sélectionné et haché. Les mineurs doivent générer de nombreux hashs avec plusieurs nonces, jusqu’à trouver un nonce qui corresponde à la difficulté. C’est un processus répétitif et énergivore que l’on appelle le mining de bitcoins et qui nécessite une puissance de calcul importante.
Le hachage est le pilier fondateur du processus proof-of-work. Sans la confirmation et la production des hashs de transaction, la blockchain ne serait pas inaltérable et il serait impossible de déterminer à qui appartient quel montant de bitcoins à tout moment.