Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
Digital-Signature-Forgery-Attack — 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 | Kitploit
Outils/GitHubGitHub/demining/digital-signature-forgery-attack
Analyse des VulnérabilitésExploitationCryptographieCTFApprentissage et ÉducationRessources Organisées
GitHubdemining/digital-signature-forgery-attack

Digital-Signature-Forgery-Attack

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

Voir le dépôtSite web
42il y a 1 anPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager
Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses 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.


  • Tutoriel : https://youtu.be/qbu1m_C1wyA
  • Tutoriel : https://cryptodeeptech.ru/digital-signature-forgery-attack
  • Tutoriel : https://dzen.ru/video/watch/68801dfc0c886621f7c1a0db
  • Google Colab : https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW

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.


Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX

https://youtu.be/qbu1m_C1wyA


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.


Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX
Bulletin de sécurité : Les opérandes d’IBM App Connect Enterprise Certified Container sont vulnérables au contournement de la validation de signature dans les données XML [CVE-2025-29774] [CVE-2025-29775]

  • IBM App Connect Enterprise Certified Container  est un logiciel d’intégration et de traitement de données qui utilise xml-crypto pour vérifier les signatures de documents XML. Les vulnérabilités permettent de contourner la vérification de signature numérique, ce qui conduit à la possibilité de falsifier et de modifier des messages signés, y compris les réponses SAML pour l’authentification et l’autorisation.
  • Les systèmes et applications qui utilisent Node.js avec la bibliothèque xml-crypto  pour vérifier les messages XML signés, en particulier dans le contexte de l’authentification SAML (par exemple, portails d’entreprise, systèmes d’authentification unique, services cloud). La vulnérabilité permet à un attaquant de modifier des messages XML signés valides pour qu’ils passent la vérification de signature, entraînant un contournement de l’authentification et de l’autorisation, une élévation de privilèges et une usurpation d’identité.

Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX
Divulgation pour CVE-2025-29774 et CVE-2025-29775 (SAMLStorm).

  • Les vulnérabilités sont liées à une vérification de signature cryptographique incorrecte dans xml-crypto , en particulier le traitement du nœud DigestValue, où un attaquant peut insérer des commentaires XML sans casser la vérification de signature.
  • Cela permet de modifier les attributs critiques d’identification et de contrôle d’accès dans les documents XML signés, permettant ainsi de contourner la sécurité sans nécessiter d’identifiants ou de droits d’accès.

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.


Vulnérabilité critique dans le code signature-algorithms.ts

Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX

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.


Fonctionnalités de base

  • Chaque classe implémente une interface  SignatureAlgorithm et fournit des méthodes pour :
    • Créer une signature  ( getSignature) : prend les données de signature et une clé privée, renvoie une signature numérique au format base64.
    • Vérifier la signature  ( verifySignature) : prend l’entrée, la clé publique et la signature, renvoie une valeur booléenne indiquant si la signature est correcte.
    • Obtenir le nom de l’algorithme  ( getAlgorithmName) : renvoie un URI identifiant l’algorithme de signature utilisé.

Algorithmes supportés

  • RsaSha1  – signature utilisant RSA et la fonction de hachage SHA-1.
  • RsaSha256  – signature utilisant RSA et SHA-256.
  • RsaSha512  – signature utilisant RSA et SHA-512.
  • HmacSha1  – signature utilisant HMAC basé sur SHA-1.

Détails techniques

  • Pour les signatures RSA, les classes  crypto.createSign et  crypto.createVerify sont utilisées avec les algorithmes correspondants (« RSA-SHA1 », « RSA-SHA256 », « RSA-SHA512 »).
  • Pour les signatures HMAC,  crypto.createHmac est utilisé avec l’algorithme « SHA1 ».
  • Les signatures sont encodées en base64 pour faciliter la transmission et le stockage.
  • Les méthodes sont encapsulées dans une fonction  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 :

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // Ligne vulnérable

Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX
signature-algorithms.ts#L7

Également la deuxième vulnérabilité se trouve dans la classe RsaSha1 :

root@kitploit:~
const verifier = crypto.createVerify("RSA-SHA1");  // Ligne vulnérable

Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX
signature-algorithms.ts#L17

Pourquoi cette attaque critique par collision permet-elle de créer des données différentes avec le même hachage ?

  1. Collisions SHA-1 : L’algorithme SHA-1 n’est plus considéré comme sécurisé.
  2. Contexte RSA : Combiné à RSA, cela peut conduire à des signatures falsifiées sur des données non fiables (par exemple, certificats ou documents).
  3. Recommandations : Le NIST et la communauté de la sécurité recommandent d’utiliser SHA-256/SHA-512 au lieu de SHA-1.

Remarques supplémentaires :

  • La classe (HMAC-SHA1) 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.
  • Le code contient des implémentations modernes (RsaSha256/RsaSha512) qui devraient être utilisées à la place de RsaSha1.

Attaque de falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec de fausses RawTX

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.


Mécanisme de l’attaque de falsification de signature numérique

1. Vulnérabilités dans les algorithmes RSA-SHA1

Dans le code fourni, les classes RsaSha1 utilisent l’algorithme obsolète RSA-SHA1 pour la signature et la vérification :

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // Ligne vulnérable n°7
const verifier = crypto.createVerify("RSA-SHA1");  // Ligne vulnérable n°17

