MSTR Cat

Blockchain/Niveau II · Mécanismes/2.1 Cryptographie/Leçon 2

HASH160 : SHA-256 puis RIPEMD-160

Un double hachage qui raccourcit les clés, et la faiblesse qu’il cache

MatérielUn explorateur de blocs comme blockstream.info ou blockchain.comUn échantillon d’adresses BitcoinUn éditeur de texte ou un tableur

Curiosité

  1. Pourquoi Bitcoin utiliserait-il successivement deux fonctions de hachage différentes ?
  2. Qu’apporte un hash de 160 bits qu’un hash de 256 bits n’apporte pas ?
  3. Comment un hash de 20 octets peut-il être à la fois sûr et vulnérable ?

Explorer

  1. Dans Bitcoin, une clé publique brute fait 33 octets sous forme compressée. C’est trop long pour un usage efficace dans les transactions. Pour la raccourcir sans perdre son intégrité cryptographique, Bitcoin applique un processus en deux étapes : SHA-256 suivi de RIPEMD-160. Cette combinaison s’appelle HASH160 et produit une sortie de 160 bits (20 octets), suffisamment compacte pour l’encodage des adresses.
  2. RIPEMD-160, conçu en 1996 par Hans Dobbertin, Antoon Bosselaers et Bart Preneel, produit un résultat plus court que SHA-256 et a été développé dans le cadre d’un processus de conception académique ouvert. SHA-256 est d’abord appliqué à la clé publique (ou, pour P2SH, au script), puis RIPEMD-160 est appliqué au résultat obtenu avec SHA-256. Cette séquence permet un équilibre entre sécurité et efficacité, et elle est utilisée dans les formats Pay-to-PubKey-Hash (P2PKH), Pay-to-Script-Hash (P2SH) et Pay-to-Witness-PubKey-Hash (P2WPKH).
  3. L’utilisation de deux fonctions de hachage distinctes ajoute une couche de défense en profondeur. L’imbrication protège surtout contre les attaques par préimage, puisque trouver une clé correspondant à un hash donné exigerait de vaincre les deux fonctions ; elle ne protège pas contre les collisions, car toute collision SHA-256 est aussi une collision HASH160. Cependant, une sortie de 160 bits implique une résistance aux collisions d’environ 80 bits, ce qui est acceptable pour les sorties d’adresses à clé unique. Cela devient problématique dans les scripts partagés auxquels plusieurs parties contribuent, c’est pourquoi SegWit et Taproot utilisent des valeurs de 32 octets pour les scripts natifs.
  4. On affirme souvent que le hachage de la clé protège les fonds contre les futurs ordinateurs quantiques. Cette protection n’est que partielle. Une dépense révèle la clé publique : elle ne couvre donc que les sorties dont les clés n’ont jamais été dévoilées ; la réutilisation d’adresse la supprime ; et les sorties Taproot placent directement une clé publique sur la chaîne. Un ordinateur quantique suffisamment puissant menacerait toute clé exposée.
  5. Pour construire une adresse Bitcoin à partir d’une clé publique, on applique HASH160, puis on préfixe le résultat d’un identifiant de réseau (0x00 pour le P2PKH du mainnet), suivi d’un checksum de 4 octets dérivé d’un double SHA-256. Cette séquence de 25 octets est ensuite encodée en Base58 pour créer une adresse lisible par un humain. Cet encodage élimine les caractères ambigus et inclut un checksum pour détecter les erreurs de transcription.
  6. Pour le voir en pratique, ouvrez un explorateur de blocs et recherchez une transaction P2PKH. Repérez le champ scriptPubKey, qui doit contenir le hash de 20 octets. Comparez-le à la clé publique révélée lorsque la sortie a été dépensée. Vous verrez que la clé publique est plus longue, et que le hash est la version raccourcie et encodée utilisée dans l’adresse.

Faits clés

  • HASH160 est la combinaison de SHA-256 suivi de RIPEMD-160.
  • La sortie de HASH160 est de 160 bits (20 octets).
  • RIPEMD-160 a été conçu en 1996 par Hans Dobbertin, Antoon Bosselaers et Bart Preneel.
  • HASH160 est utilisé dans les scripts de sortie P2PKH, P2SH et P2WPKH.
  • Les sorties de hachage de 160 bits offrent une résistance aux collisions d’environ 80 bits.
  • Le hachage ne masque une clé publique que jusqu’à la dépense ; les sorties Taproot affichent directement une clé.

Exercice neuf, six, trois, un

9RassemblerListez 9 adresses Bitcoin. Notez le format (commençant par 1, 3, bc1q, bc1p, etc.) et leur longueur en caractères.
6RegrouperRegroupez les 9 adresses en 6 groupes selon leur type d’encodage et leur type de script (par exemple Base58, Bech32, SegWit, etc.).
3DistillerRéduisez les 6 groupes à 3 principes qui expliquent pourquoi Bitcoin utilise différents formats d’adresse.
1CristalliserÉcrivez une phrase expliquant pourquoi Bitcoin utilise deux fonctions de hachage pour créer une adresse.

Vérification des faits

Les dates, les chiffres et les affirmations ont été vérifiés à l’aide des sources publiées listées ci-dessous.

Ouvrir dans l'académie interactive →

EN PT ES ZH JA KO RU DE MS