
Wie CVE-2025-29774-Schwachstellen und der SIGHASH_SINGLE-Fehler die Betriebsmodi von Multi-Signatur-Wallets mit gefälschten RawTX bedrohen
In diesem Artikel betrachten wir den kryptografischen Angriff der digitalen Signaturfälschung (Digital Signature Forgery Attack), dessen Folgen eine Bedrohung für die Sicherheit von Transaktionen im Bitcoin-Netzwerk darstellen, da digitale Signaturen das Eigentum und die Autorisierung von Kryptowährungstransfers bestätigen. Wir werden Beispiele für die Auswirkungen solcher Angriffe auf Bitcoin auf der Grundlage aktueller Forschung und identifizierter Schwachstellen untersuchen.
Ein Digital Signature Forgery Attack ist der Versuch eines Angreifers, eine gefälschte ECDSA-Signatur zu erstellen, die vom Bitcoin-Netzwerk als gültig anerkannt wird. Dieser Angriff ermöglicht es, Transaktionen zu autorisieren, ohne den privaten Schlüssel des Eigentümers zu kennen, was die Sicherheit der Gelder in der Krypto-Wallet des BTC-Inhabers gefährdet.
In der Kryptografie bestätigt eine digitale Signatur die Authentizität einer Nachricht oder Transaktion. Signaturfälschung bedeutet, dass es möglich ist, ein „RawTX“-Paar zu erstellen, das vom System als gültig akzeptiert wird, obwohl es tatsächlich nicht vom Eigentümer des privaten Schlüssels erstellt wurde. Dies öffnet den Weg für Betrug, Diebstahl von Geldern und die Verletzung der Integrität der Blockchain. Der Digital Signature Forgery Attack (DSFA) als kryptografischer Angriff wird in Softwarekomponenten implementiert, die die Bibliothek xml-crypto zur Überprüfung von Signaturen von XML-Dokumenten auf der Node.js-Plattform verwenden.
In erster Linie betrifft dies Enterprise-Integrationslösungen, Cloud-Dienste und Single-Sign-on-Systeme wie IBM App Connect Enterprise Certified Container und andere Anwendungen, die für die SAML-Authentifizierung und -Autorisierung auf xml-crypto angewiesen sind. Hardware-Schwachstellen sind nicht mit bestimmten physischen Geräten verbunden, sondern werden in Softwareprodukten implementiert, die die verwundbare Bibliothek verwenden.
Die Schwachstellen CVE-2025-29774 und CVE-2025-29775, bekannt als Digital Signature Forgery Attack, sind in der xml-crypto Software-Bibliothek implementiert, einer Bibliothek zum digitalen Signieren und Verschlüsseln von XML-Dokumenten auf der Node.js-Plattform.


Somit implementiert dieser Code Algorithmen zur kryptografischen Signatur und Signaturprüfung für verschiedene Schemata (RSA mit verschiedenen SHA-Hashes und HMAC-SHA1), was ihre Integration in Systeme ermöglicht, die eine digitale Datensignatur erfordern.
Der Code von signature-algorithms.ts wird verwendet, um digitale Signaturen sicher zu erstellen und zu verifizieren und so die Authentizität und Integrität der Daten zu gewährleisten. ECDSA-Signaturen bieten eine Autorschaftsprüfung mit einem privaten Schlüssel, und HMAC – eine Integritäts- und Authentizitätsprüfung mit einem geheimen Schlüssel. Die verwendeten Algorithmen entsprechen den XML-Digital-Signature-Standards (die URIs der Algorithmen verweisen auf W3C-Spezifikationen).
Somit implementiert der Code von signature-algorithms.ts Algorithmen zur kryptografischen Signatur und Signaturprüfung für verschiedene Schemata (ECDSA, RSA mit verschiedenen SHA-Hashes und HMAC-SHA1), was ihre Integration in Systeme ermöglicht, die eine digitale Datensignatur erfordern.
SignatureAlgorithm und stellt Methoden bereit für:
getSignature): nimmt Signaturdaten und einen privaten Schlüssel entgegen und gibt eine digitale Signatur im base64-Format zurück.verifySignature): nimmt die Eingabe, den öffentlichen Schlüssel und die Signatur entgegen und gibt einen booleschen Wert zurück, der angibt, ob die Signatur korrekt ist.getAlgorithmName): Gibt eine URI zurück, die den verwendeten Signaturalgorithmus identifiziert.crypto.createSign und crypto.createVerify mit den entsprechenden Algorithmen verwendet („RSA-SHA1“, „RSA-SHA256“, „RSA-SHA512“).crypto.createHmac mit dem Algorithmus „SHA1“ verwendet.createOptionalCallbackFunction gekapselt, die es wahrscheinlich ermöglicht, sie sowohl mit Callbacks als auch mit Promises zu verwenden (Details nicht im Code).Die Verwendung des RSA-SHA1 Algorithmus in kryptografischen Signaturen enthält eine Schwachstelle, die mit SHA-1-Hashkollisionen zusammenhängt. Dies ermöglicht es einem Angreifer, zwei verschiedene Nachrichten mit derselben Signatur zu erstellen, wenn er einen Teil der zu signierenden Daten kontrolliert.
Konkret liegt das Problem in der Klasse RsaSha1:
const signer = crypto.createSign("RSA-SHA1"); // Vulnerable line
Auch die zweite Schwachstelle befindet sich in der Klasse RsaSha1:
const verifier = crypto.createVerify("RSA-SHA1"); // Vulnerable line
HmacSha1 ist weniger anfällig, aber ebenfalls veraltet. HMAC ist kollisionsresistenter als „nacktes“ SHA-1, aber die Umstellung auf SHA-256 ist vorzuziehen.
CVE-2025-29774 und CVE-2025-29775 sind kritische Schwachstellen in der xml-crypto Bibliothek für Node.js, die mit einer unsachgemäßen Überprüfung digitaler Signaturen in XML-Dokumenten zusammenhängen. Beide Schwachstellen ermöglichen es einem Angreifer, signierte XML-Nachrichten so zu verändern, dass dies von der Signaturprüfung unbemerkt bleibt.
Im bereitgestellten Code verwenden die Klassen RsaSha1 den veralteten RSA-SHA1 Algorithmus zum Signieren und Verifizieren:
const signer = crypto.createSign("RSA-SHA1"); // Vulnerable line №7
const verifier = crypto.createVerify("RSA-SHA1"); // Vulnerable line №17SHA1 gilt als kryptografisch unsicher; das Hauptproblem liegt in der Logik der Verarbeitung von XML-Strukturen durch die Bibliothek :
<SignedInfo> zum XML-Dokument hinzu, was zu einer falschen Hash-Berechnung bei der Verifizierung führt.<Signature> <SignedInfo>...</SignedInfo> <!-- Original knot --> <SignedInfo>...</SignedInfo> <!-- Added by an attacker --> </Signature>
// Usage SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");<SignedInfo> in der Signatur gibt.Die Behebung dieser Schwachstellen ist entscheidend für Systeme, die XML-Signaturen zur Authentifizierung verwenden (z. B. SAML, SOAP).