SHA1 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 :

  • Lors de la création d’une signature, le document XML passe par une étape de canonicalisation (mise sous forme standard, par exemple, suppression des espaces et des commentaires).
  • Lors de la vérification d’une signature, la bibliothèque ne tient pas compte de la différence entre les versions canonicalisée et non canonicalisée d’un document . Cela permet à un attaquant de modifier le document (par exemple, ajouter des commentaires ou modifier la structure) sans casser la signature.

2. Exemple de fonctionnement

  1. Modification de SignedInfo :
    • L’attaquant ajoute des nœuds supplémentaires <SignedInfo> au document XML , ce qui entraîne un calcul de hachage incorrect lors de la vérification.
    xml<Signature> <SignedInfo>...</SignedInfo> <!-- Nœud original --> <SignedInfo>...</SignedInfo> <!-- Ajouté par un attaquant --> </Signature>
  2. Utilisation d’un algorithme faible :
    • L’algorithme SHA1 est vulnérable aux collisions, ce qui facilite la création de fausses signatures pour des documents modifiés.

3. Conséquences

  • Contournement de l’authentification : Modification des attributs dans les jetons SAML ou d’autres documents XML liés à l’accès.
  • Élévation de privilèges : Substitution d’un identifiant utilisateur par un administrateur dans le système d’autorisation.
  • Attaques de masse : La vulnérabilité peut être exploitée à distance sans interaction de l’utilisateur (CVSS 9.3).

Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

Détails techniques des vulnérabilités :

CVE-2025-29774

  • Problème : Validation insuffisante de la structure du document XML lors de la vérification de la signature.
  • Exploitation : Ajout de nœuds ou d'attributs supplémentaires à la partie signée du document.

CVE-2025-29775

  • Problème : Utilisation incorrecte du contexte de canonisation lors du calcul d'un hachage.
  • Exploitation : Modification d'un document sous forme non canonisée après la signature.

Recommandations pour le dépannage

  1. Mise à jour de la bibliothèque :
    • Pour les versions 2.x → 2.1.6, 3.x → 3.2.1, 6.x → 6.0.1.
  2. Remplacement d'algorithme : typescript // Usage SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");
  3. Validation de la structure XML :
    • Vérifier qu'il y a exactement un nœud <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).


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

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 :

  • Les logiciels et services qui utilisent xml-crypto pour les signatures XML , y compris les plateformes d'intégration d'entreprise et les intergiciels (comme IBM App Connect Enterprise, où ces vulnérabilités ont été signalées).
  • Les appareils et systèmes qui utilisent les signatures XML pour l'authentification et l'autorisation, y compris les serveurs et passerelles prenant en charge SAML.

  • Les vulnérabilités CVE-2025-29774 et CVE-2025-29775 affectent principalement les composants logiciels et plateformes qui utilisent la bibliothèque xml-crypto pour traiter les signatures XML.
  • Les victimes connues incluent IBM App Connect Enterprise et probablement d'autres solutions d'entreprise basées sur Node.js utilisant xml-crypto .
  • Il n'existe actuellement aucune donnée publique sur des marques spécifiques d'appareils matériels affectés par ces attaques.

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.


Partie pratique

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


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf

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.


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX
Transaction brute

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.

Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

Google Colab

Débogage de clé privée : génération incorrecte de clés privées, vulnérabilités système et erreurs dans le calcul de l'ordre de la courbe elliptique secp256k1 menaçant l'écosystème Bitcoin

https://colab.research.google.com/drive/1TKrJ0bKsNgc72H9UvzpCnh2YPmRsyPdW


1. Téléchargement et installation de l'outil Dark AI

Description détaillée de toutes les commandes terminal et actions

Commandes :

root@kitploit:~
!wget https://darkai.ru/repositories/neuralnet_tools.zip
  • wget— un utilitaire en ligne de commande pour télécharger des fichiers depuis le réseau via les protocoles HTTP, HTTPS et FTP.
  • Nous téléchargeons  l'archive en spécifiant l'URL .neuralnet_tools.zip
  • unzip— commande pour extraire les archives ZIP dans le répertoire courant.

Cette commande extrait tous les fichiers de neuralnet_tools.zip

root@kitploit:~
!unzip neuralnet_tools.zip

Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

Exécutons la commande ls pour un affichage rapide et facile

ls


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

2. Lancement de l'outil Dark AI

root@kitploit:~
!./darkai
Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

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.

root@kitploit:~
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe

En résultat, deux objets UTXO ont été renvoyés :

root@kitploit:~
[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]

Chaque UTXO contient :

  • output — identifiant de sortie. Format : <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.
  • value — montant en satoshis (1 bitcoin = 100 000 000 satoshis).

Décodage des données :

  1. Premier UTXO
    • Sortie : 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0
    • Montant : 677 200 satoshis
  2. Deuxième UTXO
    • Sortie : bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0
    • Montant : 5 000 000 satoshis

Solde total

Le solde total disponible d'une adresse est égal à la somme de tous les UTXO trouvés :

  • 677 200 + 5 000 000 = 5 677 200 satoshis
  • En bitcoins : 5 677 200 / 100 000 000 = 0,05677200 BTC
Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

Interprétation technique avec Dark AI

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).

  • Envoi de fonds : Tous les UTXO spécifiés peuvent être utilisés comme entrées lors de la formation d'une nouvelle transaction, ce qui permettra de dépenser tout ou partie du solde.
  • Transparence : Ce rapport confirme que l'adresse contient des fonds Bitcoin réels et peut être utilisée pour vérifier l'authenticité et la solvabilité.

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.


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les portefeuilles multisignatures - Méthodes d'exploitation avec de fausses RawTX

