• Loïc Morel

Le hachage cryptographique et Bitcoin.

Les fonctions de hachage cryptographiques ont une place centrale dans le fonctionnement technique de Bitcoin. Nous les retrouvons à divers moments notamment dans la création d'une adresse de réception, dans la Proof-of-Work ou encore dans l'Arbre de Merkel.


hache



Qu'est-ce que le hachage cryptographique ?


Une fonction de hachage cryptographique est une fonction qui transforme un message de taille arbitraire en une empreinte de taille fixe appelée condensat ou hash.


Les caractéristiques d'une fonction de hachage sont :

  • L'irréversibilité de la fonction mathématique. Si je possède le message en entrée, je peux facilement trouver le hash en sortie. Mais si je ne possède que le hash, je ne doit pas être en capacité de retrouver le message en entrée. Dans notre exemple ci-dessous, le message "Pandul" permet de sortir un hash "bbde98c35...", par contre je ne peux pas trouver le message "Pandul" si je ne possède que le hash "bbde98c35...". Les fonctions de hachage agissent comme des trappes à sens unique : si l'on arrive d'un côté, la trappe est ouverte. Si l'on arrive de l'autre côté, la trappe est fermée.

Hachage sens unique

  • La résistance à la falsification. La moindre petite modification du message en entrée de la fonction doit aboutir à un hash différent. Cette caractéristique permet de reconnaitre facilement et rapidement si le message en entrée a subit une modification. Dans notre exemple ci-dessous, le simple fait d'ajouter un point a modifié tout notre hash en sortie.

Résistance à la falsification

  • La résistance aux collisions. Il doit être impossible de trouver un même hash en sortie avec deux messages différents en entrée. Dans notre exemple, le hash "bbde98c35..." est propre au message "Pandul". Il sera impossible de retrouver "bbde98c35..." avec un autre message en entrée.




Utilisation du hachage cryptographique dans Bitcoin.


Les fonctions de hachages sont utilisées dans Bitcoin pour obtenir un hash (ou un condensat) de taille fixe à partir d'un message en entrée de taille arbitraire. Les caractéristiques des fonctions de hachage jouent alors un rôle central dans le fonctionnement technique de Bitcoin. Les principales fonctions de hachage utilisées dans Bitcoin sont : SHA-256 et RIPEMD-160. On utilise également des fonctions incluant l'utilisation d'une fonction de hachage comme HMAC-SHA512 ou PBKDF2.


SHA est un acronyme qui veut dire Secure Hash Algorithm.

Ces fonctions agissent ainsi à divers moment dans le protocole Bitcoin :


SHA-256 est utilisé à deux reprises (double hachage) dans le mécanisme de Proof-of-Work afin d'obtenir un hash de l'entête des blocs. Pour aller plus loin sur la PoW, nous vous proposons de lire notre article : Qu'est-ce que le minage de bitcoins ?


Schéma Proof-of-Work


SHA-256 est également utilisé au sein de l'arbre de Merkle afin de pouvoir créer une Racine de Merkle, un condensat de taille limitée qui inclut un grand nombre de transactions. Ces hash successifs permettront de résumer les transactions.


Schéma arbre de Merkle


Les hash successifs dans l'arbre de Merkle de Bitcoin sont le résultat d'un double SHA-256 également nommé HASH256. Par exemple imaginons une transaction "A" :

H = hash.

Txid = identifiant de transaction.

H(A)= Sha256(Sha256(Txid A))


SHA-256 est aussi utilisé pour dériver une adresse de réception, au sein d'un portefeuille Bitcoin, à partir d'une clé publique enfant. Cette fonction est alors associée à la fonction RIPEMD160. L'association de ces deux fonctions est souvent nommée HASH160.


Schéma de génération d'une adresse


Ainsi, l'adresse 1 (A1) de la clé publique 1 (P1) sera :

A1= RIPEMD160(Sha256(P1))

Résultat auquel nous appliquerons un format spécifique.



Les fonctions HMAC et PBKDF2 sont utilisées dans le processus de dérivation d'un portefeuille HD. Pour en savoir plus : Création d'un portefeuille Bitcoin : entropie, phrase, graine et clés étendues.




Pour aller plus loin :