Die xml-crypto-Bibliothek wird häufig verwendet, um digitale Signaturen in XML-Nachrichten zu verifizieren, darunter Protokolle wie SAML, SOAP und andere. Daraus folgt, dass die Schwachstelle potenziell Folgendes betrifft:
Um das Risiko für bestimmte Geräte zu bewerten, wird empfohlen zu prüfen, ob diese anfällige Versionen von xml-crypto verwenden oder von ähnlichen XML-Signaturmechanismen abhängen. Für die Arbeit mit Kryptowährungs-Wallets auf Node.js-Basis bietet IBM separate Lösungen an, wie IBM Secure Bitcoin Wallet , eine Anwendung, die auf dem Electrum Bitcoin Client basiert und Node.js verwendet, um mit dem Bitcoin-Netzwerk zu interagieren und das Wallet zu verwalten.
In dieser Lösung können private Schlüssel und das Wallet mithilfe von IBM Cloud Hyper Protect Crypto Services (zHSM) gespeichert und verschlüsselt werden, das eine hardwarebasierte sichere Speicherung von Schlüsseln bietet. Die Erzeugung privater Schlüssel für Bitcoin-Wallets wird normalerweise in spezialisierten Kryptografie-Bibliotheken wie Electrum, bitcoinjs-lib usw. implementiert, die in Node.js-Anwendungen integriert werden können. IBM Secure Bitcoin Wallet verwendet ein modifiziertes Electrum-Backend auf Node.js für die Verwaltung von Schlüsseln und Transaktionen, das durch die Integration mit IBM Cloud Hyper Protect Crypto Services Hardware-Verschlüsselung und sichere Speicherung privater Schlüssel bietet.
Aus der Theorie der Schwachstelle CVE-2025-29775 ist bekannt, dass ein Angreifer eine nicht aktualisierte xml-crypto-Bibliothek zur Verarbeitung falscher Transaktionswerte ausnutzen kann. Kommen wir zum praktischen Teil des Artikels und betrachten ein Beispiel mit einer Bitcoin-Wallet: 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , wobei Münzen in Höhe von: 0.059672 BTC verloren gegangen sind; Stand Juli 2025 beträgt dieser Betrag: 7.052 USD
Betrachten wir das Format: Raw-Transaktion – binäre und Hex-Daten, die alle Informationen über die Transaktion enthalten. Sie wird benötigt, um Transaktionen auf niedriger Ebene zu übertragen, zu verifizieren oder zu erstellen, und ist die Grundlage für den Betrieb des gesamten Bitcoin-Netzwerks. Normale Benutzer stoßen selten direkt auf Raw-Transaktionen , aber für Entwickler und Krypto-Enthusiasten ist dies das wichtigste Werkzeug für die volle Kontrolle über alle Transaktionen des Bitcoin-Netzwerks.

Um UTXO-Objekte im Bitcoin-Netzwerk vollständig abzurufen, verwenden wir das Dark AI-Tool. UTXO ist der Hauptteil der Datenstruktur in der Blockchain und stellt die Menge an BTC-Coins der Kryptowährung dar, die vom Inhaber des privaten Schlüssels (der diese Bitcoin-Adresse kontrolliert) ausgegeben werden kann. Jedes UTXO ist die Ausgabe einer bestimmten vergangenen Transaktion, die nie als Eingabe in nachfolgenden Transaktionen verwendet wurde.