Désérialisation de la transaction Bitcoin

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 unique 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd


root@kitploit:~
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd

Nous obtenons la structure de la réponse du résultat de désérialisation :

root@kitploit:~
{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}
  • value : 677200 — le montant de cette sortie est exprimé en satoshi (1 BTC = 100 000 000 satoshi).
  • script : a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — un script qui définit les conditions pour dépenser cette sortie.

Explication détaillée des éléments : Champ Value

  • Value : 677 200 satoshi.
  • Ce montant peut être dépensé lors de la création de la transaction correspondante si les conditions du script sont remplies.
  • Équivalent : 677 200 / 100 000 000 = 0,00677200 BTC.
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Explication détaillée des éléments : Champ Script

  • Signification du script : a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287
  • Il s'agit d'un script de type « scriptPubKey » – une partie de la structure de sortie de la transaction qui spécifie qui peut dépenser ces fonds. Le but le plus important est d'assurer la sécurité et le contrôle de la disposition des fonds.

Décodage du script

  • Le script commence par un préfixe a914...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é)
  • Cela signifie que le destinataire peut dépenser les fonds s'il fournit un script dont le hachage correspond à la valeur fournie et s'il fournit des signatures valides pour ce script.

Signification pratique du résultat

  • Cette sortie de la transaction spécifiée contient 677 200 satoshi (0,00677200 BTC), qui sont protégés par un script de type P2SH.
  • Pour dépenser les fonds d'une telle sortie, il faudra connaître le script original et présenter les signatures correctes – une situation typique pour les portefeuilles multi-signatures, les contrats intelligents et autres schémas de sécurité avancés.
  • Cette information est importante pour analyser la structure de la transaction, vérifier la destination des fonds et comprendre les exigences pour leur utilisation ultérieure.

Désérialiser une transaction par identifiant

À 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é.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Désérialisation de la deuxième transaction Bitcoin

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 unique bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786

root@kitploit:~
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786

En 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'identifiant
bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.



Résultat :

root@kitploit:~
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}

1. Explication détaillée des éléments :  Champ Value

  • Contenu : 5000000
  • Cette valeur est exprimée en satoshi, la plus petite unité indivisible du bitcoin ; 1 BTC = 100 000 000 satoshi.
  • Objectif :
    Ce montant est associé à une sortie de transaction spécifique indiquée dans les éléments du tableau 'outs'. Il ne peut être dépensé que si les conditions écrites dans le script défini dans le champ 'script' sont remplies.
  • Conversion en Bitcoin : 5 000 000 satoshi = 0,05 BTC
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

2. Explication détaillée des éléments :  Champ Script

  • Contenu : 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
  • C'est ce qu'on appelle le script de verrouillage ou, autrement, scriptPubKey – un script qui spécifie les conditions dans lesquelles cette sortie peut être dépensée.

Décodage du script

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.


3. La signification pratique du résultat, la taille et le but des fonds.

  1. La transaction en question (avec le hachage bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786 ) a une sortie dans laquelle 0,05 BTC (5 000 000 satoshis) sont « verrouillés » dans l'adresse P2SH correspondant au hachage06612b7cb2027e80ec340f9e02ffe4a9a59ba762
  2. Conditions de dépense :
    Pour dépenser ces fonds, lors de la formation d'une transaction de dépense, il est nécessaire de présenter non seulement une signature standard, comme dans un transfert direct, mais aussi le script lui-même, dont le hachage est intégré dans cette sortie, plus des données (par exemple, un ensemble de signatures numériques) qui correspondent aux conditions du script.
  3. Sécurité et flexibilité :
    Cette méthode permet de mettre en œuvre une logique plus complexe que l'envoi direct à une adresse Bitcoin ordinaire.

4. Enregistrement de la sortie au niveau de compatibilité avec divers services et portefeuilles qui supportent P2SH.

  • Identifiant de transaction
    bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
    contient une sortie dans laquelle
    0,05 BTC (5 000 000 satoshi)
    est sécurisé vers un script P2SH (Pay-to-Script-Hash) avec un hachage de
    06612b7cb2027e80ec340f9e02ffe4a9a59ba762 .
  • Pour dépenser ces fonds, vous devez révéler le script original et remplir ses conditions (par exemple, présenter toutes les signatures dans une multi-signature).

Ainsi, 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.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Script de verrouillage P2SH (Pay-to-Script-Hash) dans le réseau Bitcoin. Que signifie ce script ?

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.


Pourquoi celui-ci a-t-il été choisi en particulier ?

  • Commodité et sécurité : P2SH permet de cacher une logique complexe de gestion des fonds (telle que les multi-signatures ou les paiements conditionnels) dans un hachage, simplifiant l'interface pour l'expéditeur et le destinataire.
  • Standard de l'industrie : P2SH est devenu un standard largement accepté car il simplifie la configuration de schémas de sécurité complexes et est compatible avec la plupart des portefeuilles et services.
  • Compacité : Le bloc stocke uniquement le hachage d'un script complexe, et non le script entier – cela économise de l'espace et augmente l'efficacité.
  • Flexibilité : Le propriétaire des fonds peut créer des conditions arbitraires pour la dépense – comme exiger plusieurs signatures, des délais temporels, ou d'autres règles – et le hachage de ces conditions est stocké ici.

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 hachage 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 et 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 hachage 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 dans 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.


