Aller au contenu
buybitcoinsmart

Glossaire / Référence pour développeurs

OP_HASH160

Qu'est-ce qu'OP_HASH160 ?
OP_HASH160 applique SHA-256 à l'élément en haut de la pile, puis RIPEMD-160 à ce résultat, ce qui donne un condensé de 20 octets, la même empreinte présente dans toute adresse commençant par 1 ou 3.

Un octet, 0xa9, qui tient lieu de deux des fonctions de hachage les plus étudiées de la cryptographie. Leur combinaison réduit une sortie de 32 octets à 20 et protège contre une faiblesse de l'un ou l'autre algorithme, au prix d'environ 80 bits de résistance aux collisions au lieu de 128. C'est la raison pour laquelle une adresse bitcoin est assez courte pour être lue à voix haute au téléphone.

Comment cela fonctionne

OP_HASH160 retire un élément de n'importe quelle longueur et pousse exactement 20 octets, et la même entrée produit toujours le même condensé.

Les deux fonctions viennent de lignées de conception sans lien. RIPEMD-160 a été publié en 1996 par une équipe universitaire européenne travaillant ouvertement ; SHA-256 est issu de la NSA et a été normalisé par le NIST en 2001. Les enchaîner était un choix prudent. Une rupture structurelle de l'une laisserait l'autre entre l'attaquant et une falsification utile, et en trois décennies ni l'une ni l'autre n'a été cassée d'une manière qui menace cette construction.

La réduction de taille n'est pas cosmétique. Douze octets gagnés sur chaque sortie comptaient lorsque l'objectif était de garder petit un registre mondial permanent, et c'est pourquoi le script de verrouillage classique fait 25 octets plutôt que 37.

Vingt octets ont toutefois un plafond. Trouver deux entrées qui partagent un condensé de 160 bits demande de l'ordre de 2 puissance 80 opérations plutôt que 2 puissance 128, ce qui est confortable quand vous seul choisissez la clé hachée et beaucoup moins quand une contrepartie aide à choisir le script engagé. C'est exactement pour cette raison que le segregated witness a déplacé les engagements de script vers un SHA-256 de 32 octets dans P2WSH, tout en gardant la forme plus courte pour les sorties à clé unique.

Où le voit-on

OP_HASH160 vit dans deux modèles de script, et sa sortie se trouve dans presque toutes les adresses que vous avez copiées.

Les sorties héritées l'appliquent à une clé publique. Les sorties pay-to-script-hash l'appliquent à un script de rachat. Dans les deux cas, l'adresse que vous voyez est ce condensé de 20 octets précédé d'un octet de version, 0x00 pour les adresses commençant par 1 et 0x05 pour celles commençant par 3, le tout enveloppé dans une somme de contrôle Base58Check. Les sorties segwit natives à clé unique portent les mêmes 20 octets sans aucun opcode, car les règles de ce type de sortie sont intégrées au validateur plutôt qu'écrites en script.

Taproot a rompu l'habitude. Une sortie bc1p engage une clé publique de 32 octets sans étape de hachage intermédiaire, donc une adresse Taproot ne contient aucun hash160.

C'est aussi la raison pratique pour laquelle vérifier une adresse sur l'écran d'un portefeuille matériel fonctionne. Deux adresses qui diffèrent où que ce soit produisent deux condensés sans lien, donc une adresse substituée ne peut pas paraître presque juste ; comparer les premiers et derniers caractères sur l'appareil avec ce que votre ordinateur affiche suffit à repérer un logiciel malveillant de presse-papiers.

OP_HASH160 vs SHA-256

SHA-256 est une fonction de hachage ; OP_HASH160 est une instruction qui se trouve l'appeler une fois. La fonction apparaît partout dans bitcoin sans script ; la preuve de travail hache deux fois un en-tête de bloc avec elle, les identifiants de transaction sont une double application de celle-ci, et les arbres de Merkle sont construits avec elle. L'opcode n'existe que dans Bitcoin Script, ne s'exécute que pendant la dépense d'une sortie, et produit toujours 20 octets plutôt que 32. La composition qu'il effectue, RIPEMD-160 appliqué à SHA-256, est assez courante pour avoir son propre nom dans le code des portefeuilles, hash160, qu'il vaut la peine de reconnaître quand vous parcourez la liste des fonctions d'une bibliothèque.

À ne pas confondre avec

Questions fréquentes

Pourquoi le bitcoin hache-t-il deux fois avec deux algorithmes différents ?

Deux raisons. Le second hachage réduit le condensé de 32 octets à 20, ce qui raccourcit chaque adresse et chaque script de sortie, et l'usage de deux conceptions sans lien signifie qu'une rupture d'un seul algorithme ne suffirait pas à falsifier une correspondance.

Un hachage de 20 octets est-il encore sûr ?

Pour une adresse ordinaire à clé unique, oui. Le cas plus faible est un script où quelqu'un d'autre choisit une partie du contenu haché, et c'est pourquoi le segregated witness engage les scripts avec un SHA-256 complet de 32 octets.

À lire ensuite

Termes associés

Plus de termes : Référence pour développeurs

Lire cette page en anglais