Befehle:
!wget https://darkai.ru/repositories/neuralnet_tools.zipwget — ein Befehlszeilen-Dienstprogramm zum Herunterladen von Dateien aus dem Netzwerk über die Protokolle HTTP, HTTPS und FTP.neuralnet_tools.zipunzip — Befehl zum Entpacken von ZIP-Archiven im aktuellen Verzeichnis.Dieser Befehl extrahiert alle Dateien aus neuralnet_tools.zip
!unzip neuralnet_tools.zip
Führen wir den Befehl ls für eine schnelle und einfache Ansicht aus
ls

!./darkai
Führen wir den Befehl aus, um Informationen über die sogenannten unspent transaction outputs (UTXO, ausgeschrieben: Unspent Transaction Output) für die angegebene Bitcoin-Adresse zu erhalten. Diese Informationen sind wichtig, um das Guthaben der Adresse und die Möglichkeit zur Durchführung neuer Transaktionen zu bewerten.
!./darkai -bitcoinaddress 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe[
{'output': '8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0', 'value': 677200},
{'output': 'bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0', 'value': 5000000}
]Jedes UTXO enthält:
<txid>:<n>, wobei <txid> ein eindeutiger Transaktions-Hash ist und <n> die Ausgabenummer in der Liste der Ausgaben für diese Transaktion ist.8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0Das insgesamt verfügbare Guthaben einer Adresse entspricht der Summe aller gefundenen UTXOs:

Wir nutzen den Interpretationsprozess, um die nicht aktualisierte xml-crypto-Bibliothek zu verarbeiten, ungültige Transaktionswerte zu erstellen und einen großen Betrag zu senden. Der Dark-AI-Algorithmus wählt aus, welches UTXO verwendet werden soll (oder kombiniert beide).
Die Bitcoin-Adresse 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe verfügt über zwei aktive UTXOs mit einem Gesamtbetrag von 0.05677200 BTC. Diese Gelder können für neue Transaktionen verwendet werden; beide Ausgaben gelten als bestätigt und nicht ausgegeben.

Um Informationen über die Ausgabe einer Bitcoin-Transaktion zu erhalten, verwenden Sie die folgenden Befehle, wobei die erste Ausgabe (
outs) aus der Transaktion eine eindeutige Kennung hat:8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd
!./darkai -deserialize 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — ein Skript, das die Bedingungen für die Ausgabe dieser Ausgabe definiert.
a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287a914...87, das dem P2SH (Pay to Script Hash) -Format entspricht:
a9— OP_HASH160 (Hash-Operator)14— Länge des nächsten Werts (20 Bytes = 40 Hexadezimalzeichen)06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash160 Bitcoin selbst Wallet-Adressen, in denen BTC-Coins gespeichert sind.87— OP_EQUAL (ein grundlegender Bitcoin-Script-Befehlsoperator, der einen Vergleich von zwei Datenteilen zur Überprüfung ihrer Identität implementiert)Als Ergebnis der Deserialisierung der Transaktion anhand der Kennung
8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afdwurde die erste Ausgabe erhalten, die den Betrag von 677.200 Satoshi (0,00677200 BTC) enthält, geschützt durch ein P2SH-Skript . Um diese Gelder zu verwalten, muss das Zielskript vorgelegt und die Entsperrtransaktion, die die Bedingungen des angegebenen Hashs erfüllt, korrekt signiert werden.

Um Informationen über die Ausgabe der ursprünglichen Daten (
output) einer Bitcoin-Transaktion zu erhalten, wenden Sie die folgenden Befehle an, wobei die erste Ausgabe (outs) aus der Transaktion mit einer eindeutigen Kennungbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
!./darkai -deserialize bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786Mithilfe des Interpretationsprozesses erhalten wir mithilfe von Dark AI unter Verwendung der Deserialisierungsfunktion anschließend Informationen über die Struktur des ersten Ausgabeelements ( output) für die zweite Transaktion mit der Kennungbd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.
Ergebnis:
{'value': 5000000, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}5000000'outs'angegeben ist. Er kann nur ausgegeben werden, wenn die Bedingungen erfüllt sind, die in dem im Feld definierten Skript festgelegt sind 'script'.
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'Der angegebene Wert entspricht dem Standardskripttyp im Bitcoin-Netzwerk:
a9— Operationscode OP_HASH160 (erzeugt RIPEMD-160 aus SHA-256 von der nächsten Zeile).14— Länge des nachfolgenden Felds: 20 Bytes (40 hexadezimale Zeichen).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— ist ein 20-Byte-Hash, der entweder eine Bitcoin-Wallet-Adresse oder ein Skript identifiziert.87— Operationscode OP_EQUAL.Zusammengenommen bedeutet dieser Eintrag eine P2SH-Adresse (Pay-to-Script-Hash). In diesem Fall sind Gelder einer bestimmten Skriptkombination zugeordnet, und um sie abzuheben, müssen Sie das Skript offenlegen, dessen Hash hier aufgezeichnet ist, und Signaturen (oder andere Daten) vorlegen, die die Bedingungen dieses Skripts erfüllen.
Die häufigsten Verwendungen dieses Schemas sind Multi-Signaturen, einfache und komplexe Smart Contracts, bilaterale Multi-Signaturen, bedingte Sicherheitsschemata und andere erweiterte Szenarien.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Das Deserialisierungsergebnis meldet somit das Vorhandensein einer bestimmten Menge Bitcoins an einer bedingten (P2SH-)Adresse und definiert strenge Regeln für deren Ausgabe, was eine Schlüsselrolle bei der Verwaltung und Buchhaltung von Geldern im Bitcoin-Netzwerk spielt.