Pourquoi ce hachage et pas un autre ?

  1. Un hachage est une empreinte numérique d'un script qui spécifie les règles de dépense.
    Lors de la création d'une adresse ou d'une sortie P2SH, le script (les conditions de dépense du Bitcoin) est d'abord écrit explicitement, puis deux algorithmes de hachage sont appliqués :
    • SHA-256 du script,
    • Puis RIPEMD-160 du résultat SHA-256.
      Le hachage résultant de 20 octets est 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Ce hachage identifie de manière unique le scénario exact pour lequel il a été généré.
  2. Unicité et immutabilité
    Les fonctions de hachage cryptographique possèdent une propriété d'« effet d'avalanche », par laquelle même un changement minime du script original produira un hachage complètement différent. Par conséquent, ce hachage est unique et infalsifiable dans le contexte du script original.
  3. Le but de l'utilisation d'un hachage est d'assurer compacité et sécurité.
    Au lieu de stocker le script complet dans chaque sortie, qui peut être complexe et prendre beaucoup de place, seul son hachage est stocké dans le bloc. Cela économise de l'espace et augmente la confidentialité – le script lui-même n'est révélé qu'au moment de la dépense des fonds et seulement à ceux qui remplissent les conditions.
  4. La sélection du hachage est le résultat d'un script spécifique défini par le créateur de l'adresse ou du portefeuille.
    Le développeur ou le propriétaire des fonds crée un script avec les conditions souhaitées (par exemple, multi-signature, délai temporel, autres conditions logiques). Le script attribué est haché et ce hachage est lié à la sortie de la transaction. Ainsi, il n'y a pas de sélection arbitraire de hachage – elle est déterminée par le contenu du script original et l'algorithme cryptographique.

  • Ce hachage est strictement lié à un script spécifique que le propriétaire de l'adresse a installé pour protéger ses fonds.
  • Il a été généré à l'aide de fonctions de hachage cryptographique ( 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.
  • Ce hachage est le reflet de la combinaison unique des conditions de dépense, et c'est pourquoi il s'est retrouvé dans le script de sortie de la transaction.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287

Ainsi, 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.


Mécanisme P2SH : Signification, Principe de Fonctionnement et Sécurité dans le Réseau Bitcoin

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.


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bug SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec des RawTX falsifiés


Comment fonctionne la structure du script de sortie P2SH ?

Examinons le script spécifié suite à la désérialisation :

root@kitploit:~
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUAL

Ce 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.

  • OP_HASH160 – hache les données (ici redeemScript) d'abord avec l'algorithme SHA-256, puis avec RIPEMD-160.
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — hachage de 20 octets du redeemScript.
  • OP_EQUAL – vérifie si le redeemScript fourni est égal à ce hachage.

Le processus de dépense des fonds via une sortie P2SH

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 :

  1. Serialized redeemScript – le script original dont les conditions sont encodées dans un hachage.
  2. Données de déverrouillage – signatures ou autres preuves qui satisfont aux conditions du redeemScript.

Lors du traitement d'une transaction, les nœuds du réseau :

  • Hachent le redeemScript et le comparent avec le hachage spécifié dans la sortie.
  • Si les hachages correspondent (c'est-à-dire que OP_EQUAL renvoie vrai), alors redeemScript est désérialisé et exécuté.
  • Une transaction est considérée comme valide si le redeemScript est exécuté correctement, c'est-à-dire que toutes les conditions de dépense sont remplies.

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.


Les avantages et l'importance du choix d'un tel mécanisme

1. Flexibilité et scénarios complexes

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.


2. Économie d'espace

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.


3. Sécurité accrue

É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.


4. Commodité pour les utilisateurs et les programmeurs

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.


Exemple d'utilisation : les portefeuilles multi-signatures

Un exemple classique est un portefeuille qui nécessite les signatures de deux des cinq participants pour effectuer une transaction. Avec P2SH :

  • La sortie contient le hachage du script correspondant.
  • Pour dépenser les fonds, vous devez transmettre le script d'activation multi-signature complet dans scriptSig avec les signatures.
  • Le réseau vérifie la cohérence des hachages et la validité des signatures.

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 :

  • Sécurité (protection des fonds grâce à des conditions strictes et à la cryptographie),
  • Efficacité (stockage uniquement du hachage, pas de tous les détails),
  • Flexibilité (support de toutes les conditions de dépense, même complexes),
  • Commodité (format d'adresse simple et standard d'accès).

Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bug SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec des RawTX falsifiés


Cryptanalyse de l'extraction de la première entrée de transaction ( 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.

root@kitploit:~
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132

Le résultat de l'extraction de la première entrée de la transaction ( ins) est présenté comme suit :

root@kitploit:~
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}

1. Analyse détaillée des composants de ScriptSig ( script)

  • La valeur du champ scriptest le scriptSig , qui est utilisé pour déverrouiller la sortie de transaction précédente correspondante.
  • Le contenu est une longue séquence d'octets en format hexadécimal.
  • Dans ce cas, il s'agit d'un script à cinq composants, qui comprend :
    • Signatures numériques standard selon le protocole ECDSA, généralement pour confirmer la propriété d'une clé privée.
    • Clés publiques nécessaires pour vérifier la signature.
    • Il peut y avoir une structure indiquant des opérations multi-signatures (plusieurs clés publiques et signatures).

Analyse de la structure du script :

  • Commence par 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).
  • Viennent ensuite les signatures au format DER (par exemple 3045...), qui consistent généralement en une série d'octets contenant les détails de la signature.
  • Les signatures sont suivies des clés publiques (en longueur et structure, très probablement dans un format compressé, puisqu'elles font environ 33 octets), qui confirment que les signatures appartiennent aux bons propriétaires.
  • En général, le format du script correspond à redeemScript ou à la construction typique des transactions multi-signatures P2SH.

2. Outpoint (outpoint)

  • Contient des données sur la sortie précédente utilisée dans cette entrée :
    • '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.
  • Ainsi, l'entrée référence une sortie spécifique d'une transaction précédente, prouvant que l'auteur de la transaction a le droit de la dépenser.

3. Sequence (sequence)

  • La valeur 4294967295 (0xFFFFFFFF)est un nombre maximal de 32 bits.
  • Dans Bitcoin, ce champ sert à indiquer que l'entrée ne participe pas au mécanisme Replace-By-Fee (RBF) ou n'a pas de verrou temporel/Relative Timelock.
  • Souvent utilisé par défaut pour les entrées fixes.

L'importance de scriptSig dans un contexte de sécurité

  • ScriptSig est les données pour déverrouiller les fonds qui sont protégées par le script de verrouillage de la sortie précédente.
  • Dans le cas des transactions P2SH (souvent pour multi-signature), scriptSig contient :
    • Les signatures des participants confirmant le droit de dépenser les fonds.
    • Le redeemScript original, dont le hachage est spécifié dans le script de verrouillage de la sortie précédente.
  • Une vérification réussie de scriptSig garantit que l'auteur de la transaction possède effectivement l'autorité nécessaire pour disposer des fonds.

La cryptanalyse de l'extraction de la première entrée de transaction ( ins) avec le hachage de transaction donné a montré que :


  • L'entrée de la première transaction contient un script de déverrouillage complexe, comprenant des signatures numériques et des clés publiques.
  • Une référence à une sortie spécifique d'une autre transaction est utilisée ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.
  • La valeur de séquence maximale indique l'absence de verrous spéciaux ou de RBF.
  • Il s'agit probablement d'une transaction multi-signature P2SH, où plusieurs signatures sont nécessaires pour confirmer la dépense des fonds.

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.


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bug SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec des RawTX falsifiés

Analyse détaillée du résultat de l'extraction de la deuxième sortie ( outs)

Exécutons la commande pour obtenir des informations sur l'une des sorties de la transaction avec l'identifiant ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.

root@kitploit:~
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577

outs Plus précisément, la deuxième sortie ( ) de cette transaction, l'élément avec l'index 1, a été extraite .


Le résultat obtenu :

root@kitploit:~
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}

1. Analyse détaillée des données reçues du champ value

  • Taille : 350 000 satoshis.
  • Ce montant de fonds se trouve dans la deuxième sortie de la transaction spécifiée et peut être dépensé si les conditions spécifiées dans le script correspondant sont remplies.
  • Conversion en BTC : 350 000 satoshis = 0,0035 BTC
Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bug SIGHASH_SINGLE menacent les méthodes de fonctionnement des portefeuilles multi-signatures avec des RawTX falsifiés

2. Valeur du champ script

  • Caractéristique :
    Le script a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287est un script de verrouillage classique (scriptPubKey) du format P2SH (Pay-to-Script-Hash) .
  • Transcription du script :
    • 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.


Le sens et le rôle du redeem script dans le contexte du P2SH

  • Le redeem script est un script original qui définit les conditions de dépense des fonds, par exemple, multi-signature, un scénario complexe avec une limite de temps, etc.
  • Les sorties de transaction ne stockent que le hash du redeem script, économisant de l'espace et protégeant les détails des conditions.
  • Pour utiliser les fonds investis dans cette sortie, lors de la création d'une nouvelle transaction, l'utilisateur doit fournir dans scriptSig un redeem script sérialisé qui est correctement décodé et vérifié par le réseau.

Signification globale du résultat

  • L'ID de transaction ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577est associé à une sortie qui contient 0,0035 BTC.
  • Ces fonds sont liés à une adresse P2SH contrôlée par un script avec un hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
  • Afin de dépenser ces fonds, vous devez présenter un redeem script correspondant à ce hash et remplir les conditions qui y sont énoncées.

Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

L'importance des informations obtenues dans un contexte plus large

  • Ce résultat nous permet de confirmer que les fonds se trouvent bien sur la sortie avec les conditions Pay-to-Script-Hash.
  • Comprendre la structure de telles sorties est important pour l'analyse de sécurité, le développement de scénarios d'allocation complexes et la vérification des conditions de dépense.
  • L'utilisation de P2SH fournit un mécanisme sécurisé et efficace pour gérer les fonds dans le réseau Bitcoin, permettant la création de contrats intelligents et de portefeuilles sécurisés.

Les informations reçues confirment que le deuxième enregistrement de sortie de transaction ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 stocke le montant de 0,0035 BTC, contrôlé par un script P2SH standard avec une valeur hash160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. 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.


Confirmons le déchiffrement de scriptSig :

root@kitploit:~
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae

Exé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.


Exécutons la commande :

root@kitploit:~
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae

Processus de traitement :

  1. La chaîne originale, représentée au format hexadécimal, est convertie en une séquence d'octets (décodée du format hexadécimal au format binaire). Cette séquence est un script sérialisé (redeem script) ou une structure similaire d'un script bitcoin.
  2. Les octets reçus sont hachés à l'aide de l'algorithme SHA-256 (hachage unique), dont le résultat est ensuite traité par la fonction cryptographique RIPEMD-160.
  3. Le hachage RIPEMD-160 résultant des données binaires SHA-256 est obtenu sous forme de chaîne :