Das Skript 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'wird in dieser Transaktionsausgabe gewählt und verwendet, weil es ein typisches P2SH (Pay-to-Script-Hash) -Sperrskript im Bitcoin-Netzwerk darstellt.
Betrachten wir es Stück für Stück:
a9— OP_HASH160: Eine Hash-Operation, die zuerst SHA-256 und dann RIPEMD-160 auf nachfolgende Daten anwendet.14— Hash-Länge beträgt 20 Bytes (im Hexadezimalformat).06612b7cb2027e80ec340f9e02ffe4a9a59ba762— ein 20-Byte-Hash des Skripts, bekannt als der Skript-Hash .87— OP_EQUAL: Ein Operator, der die Gleichheit zweier Werte auf dem Stack prüft.Dieses Skript erfordert also, dass zum Zeitpunkt der Verwendung (Ausgabe von Geldern) ein Skript vorgelegt wird, dessen Hash mit 06612b7cb2027e80ec340f9e02ffe4a9a59ba762übereinstimmt, und dass die Bedingungen dieses Skripts erfüllt sind.
Das Skript
'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'ist ein P2SH-Sperrskript, das besagt, dass Sie zum Ausgeben von 0,05 BTC das ursprüngliche Skript mit dem Hash06612b7cb2027e80ec340f9e02ffe4a9a59ba762bereitstellen und die darin angegebenen Bedingungen erfüllen müssen. Dies bietet eine Balance zwischen Bequemlichkeit, Sicherheit und Funktionalität – der Hauptgrund für die Wahl dieses speziellen Skripts in dieser Transaktion. Der Hash06612b7cb2027e80ec340f9e02ffe4a9a59ba762im P2SH-Skript ist das Ergebnis einer spezifischen Hashbildung des ursprünglichen Skripts (Redeem-Skript) , das die Bedingungen für die Ausgabe von Geldern aus dieser Ausgabe festlegt.
06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Dieser Hash identifiziert eindeutig das genaue Szenario, für das er generiert wurde.SHA-256 + RIPEMD-160)aus dem ursprünglichen Redeem-Skript generiert, daher ist es nicht möglich, zufällig oder willkürlich einen anderen Hash zu wählen.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287Die Wahl dieses speziellen Hashs ist also durch die Notwendigkeit einer genauen und sicheren Verknüpfung der Ausgabe mit bestimmten Ausgabebedingungen diktiert, die den Zugriff auf Gelder in der Blockchain steuern. All dies wird durch die Eigenschaften kryptografischer Hash-Funktionen, ihre Eindeutigkeit und die Unmöglichkeit der umgekehrten Wiederherstellung der ursprünglichen Daten gewährleistet.
Bitcoin-Entwickler haben den P2SH (Pay-to-Script-Hash) -Mechanismus als eine Schlüsselinnovation in den Code geschrieben, die Sicherheit gewährleistet und die Möglichkeiten des Blockchain-Netzwerks erweitert. Betrachten wir die Struktur und das Funktionsprinzip dieses Skripts, seinen Unterschied zu klassischen Transaktionen sowie die Gründe für die Wahl dieses Ansatzes zur Speicherung und zum Schutz digitaler Vermögenswerte.
Traditionell funktionierten Bitcoin-Transaktionen mit dem Pay-to-Pubkey-Hash (P2PKH) -Schema – bei dem Gelder mithilfe des öffentlichen Schlüssel-Hashs des Empfängers „gesperrt“ werden. Um diese Gelder auszugeben, muss der Nutzer seine digitale Signatur und seinen öffentlichen Schlüssel bereitstellen, die vom Netzwerk verifiziert werden.
Außerhalb von P2PKH war die Schnittstelle jedoch begrenzt, da Bitcoin Script viel komplexere Ausgabebedingungen ermöglicht – von Multi-Signaturen über Zeitsperren bis hin zu anderen Smart-Contract-Vereinbarungen. Das Problem war, dass lange und komplexe Skripte unweigerlich die Größe der Transaktionen erhöhten und ihre Benutzerfreundlichkeit verringerten.
Um die Interaktion mit solch komplexen Szenarien zu vereinfachen, wurde 2012 das P2SH -Konzept eingeführt , standardisiert in BIP 16 von Gavin Andresen. Die Essenz von P2SH besteht darin, das vollständige Skript der Ausgabebedingungen in scriptPubKey durch seinen kryptografischen Hash – den sogenannten Skript-Hash – zu ersetzen.