root@kitploit:~
06612b7cb2027e80ec340f9e02ffe4a9a59ba762

Ce 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.


Signification et contexte du résultat

  • Le processus de hachage RIPEMD-160(SHA-256(data)) , connu sous le nom de HASH160, est la norme pour créer des adresses et des scripts dans Bitcoin, y compris P2SH (Pay-to-Script-Hash). HASH160 fournit un identifiant unique et compact qui économise de l'espace sur la blockchain.
  • L'utilisation du double hachage (SHA-256, puis RIPEMD-160) combine les propriétés cryptographiques solides des deux fonctions : résistance aux collisions, sens unique et résistance aux attaques.
  • Le hachage résultant correspond au hachage du script du redeem script – c'est-à-dire le script qui contrôle l'accès aux fonds verrouillés à l'adresse P2SH.
  • En particulier, ce HASH160 apparaît dans le script de verrouillage (scriptPubKey) des sorties de transactions spécifiques, ce qui nécessite que le redeem script original lui-même avec le même hachage et les signatures correctes soit fourni lors de la dépense.

Détails techniques et explications

  • Bitcoin a un concept de double hachage SHA-256 et RIPEMD-160 pour protéger les adresses et les scripts.
  • L'utilisation de HASH160 au lieu d'une simple sortie SHA-256 de 256 bits réduit la longueur du hachage de 32 octets à 20 octets, ce qui réduit le stockage et la taille des données sur le réseau.
  • HASH160 est utilisé pour générer principalement des adresses P2SH et des adresses P2PKH héritées.

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 :

root@kitploit:~
{'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.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Pourquoi Satoshi a choisi le double SHA-256 et comment cela affecte la force cryptographique

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.

Raisons du choix du double SHA-256

  1. Amélioration de la résistance à diverses attaques
    Une seule application de SHA-256 a déjà une haute résistance cryptographique, est résistante aux collisions et aux préimages. Cependant, la double application de la fonction de hachage – d'abord SHA-256 aux données originales, puis SHA-256 au résultat – complique davantage l'analyse et les attaques sur le hachage.
    Cela réduit la probabilité de sélectionner avec succès une collision ou une récupération inverse des données originales, rend plus laborieuse la sélection de diverses options et protège contre les faiblesses possibles dans des implémentations spécifiques de l'algorithme.
  2. Protection contre les problèmes de longueur des données d'entrée
    Le double SHA-256 fournit une couche supplémentaire de sécurité préventive en prenant en compte le comportement de la construction interne du hachage et le traitement des bits de remplissage dans le balisage des données. Cela minimise les attaques potentielles liées au formatage des données.
  3. Suivi des bonnes pratiques cryptographiques
    Le double hachage est une technique de sécurité bien établie dans un certain nombre de protocoles cryptographiques. Par exemple, les sommes de contrôle et les signatures numériques utilisent le double chiffrement ou le double hachage. Cela augmente la solidité de la chaîne de sécurité.
  4. Sécurité éprouvée et large support
    SHA-256 est un membre de la famille SHA-2 développée par la National Security Agency (NSA) des États-Unis et publiée par le National Institute of Standards and Technology (NIST). Cet algorithme est considéré comme l'un des plus sécurisés aujourd'hui, et son double usage offre une sécurité maximale.

Comment cela affecte-t-il la force cryptographique ?

  • Résistance aux collisions et aux préimages
    Chacun des tours de SHA-256 est hautement résistant aux collisions – il est extrêmement difficile de trouver deux entrées avec le même hachage. Le double hachage renforce cette garantie car un attaquant doit trouver une collision pour deux SHA-256 consécutifs, ce qui augmente considérablement la complexité computationnelle.
  • Fonction à sens unique avec effet avalanche
    La double application renforce « l'effet avalanche », où le moindre changement dans les données d'entrée provoque un changement radical dans le hachage de sortie, rendant difficile la détection de motifs et la rétro-ingénierie.
  • Résistance renforcée à la cryptanalyse
    Le double SHA-256 protège contre les faiblesses potentielles d'implémentation ou les vulnérabilités inattendues qui pourraient être découvertes dans une seule itération, minimisant le risque d'attaques utilisant des outils de calcul quantique ou classique.
  • Applicabilité au Proof-of-Work et à la sécurité de la blockchain
    Le mécanisme PoW dans Bitcoin repose sur le calcul de hachages de blocs qui doivent satisfaire une certaine difficulté. Le double hachage crée une barrière supplémentaire à la contrefaçon de blocs, augmentant la fiabilité et la confiance dans la blockchain 5 .

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é.


Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallet Operational Methods with Fake RawTX


Multi-signature dans Bitcoin : le rôle de redeemScript et de l'instruction OP_CHECKMULTISIG

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.

Qu'est-ce que redeemScript ?

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.


Comment fonctionne OP_CHECKMULTISIG ?

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 .

  • L'instruction reçoit deux groupes de données de la pile en entrée :
    • N clés publiques (par exemple trois clés publiques)
    • M signatures (par exemple deux signatures), où M ≤ N est le seuil requis de signatures pour confirmer la transaction.
  • Pour valider une transaction, OP_CHECKMULTISIG vérifie que chacune des M signatures est correctement signée par l'une des N clés publiques.
  • Si toutes les signatures sont valides et correspondent aux clés dans le redeemScript, l'instruction retourne true , permettant de dépenser les fonds.

Caractéristiques et bug avec la suppression d'un élément de la pile

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.


  • Ensuite, nous examinerons l'implémentation de OP_CHECKMULTISIG , qui supprime un élément supplémentaire de la pile. En utilisant ce bug, l'attaquant compense OP_CHECKMULTISIG en tant que vulnérabilité potentielle.
  • Ainsi, la structure scriptSig pour la multi-signature ressemble à quelque chose comme : où le premier élément du script est un factice .OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSE

Exemple pratique : multi-signature 2 sur 3

Basé sur le code redeemScript :

root@kitploit:~
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
  • Il y a 3 clés publiques déclarées ici .
  • Le seuil est de 2 signatures sur ces trois nécessaires pour une vérification réussie.
  • L'opération 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.

L'importance et les avantages des portefeuilles multi-signature

  • Sécurité accrue. Le propriétaire du portefeuille peut répartir le contrôle des fonds entre plusieurs personnes ou appareils, éliminant la possibilité d'une seule dépense non autorisée.
  • Flexibilité. Divers schémas peuvent être implémentés, par exemple « 2 sur 3 », « 3 sur 5 », avec différentes conditions.
  • Efficacité légale : Les multi-signatures sont souvent utilisées dans les environnements d'entreprise pour assurer une gestion partagée des actifs.

Contexte technique et pratique

  • Les scénarios multi-signature sont largement utilisés dans les transactions P2SH et SegWit.
  • L'instruction OP_CHECKMULTISIG est l'une des opérations les plus gourmandes en ressources de la blockchain, car elle nécessite de vérifier plusieurs signatures. Il existe une limite au niveau du protocole sur le nombre d'opérations de signal (sigops) par bloc.
  • Malgré l'historique avec 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.


Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes opérationnelles des portefeuilles multi-signatures avec des RawTX falsifiés

Comment fonctionne le mécanisme de vérification multi-signature Bitcoin avec OP_CHECKMULTISIG et redeemScript

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.

Bases du mécanisme multi-signature

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 :

  • redeemScript — un script qui décrit les conditions de dépense des fonds. Il contient une liste de clés publiques et un paramètre de seuil (m).
  • scriptSig — le script de déverrouillage, qui inclut les signatures nécessaires à la vérification, ainsi que le redeemScript lui-même.

Comment fonctionne redeemScript

L'instruction OP_CHECKMULTISIG vérifie que les signatures scriptSig fournies sont valides et correspondent aux clés publiques publiées depuis redeemScript.

RedeemScript est structuré de la manière suivante :

root@kitploit:~
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIG
  • OP_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.

  • Il prend en entrée plusieurs signatures et un ensemble de clés publiques.
  • Pour une vérification réussie, chaque signature doit correspondre correctement à l'une des clés publiques spécifiées.
  • L'opération retourne vrai si le nombre de signatures valides atteint le seuil m.

Une caractéristique technique importante est un bogue historique d'implémentation OP_CHECKMULTISIG qui provoque le retrait d'un élément supplémentaire inutilisé de la pile. Pour compenser ce bogue, scriptSig une valeur OP_FALSE (code 0) est placée au début afin de « verrouiller » le décalage de la pile.


Comment fonctionne la structure scriptSig

Pour un portefeuille multi-signature « 2 sur 3 », avant de dépenser des fonds, on forme scriptSig comme suit :

root@kitploit:~
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 :

  1. Extrait le redeemScript depuis scriptSig.
  2. Le hache et le compare au hachage stocké dans le script de verrouillage (scriptPubKey) de la sortie précédente (format P2SH – OP_HASH160 <hachage_redeemScript> OP_EQUAL).
  3. Si les hachages correspondent, désérialise le redeemScript.
  4. Exécute l'instruction OP_CHECKMULTISIG, en comparant les signatures et les clés pour une correspondance.
  5. Retourne vrai si les vérifications sont réussies.

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.


Mécanisme multi-signature via redeemScript et OP_CHECKMULTISIG

  • Sécurité renforcée : Plusieurs détenteurs de clés privées doivent être d'accord pour effectuer une transaction, réduisant le risque de vol si une clé est compromise.
  • Flexibilité et évolutivité : Vous pouvez définir un seuil arbitraire de signatures (de 1 à 15), ainsi qu'une liste de participants – de 2 à 15 clés publiques.
  • Gestion collective des actifs : Adapté aux comptes d'entreprise, portefeuilles conjoints, DAO, permettant un contrôle d'accès robuste.
  • Transparence et vérifiabilité : Toutes les données et conditions nécessaires sont dans la blockchain, et la vérification des transactions est automatique, décentralisée et transparente.

Le mécanisme de vérification multi-signature Bitcoin utilisant la commande OP_CHECKMULTISIG et 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 :

  1. Le seuil de vérification des signatures
    OP_CHECKMULTISIG permet de spécifier le nombre de signatures requises T sur le nombre total de clés publiques N (le schéma « T sur N »). Par exemple, 2 sur 3. Pour qu'une transaction soit valide, il suffit d'avoir T signatures valides.
  2. Vérifier plusieurs signatures en une seule opération
    Contrairement à la vérification de signature unique (OP_CHECKSIG), OP_CHECKMULTISIG vérifie plusieurs signatures à la fois, en les corrélant avec les clés publiques correspondantes, ce qui augmente l'efficacité et la commodité de mise en œuvre des portefeuilles multi-signatures.
  3. Utilisation de redeemScript pour une condition de dépense
    Dans le format P2SH, le schéma multi-signature est caché sous le hachage redeemScript – un script complet avec les clés publiques et les paramètres. Pour dépenser les fonds, l'utilisateur doit présenter le redeemScript et les signatures correspondantes.
  4. Bogue historique – élément supplémentaire dans la pile
    OP_CHECKMULTISIG a la particularité de retirer un élément supplémentaire inutilisé de la pile lors de l'exécution (un bogue d'implémentation « off-by-one »). Pour compenser, un élément factice 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é.