Betrachten wir das Skript, das als Ergebnis der Deserialisierung angegeben wird:
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUALDieses Skript unterscheidet sich vom Standard-P2PKH dadurch, dass es anstelle eines öffentlichen Schlüssel-Hashs einen Hash eines redeemScript – einer Reihe von Bedingungen, unter denen Gelder ausgegeben werden können – speichert.
Um solche Gelder auszugeben, müssen in den Eingängen (scriptSig) der Transaktion, die auf diesen Ausgang verweist, übertragen werden:
Bei der Verarbeitung einer Transaktion führen die Netzwerkknoten folgende Schritte aus:
P2SH verlagert damit die Verantwortung für die Darstellung und Überprüfung der Ausgabebedingungen vom Sender (der das erforderliche Skript erstellt) auf den Ausgeber.
P2SH ermöglicht die Erstellung von Adressen mit beliebigen, oft mehrstufigen Bedingungen – beispielsweise einer Multi-Signatur-Anforderung (2 von 3, 3 von 5 usw.), Zeitlimits, Verteilungslogik und vielem mehr. In diesem Fall sendet der Sender die Gelder einfach an eine kompakte Hash-Adresse, ohne sich um technische Details zu kümmern.
Anstatt das vollständige Skript in der Blockchain zu speichern, wird in der Transaktion nur sein Hash gespeichert. Dies reduziert die Belastung des Netzwerks, verringert die Blockgröße und beschleunigt die Überprüfung von Transaktionen.
Da das redeemScript erst zum Zeitpunkt der Ausgabe offengelegt und überprüft wird, erhöht dies die Vertraulichkeit der Bedingungen und erschwert unbefugte Zugriffsversuche. Die Verwendung kryptografischer Hash-Funktionen garantiert Schutz vor Fälschung und Manipulation – jede noch so geringe Abweichung im Skript führt zu einem anderen Hash, und das Netzwerk lehnt die Transaktion ab.
P2SH standardisiert und vereinfacht die Verwendung komplexer Smart Contracts in Bitcoin, vereinfacht die Integration und erhöht die Kompatibilität mit einer Vielzahl von Wallets und Diensten.
Ein klassisches Beispiel ist eine Wallet, die für die Durchführung einer Transaktion Signaturen von zwei von fünf Teilnehmern benötigt. Mit P2SH:
Dies macht P2SH ideal für Firmenkonten, Joint Ventures und andere Situationen, in denen eine Zugriffskontrolle erforderlich ist. Der Pay-to-Script-Hash (P2SH) -Mechanismus ist ein grundlegender Bestandteil der Bitcoin-Architektur und bietet ein Gleichgewicht zwischen:

ins)Lassen Sie uns einen Befehl ausführen, um Informationen über einen der Eingänge einer Transaktion mit dem Hash 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132 zu erhalten. Die Analyse eines solchen Eingangs ist wichtig, um den Mechanismus der Autorisierung der Ausgabe von Geldern auf Skriptebene zu verstehen.
!./darkai -scriptsig 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132Das Ergebnis der Extraktion des ersten Eingangs der Transaktion (
ins) wird wie folgt dargestellt:
{
'script': '00483045022100e5d7c59ea1fb5d0285e755dfc09634e1e3af36d12950b9b5d5f92b136021b3d202202c181129443b08dcfb8d9ced30187186c57c96f9cdb3f3914e0798682ea35d2b03493046022100e1f8dbad16926cfa3bf61b66e23b3846323dcabf6c75748bcfad762fc50bfaf402210081d955160b5f8d2b9d09d8838a2cf61f5055009d9031e0e106e19ebab234d949034c695221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53ae',
'outpoint': {
'index': 1,
'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'
},
'sequence': 4294967295
}script)script ist die scriptSig , die verwendet wird, um den entsprechenden Ausgang der vorherigen Transaktion zu entsperren.00, was im Kontext von scriptSig OP_0 bedeuten kann , traditionell in Multi-Signatur-Szenarien verwendet (z. B. beim Pay-to-Script-Hash-Multi-Signatur-Standard, wo ein Platzhalter benötigt wird).3045...), die typischerweise aus einer Reihe von Bytes mit den Signaturdetails bestehen.outpoint)'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577' — ist der Hash der vorherigen Transaktion.'index': 1 – zeigt auf den zweiten Ausgang (von null an nummeriert), der zum Entsperren verwendet wird.sequence)4294967295 (0xFFFFFFFF) ist eine maximale 32-Bit-Zahl.Die Kryptoanalyse der Extraktion des ersten Transaktionseingangs (
ins) mit dem angegebenen Transaktionshash zeigte, dass:
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.Somit ermöglichen die erhaltenen Daten ein tieferes Verständnis der Mechanik der Prüfung von Rechten zur Ausgabe von Geldern, werden zur Gewährleistung der Sicherheit des Bitcoin-Netzwerks sowie bei der Entwicklung und Prüfung von Smart Contracts auf Basis von Bitcoin-Skripten verwendet.

outs)Lassen Sie uns den Befehl ausführen, um Informationen über einen der Ausgänge der Transaktion mit der Kennung
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577zu erhalten.
!./darkai -redeemscript ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577
outsKonkret wurde der zweite Ausgang ( ) dieser Transaktion, das Element mit Index 1, extrahiert .
{
'value': 350000,
'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
}value
scripta91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 ist ein klassisches Sperrskript (scriptPubKey) des P2SH (Pay-to-Script-Hash) -Formats .a9— OP_HASH160 ist ein Operator, der zuerst SHA-256 und dann RIPEMD-160 auf die Eingabedaten anwendet.14— die Länge (20 Bytes) des nächsten Wertes ist die Hash-Größe.06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — 20-Byte-Hash, auch bekannt als Skript-Hash , ist eine eindeutige Darstellung des Redeem-Skripts, das die Ausgabe dieser Gelder steuert.87— OP_EQUAL ist ein Operator, der zwei Werte vergleicht und true zurückgibt, wenn sie gleich sind.Das Skript verlangt also, dass der Benutzer zum Entsperren (Ausgeben von Geldern) ein Redeem-Skript vorlegt, dessen Hash diesem Wert entspricht.
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577ist mit einem Ausgang verknüpft, der 0.0035 BTC enthält.06612b7cb2027e80ec340f9e02ffe4a9a59ba762 kontrolliert wird.
Die erhaltenen Informationen bestätigen, dass der zweite Transaktionsausgangsdatensatz
ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577den Betrag von 0.0035 BTC speichert, der von einem standardmäßigen P2SH-Skript mit einem hash160-Wert06612b7cb2027e80ec340f9e02ffe4a9a59ba762kontrolliert wird. Um diese Gelder zu verwalten, ist es erforderlich, das entsprechende Redeem-Skript vorzulegen, das ein hohes Maß an Sicherheit und Flexibilität bei der Verwaltung von Bitcoins bietet.
OP_FALSE 304502... 304602... 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeFühren wir den Befehl aus, um HASH160 zu erhalten. Bitcoin-Entwickler haben einen Standard für einen 20-Byte-Hash (hex) festgelegt, der ohne Änderungen in anderen beliebten Kryptowährungen wie 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) weit verbreitet ist, um den verkürzten Identifikator von Skripten und öffentlichen Schlüsseln zu bezeichnen.
!./darkai -hexdata 5221023927b5cd7facefa7b85d02f73d1e1632b3aaf8dd15d4f9f359e37e39f05611962103d2c0e82979b8aba4591fe39cffbf255b3b9c67b3d24f94de79c5013420c67b802103ec010970aae2e3d75eef0b44eaa31d7a0d13392513cd0614ff1c136b3b1020df53aeVerarbeitungsprozess:
06612b7cb2027e80ec340f9e02ffe4a9a59ba762Dieser 20-Byte-Hash (hex) wird HASH160 genannt und in Bitcoin häufig verwendet, um einen verkürzten Identifikator für Skripte und öffentliche Schlüssel zu bezeichnen.
Ein wichtiger Schritt bei der Verarbeitung von Bitcoin-Skripten unter Verwendung kryptografischer Hash-Funktionen.
Die Umwandlung serialisierter Skripte oder öffentlicher Schlüssel in HASH160 ermöglicht eine effiziente Identifizierung, Indizierung und den Schutz von Daten auf der Bitcoin-Blockchain.
Erhaltener Hash:
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}Das Team hat den exakten Hash erzeugt, der als Verbindung zwischen komplexen Skripten und dem kompakten Format dient, das zum Speichern und Verifizieren von Transaktionen im Bitcoin-Netzwerk verwendet wird.

Satoshi Nakamoto entschied sich, in den Hashing-Algorithmen von Bitcoin doppeltes SHA-256-Hashing zu verwenden (das heißt, SHA-256 zweimal hintereinander anzuwenden), aus mehreren wichtigen Gründen, die die kryptografische Stärke und Sicherheit des Netzwerks erhöhen.
Die doppelte Verwendung von
SHA-256ist eine bewusste Entscheidung von Satoshi Nakamoto, um dem gesamten Bitcoin-System eine zusätzliche Sicherheitsebene und robuste kryptografische Stärke zu verleihen. Dieses Design minimiert Kollisionsrisiken, verstärkt die Einweg-Eigenschaft und schützt Daten im Blockchain-Netzwerk sicher, wodurch eine solide Grundlage für Transaktionssicherheit und Konsens im System geschaffen wird. Somit ist doppeltes SHA-256 ein Schlüsselelement der Bitcoin-Architektur, das fortschrittliche kryptografische Techniken mit einem verteilten System kombiniert.