Limitations d'OP_CHECKMULTISIG

  1. Nombre maximum de clés et signatures
    Bitcoin a une limite de 15 clés publiques et, par conséquent, 15 signatures dans un redeemScript. Cela est dû à la limite de taille du script (~520 octets) et au nombre d'opérations autorisées pour la vérification par bloc (limite sigops).
  2. Taille de transaction augmentée et frais
    Les transactions multi-signatures sont plus volumineuses en raison du grand nombre de clés publiques, de signatures et de données redeemScript supplémentaires. Cela augmente la taille de la transaction elle-même et, par conséquent, les frais de traitement.
  3. Limites de taille des scripts
    La taille maximale de chaque script (entrée ou sortie) est limitée à 520 octets. Avec un grand nombre de clés, le redeemScript devient encombrant, ce qui affecte la commodité et l'efficacité de l'utilisation de la multi-signature.
  4. Masquage des conditions de dépense uniquement avec P2SH
    Si P2SH n'est pas utilisé, le script correct avec les clés publiques et OP_CHECKMULTISIG est stocké ouvertement dans les sorties de transaction, ce qui révèle les clés publiques à l'avance, réduisant la confidentialité.
  5. Absence de support natif pour la logique complexe
    Bitcoin Script est incomplet et limité en capacités, il n'y a ni boucles ni récursion, ce qui limite la mise en œuvre de conditions politiques ou contractuelles complexes pour les multi-signatures.

Attaque par falsification de signature numérique : comment les vulnérabilités CVE-2025-29774 et le bogue SIGHASH_SINGLE menacent les méthodes opérationnelles des portefeuilles multi-signatures avec des RawTX falsifiés


Types de signatures dans Bitcoin : caractéristiques et rôle des indicateurs SIGHASH

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.


Les trois principaux types de SIGHASH

1. SIGHASH_ALL (0x01)

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 :

  • Le signataire confirme cette combinaison particulière de sources et de destinataires.
  • Toute modification des entrées ou sorties après la signature invalide la signature.
  • Offre le plus haut niveau de sécurité et de prévisibilité de la transaction.

2. SIGHASH_NONE (0x02)

Avec ce type de signature, toutes les entrées sont signées, mais aucune des sorties n'est signée :

  • Le signataire accepte d'utiliser les entrées listées, mais ne s'engage pas sur des sorties spécifiques.
  • Cela permet de modifier les sorties d'une transaction sans avoir à resigner les entrées.
  • Cette approche n'est pas sécurisée pour des entrées uniques et est plus souvent utilisée dans des scénarios spécifiques, comme les contrats intelligents complexes ou les transactions coopératives.

3. SIGHASH_SINGLE (0x03)

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 :

  • C'est-à-dire que la signature est limitée à la paire « entrée N – sortie N ».
  • Permet au signataire de contrôler une paire entrée-sortie spécifique tout en ignorant le reste.
  • Aide à créer des dispositions partielles ou conditionnelles des fonds.
  • Cependant, il peut y avoir un problème s'il n'y a pas de sortie avec l'index de l'entrée – dans ce cas, un hachage avec une valeur de un est retourné (ce qui est un bogue connu décrit ci-dessous).

Exemple d'une transaction réelle

Considérons une transaction avec trois entrées, où des signatures se terminant par un octet 0x03 pointant 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.


Attaque par falsification de signature numérique : diverses méthodes d'évaluation des vulnérabilités sont utilisées pour prévenir les incidents cryptographiques et améliorer la cybersécurité des plateformes de cryptomonnaies

791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf


Attaque par falsification de signature numérique : diverses méthodes d'évaluation des vulnérabilités sont utilisées pour prévenir les incidents cryptographiques et améliorer la cybersécurité des plateformes de cryptomonnaies

Transaction brute


Que se passe-t-il s'il n'y a pas de sortie en dessous de l'index d'entrée ?

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é.

Indicateurs supplémentaires et modificateurs

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.


Signification pratique et application

  • SIGHASH_ALL fournit la confirmation la plus complète d'une transaction et est utilisé dans les portefeuilles standard.
  • SIGHASH_NONE et SIGHASH_SINGLE permettent des signatures plus flexibles et partielles utilisées dans des scénarios complexes : multi-signatures, contrats intelligents, transactions de confiance.
  • Comprendre ces types est essentiel pour les développeurs et analystes créant des transactions personnalisées ou enquêtant sur des bogues/vulnérabilités.

Les types SIGHASH sont Bitcoin un 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 avec SIGHASH_SINGLE sans 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é.


Comment les différences entre SIGHASH_ALL, NONE et SINGLE affectent-elles la sécurité des transactions Bitcoin ?

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.


1. SIGHASH_ALL – sécurité maximale

  • Description : La signature couvre toutes les entrées et toutes les sorties d’une transaction.
  • Impact sur la sécurité :
    • Garantit qu’aucune entrée ou sortie ne peut être modifiée après la signature.
    • Élimine la possibilité de substituer le destinataire ou le montant du paiement.

    • Read more

Télécharger l’outil