Die Sicherheit und Flexibilität moderner Bitcoin-Transaktionen basiert auf einem Skriptsystem, das komplexe Bedingungen für die Ausgabe von Geldern ermöglicht. Einer der wichtigsten Mechanismen ist die Multi-Signatur (Multisig) , bei der Gelder nur ausgegeben werden können, wenn mehrere gültige digitale Signaturen aus einer Menge möglicher Signaturen vorliegen. In diesem Artikel werden wir uns im Detail ansehen, wie genau dies in Bitcoin implementiert ist, was redeemScript ist, wie die OP_CHECKMULTISIG-Anweisung funktioniert , und warum ein solcher Ansatz gefragt ist.
Im Kontext von Bitcoin ist ein redeemScript ein Skript, das die Bedingungen für die Ausgabe von Geldern enthält, die im Transaktionsausgang im Pay-to-Script-Hash-Format (P2SH) gespeichert werden. Anstatt das vollständige Skript auf der Blockchain zu speichern, wird der Hash des redeemScripts im Ausgang gespeichert, was Platz spart und die Details der Bedingungen bis zum Zeitpunkt der Ausgabe verbirgt.
Ein redeemScript kann beispielsweise mehrere öffentliche Schlüssel und eine Schwellenanzahl von Signaturen enthalten – genau das implementieren Multi-Signatur-Wallets.
Betrachten wir die OP_CHECKMULTISIG-Anweisung: Zweck und Funktionsweise, wobei das Hauptelement im redeemScript, das die Multi-Signatur-Prüfung implementiert, OP_CHECKMULTISIG ist.
Aufgrund eines historischen Fehlers in der Implementierung von OP_CHECKMULTISIG wird während der Ausführung ein zusätzliches Element, ein ungenutzter Wert, vom Stack entfernt. Um dieses Problem zu vermeiden, verwendet scriptSig ein spezielles Element
OP_FALSE(Wert 0) am Anfang, das diesen Fehler ausgleicht und potenzielle Schwachstellen verhindert.
OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSEBasierend auf dem redeemScript-Code:
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
OP_CHECKMULTISIGprüft, dass die beiden bereitgestellten Signaturen (im scriptSig) gültig sind und zwei der drei Schlüsseln entsprechen.OP_FALSEim scriptSig gleicht den Fehler des Entfernens des zusätzlichen Werts aus.OP_FALSE hat sich der Mechanismus als zuverlässig erwiesen und findet breite Anwendung.RedeemScript mit der OP_CHECKMULTISIG -Anweisung ist ein komplexes und leistungsstarkes Werkzeug im Bitcoin-Arsenal, mit dem Sie Multi-Signatur-Wallets mit einer Signaturschwelle erstellen können, was ein hohes Maß an Sicherheit und Kontrolle über Gelder bietet. Dieser Mechanismus ist zu einem Eckpfeiler für Organisationen, Nutzer und Dienste geworden, die eine gemeinsame Verwaltung ihrer Vermögenswerte in einer dezentralen und sicheren Umgebung nutzen möchten. Somit ist Multi-Signatur über redeemScript und OP_CHECKMULTISIG nicht nur eine Technologie, sondern eine Funktionalität, die die Möglichkeiten des klassischen Kryptowährungsmodells erweitert.

Der Bitcoin-Mechanismus zur Verifizierung von Multi-Signaturen basiert auf der Verwendung spezieller Skripte mit den OP_CHECKMULTISIG - und redeemScript -Anweisungen, die einen Abgleich von Schwellenwertsignaturen ermöglichen und so erhöhte Sicherheit sowie eine gemeinsame Verwaltung der Gelder bieten.
Multisig ist ein System, bei dem mehrere gültige Signaturen aus einer bestimmten Menge öffentlicher Schlüssel erforderlich sind, um eine Transaktion abzuschließen. Ein typisches Schema wird als m von n bezeichnet – zum Beispiel „2 von 3“, bei dem zwei beliebige Signaturen aus drei Schlüsseln benötigt werden, um eine Ausgabe zu autorisieren.
In Bitcoin wird diese Logik umgesetzt über:
Die Anweisung
OP_CHECKMULTISIGüberprüft, ob die bereitgestelltenscriptSigSignaturen gültig sind und mit den veröffentlichten öffentlichen Schlüsseln aus redeemScript übereinstimmen.
RedeemScript ist ungefähr wie folgt aufgebaut:
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIGOP_Mund OP_N– Anweisungen, die die Anzahl der erforderlichen Signaturen bzw. die Gesamtzahl der öffentlichen Schlüssel angeben (zum Beispiel OP_2 und OP_3).<pubkeyX>– öffentliche Schlüssel der Teilnehmer.OP_CHECKMULTISIG– ein Operator, der die Multi-Signatur-Verifizierung implementiert.merreicht.Ein wichtiges technisches Merkmal ist ein historischer Implementierungsfehler
OP_CHECKMULTISIG, der dazu führt, dass ein zusätzliches, ungenutztes Element vom Stack entfernt wird. Um diesen Fehler zu kompensieren, wird inscriptSigein WertOP_FALSE(Code 0) am Anfang platziert, um die Stack-Verschiebung zu „verriegeln“.
Für ein Wallet mit einer „2 von 3“-Multi-Signatur wird vor der Ausgabe von Geldern die scriptSigwie folgt gebildet:
OP_FALSE <signature1> <signature2> <redeemScript>OP_FALSE– ein Dummy-Wert zur Kompensation des OP_CHECKMULTISIG-Fehlers.<signature1>und <signature2>– zwei digitale Signaturen, die von den Inhabern der entsprechenden privaten Schlüssel autorisiert wurden.<redeemScript>– das Skript selbst mit öffentlichen Schlüsseln und Verifizierungsparametern.Bei der Verifizierung einer Transaktion durch einen Knoten:
Wenn alle Inputs einer Transaktion diese Prüfung bestehen, gilt die Transaktion als gültig. Bei einer solchen Gültigkeit kompensiert der Angreifer durch die Ausführung des Operators dieses Fehlers OP_CHECKMULTISIG als potenzielle Schwachstelle.
Der Bitcoin-Mechanismus zur Verifizierung von Multi-Signaturen mithilfe des Befehls
OP_CHECKMULTISIGund redeemScript ermöglicht die Einrichtung komplexer Schwellenwertsignatur-Schemata, und durch die Ausführung dieses Fehleroperators kompensiert ein Angreifer OP_CHECKMULTISIG als potenzielle Schwachstelle in kontrollierten Transaktionen im dezentralen Bitcoin-Netzwerk.
Welche Besonderheiten und Einschränkungen gibt es, wenn OP_CHECKMULTISIGmehrere Signaturen prüft? Schauen wir uns die wichtigsten Aspekte und Einschränkungen an:
OP_FALSEhinzugefügt, um den Stack korrekt auszurichten. Dies ist ein von der Community anerkanntes und akzeptiertes Merkmal.
Bitcoin verwendet digitale Signaturen zur Autorisierung von Transaktionen, wodurch Inhaber von Geldern ihr Recht bestätigen können, über diese zu verfügen. Die Besonderheit besteht darin, dass Signaturen ihren Wirkungsbereich nicht auf die gesamte Transaktion beschränken können, sondern nur auf einen Teil davon. Dies wird mithilfe spezieller Flags – SIGHASH , die festlegen, welche Transaktionsdaten genau unter die Signatur fallen, umgesetzt. Betrachten wir die Arten von Signatur-Hashes, ihren Zweck, Anwendungsbeispiele sowie Besonderheiten, die in nicht standardmäßigen Situationen auftreten.
Beim Signieren einer Bitcoin-Transaktion wird eine digitale Signatur erstellt, die über einem bestimmten Fragment der Transaktionsdaten gebildet wird. Gerade durch das SIGHASH-Flag wird angegeben, welcher Teil dieser Daten durch diese Signatur abgedeckt werden soll. Der Signatur-Hash-Typ wird durch das letzte Byte der Signatur selbst übertragen und bestimmt den Bereich, der in den Hash und damit in den signierten Abschnitt einbezogen wird. Dies ermöglicht eine flexible Gestaltung der Bedingungen dafür, welche konkreten Aktionen an der Transaktion vom Unterzeichner genehmigt werden.
Dies ist der Standard-Signaturtyp in den meisten Wallets und Clients. Die Signatur deckt alle Inputs und alle Outputs der Transaktion ab, was bedeutet:
Bei diesem Signaturtyp werden alle Inputs signiert, aber keiner der Outputs :
Dieser Signaturtyp signiert alle Inputs, aber nur einen Output – mit derselben Sequenznummer wie der Input :
Betrachten wir eine Transaktion mit drei Inputs, bei der aus den Signaturskripten (scriptSig) von zweien davon Signaturen extrahiert wurden, die mit einem Byte
0x03enden, das auf SIGHASH_SINGLE verweist – also Signaturen, die nur das Paar der entsprechenden Inputs und Outputs signieren. Allerdings beobachten wir hier eine Situation: Der Input mit Index 2 hat keinen entsprechenden Output mit demselben Index.


Aufgrund eines historischen Bitcoin-Fehlers wird in solchen Situationen der Transaktions-Hash für die Signierung als feste Zahl – eins (int 1) – zurückgegeben. Dies entspricht keinem gültigen Hash der zu signierenden Transaktion und kann Sicherheits- und Kompatibilitätsprobleme verursachen.
Zusätzlich zu den drei grundlegenden SIGHASH-Werten sind Kombinationen dieser Werte mit dem SIGHASH_ANYONECANPAY Flag möglich, das es erlaubt, nur einen Input zu signieren, während die anderen für Änderungen offen bleiben. Dies erweitert die Möglichkeiten zur Erstellung komplexer kollaborativer Protokolle und Multi-Party-Transaktionen, bei denen verschiedene Teilnehmer nur ihre eigenen Teile signieren.
Die Typen
SIGHASHsindBitcoinein cleverer Mechanismus zur Verwaltung des Kontrollniveaus und des Umfangs digitaler Signaturen innerhalb von Transaktionen. Sie schaffen eine Balance zwischen Sicherheit, Flexibilität und Kompatibilität. Die Geschichte enthält unerwartete Komplikationen, wie den Fehler mitSIGHASH_SINGLEohne entsprechenden Output, was die Bedeutung eines tiefen Verständnisses der technischen Details für die erfolgreiche Arbeit mit Bitcoin auf fortgeschrittenem Niveau unterstreicht.
Die Unterschiede zwischen den Signaturtypen SIGHASH_ALL, SIGHASH_NONE und SIGHASH_SINGLE haben erhebliche Auswirkungen auf die Sicherheit von Bitcoin-Transaktionen, da sie bestimmen, welche Teile der Transaktion in der digitalen Signatur erfasst und daher vor Änderungen geschützt sind.