Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Digital-Signature-Forgery-Attack — Come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsi | Kitploit
Strumenti/GitHubGitHub/demining/digital-signature-forgery-attack
Analisi delle VulnerabilitàExploitCrittografiaCTFApprendimento e FormazioneRisorse Curate
GitHubdemining/digital-signature-forgery-attack

Digital-Signature-Forgery-Attack

Come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsi

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi
Vedi RepositorySito web
41 anno faNon ancora revisionato
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falso

In questo articolo esamineremo l'attacco crittografico di falsificazione della firma digitale (Digital Signature Forgery Attack), le cui conseguenze rappresentano una minaccia per la sicurezza delle transazioni nella rete Bitcoin, poiché le firme digitali confermano la proprietà e l'autorizzazione dei trasferimenti di criptovaluta. Prenderemo in esame esempi dell'impatto di tali attacchi su Bitcoin sulla base di ricerche moderne e vulnerabilità identificate.

Un attacco di falsificazione della firma digitale (Digital Signature Forgery Attack) è il tentativo di un attaccante di creare una firma digitale ECDSA falsa che verrà riconosciuta come valida dalla rete Bitcoin. Questo attacco consente di autorizzare transazioni senza conoscere la chiave privata del proprietario, mettendo a rischio la sicurezza dei fondi nel portafoglio crittografico del detentore di monete BTC.


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

In crittografia, una firma digitale fornisce la conferma dell'autenticità di un messaggio o di una transazione. La falsificazione di una firma significa che è possibile creare una coppia “RawTX” che verrà accettata dal sistema come valida, anche se in realtà non è stata creata dal proprietario della chiave privata. Questo apre la strada a frodi, furto di fondi e violazione dell'integrità della blockchain. L'attacco di falsificazione della firma digitale (Digital Signature Forgery Attack, DSFA) come attacco crittografico è implementato in componenti software che utilizzano la libreria xml-crypto per verificare le firme di documenti XML sulla piattaforma Node.js.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falso

https://youtu.be/qbu1m_C1wyA


Innanzitutto, questo riguarda le soluzioni di integrazione aziendale, i servizi cloud e i sistemi di single sign-on, come IBM App Connect Enterprise Certified Container e altre applicazioni che dipendono da xml-crypto per l'autenticazione e l'autorizzazione SAML. Le vulnerabilità hardware non sono associate a specifici dispositivi fisici, ma sono implementate in prodotti software che utilizzano la libreria vulnerabile.

Le vulnerabilità CVE-2025-29774 e CVE-2025-29775, note come Digital Signature Forgery Attack, sono implementate nella libreria software  xml-crypto , una libreria per la firma digitale e la crittografia di documenti XML sulla piattaforma Node.js.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsoBollettino di sicurezza: gli operands di IBM App Connect Enterprise Certified Container sono vulnerabili al bypass della convalida delle firme nei dati XML [CVE-2025-29774] [CVE-2025-29775]
  • IBM App Connect Enterprise Certified Container  è un software di integrazione ed elaborazione dati che utilizza xml-crypto per verificare le firme dei documenti XML. Le vulnerabilità consentono di aggirare la verifica delle firme digitali, con la possibilità di falsificare e modificare i messaggi firmati, incluse le risposte SAML per autenticazione e autorizzazione.
  • Sistemi e applicazioni che utilizzano Node.js con la libreria xml-crypto  per verificare messaggi XML firmati, soprattutto nel contesto dell'autenticazione SAML (ad esempio, portali aziendali, sistemi di single sign-on, servizi cloud). La vulnerabilità consente a un attaccante di modificare messaggi XML firmati validi in modo che superino la verifica della firma, portando al bypass di autenticazione e autorizzazione, all'escalation dei privilegi e allo spoofing delle credenziali.

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsoDivulgazione per CVE-2025-29774 e CVE-2025-29775 (SAMLStorm).
  • Le vulnerabilità sono legate a una verifica impropria della firma crittografica in xml-crypto , in particolare alla gestione del nodo DigestValue, dove un attaccante può inserire commenti XML senza compromettere la verifica della firma.
  • Ciò consente di modificare attributi critici di identificazione e controllo degli accessi nei documenti XML firmati, permettendo di bypassare la sicurezza senza richiedere credenziali o diritti di accesso.

Pertanto, questo codice implementa algoritmi di firma crittografica e di verifica delle firme per vari schemi (RSA con diversi hash SHA e HMAC-SHA1), consentendo la loro integrazione in sistemi che richiedono la firma digitale dei dati.


Vulnerabilità critica nel codice di signature-algorithms.ts

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falso

Il file signature-algorithms.ts viene utilizzato per creare e verificare in modo sicuro le firme digitali, garantendo autenticità e integrità dei dati. Le firme ECDSA forniscono la verifica della paternità tramite una chiave privata, mentre HMAC garantisce l'integrità e l'autenticità tramite una chiave segreta. Gli algoritmi utilizzati sono conformi agli standard XML Digital Signature (gli URI degli algoritmi fanno riferimento alle specifiche W3C).


Pertanto, il codice di signature-algorithms.ts implementa algoritmi di firma crittografica e di verifica delle firme per vari schemi (ECDSA, RSA con diversi hash SHA e HMAC-SHA1), consentendo la loro integrazione in sistemi che richiedono la firma digitale dei dati.


Funzionalità di base

  • Ogni classe implementa un'interfaccia  SignatureAlgorithm e fornisce metodi per:
    • Creazione della firma  ( getSignature): riceve i dati della firma e una chiave privata, restituisce una firma digitale in formato base64.
    • Verifica della firma  ( verifySignature): riceve in input i dati, la chiave pubblica e la firma, restituisce un valore booleano che indica se la firma è corretta.
    • GetAlgorithmName  ( getAlgorithmName): restituisce un URI che identifica l'algoritmo di firma utilizzato.

Algoritmi supportati

  • RsaSha1  – firma tramite RSA e funzione hash SHA-1.
  • RsaSha256  – firma tramite RSA e SHA-256.
  • RsaSha512  – firma tramite RSA e SHA-512.
  • HmacSha1  – firma tramite HMAC basato su SHA-1.

Dettagli tecnici

  • Per le firme RSA, vengono utilizzate le classi  crypto.createSign e  crypto.createVerify con i corrispondenti algoritmi ("RSA-SHA1", "RSA-SHA256", "RSA-SHA512").
  • Per le firme HMAC, viene utilizzato  crypto.createHmac con l'algoritmo "SHA1".
  • Le firme sono codificate in base64 per facilitarne la trasmissione e l'archiviazione.
  • I metodi sono incapsulati in una funzione  createOptionalCallbackFunction, che probabilmente ne consente l'uso sia con callback che con promise (i dettagli non sono presenti nel codice).

L'uso dell'algoritmo RSA-SHA1 nelle firme crittografiche contiene una vulnerabilità legata alle collisioni dell'hash SHA-1. Ciò consente a un attaccante di creare due messaggi diversi con la stessa firma se controlla parte dei dati firmati.


Nello specifico, il problema è nella classe RsaSha1:

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // Vulnerable line

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsosignature-algorithms.ts#L7

Anche la seconda vulnerabilità è nella classe RsaSha1:

root@kitploit:~
const verifier = crypto.createVerify("RSA-SHA1");  // Vulnerable line

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falsosignature-algorithms.ts#L17

Perché questo attacco critico di collisione consente di creare dati diversi con lo stesso hash?

  1. Collisioni SHA-1 : L'algoritmo SHA-1 non è più considerato sicuro.
  2. Contesto RSA : Se combinato con RSA, questo può portare a firme falsificate su dati non attendibili (ad es. certificati o documenti).
  3. Raccomandazioni : NIST e la comunità della sicurezza raccomandano di utilizzare SHA-256/SHA-512 invece di SHA-1.

Note aggiuntive:

  • La classe HmacSha1 (HMAC-SHA1) è meno vulnerabile, ma anch'essa obsoleta. HMAC è più resistente alle collisioni dello SHA-1 "nudo", ma è preferibile passare a SHA-256.
  • Il codice contiene implementazioni moderne (RsaSha256/RsaSha512) che dovrebbero essere utilizzate al posto di RsaSha1.

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con RawTX falso

CVE-2025-29774 e CVE-2025-29775 sono vulnerabilità critiche nella libreria xml-crypto per Node.js legate a una verifica impropria delle firme digitali nei documenti XML. Entrambe le vulnerabilità consentono a un attaccante di modificare i messaggi XML firmati in un modo che passa inosservato alla verifica della firma.


Meccanismo dell'attacco di falsificazione della firma digitale

1. Vulnerabilità negli algoritmi RSA-SHA1

Nel codice fornito, le classi RsaSha1 utilizzano il legacy algoritmo RSA-SHA1 per la firma e la verifica:

root@kitploit:~
const signer = crypto.createSign("RSA-SHA1");  // Vulnerable line №7
const verifier = crypto.createVerify("RSA-SHA1");  // Vulnerable line №17

SHA1 è considerato crittograficamente insicuro; il problema principale risiede nella logica di elaborazione delle strutture XML della libreria :

  • Quando si crea una firma, il documento XML passa attraverso una fase di canonicalizzazione (portarlo a una forma standard, ad esempio rimuovendo spazi e commenti).
  • Quando si verifica una firma, la libreria non tiene conto della differenza tra le versioni canonicalizzate e non canonicalizzate di un documento . Ciò consente a un attaccante di modificare il documento (ad es. aggiungere commenti o modificarne la struttura) senza invalidare la firma.

2. Esempio di funzionamento

  1. Modifica di SignedInfo :
    • L'attaccante aggiunge nodi aggiuntivi <SignedInfo> al documento XML , causando un calcolo hash errato durante la verifica.
    xml<Signature> <SignedInfo>...</SignedInfo> <!-- Original knot --> <SignedInfo>...</SignedInfo> <!-- Added by an attacker --> </Signature>
  2. Utilizzo di un algoritmo debole :
    • L'algoritmo SHA1 è vulnerabile alle collisioni, rendendo facile creare firme false per documenti modificati.

3. Conseguenze

  • Bypass dell'autenticazione : Modifica degli attributi nei token SAML o in altri documenti XML correlati agli accessi.
  • Escalation dei privilegi : Sostituzione dell'ID utente con quello di un amministratore nel sistema di autorizzazione.
  • Attacchi di massa : La vulnerabilità può essere sfruttata da remoto senza interazione dell'utente (CVSS 9.3).

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Dettagli tecnici delle vulnerabilità:

CVE-2025-29774

  • Problema : Validazione insufficiente della struttura del documento XML durante la verifica della firma.
  • Sfruttamento : Aggiunta di nodi o attributi extra alla parte firmata del documento.

CVE-2025-29775

  • Problema : Uso errato del contesto di canonicalizzazione durante il calcolo dell'hash.
  • Sfruttamento : Modifica di un documento in forma non canonicalizzata dopo la firma.

Raccomandazioni per la risoluzione dei problemi

  1. Aggiornamento della libreria :
    • Per le versioni 2.x → 2.1.6, 3.x → 3.2.1, 6.x → 6.0.1.
  2. Sostituzione dell'algoritmo : typescript // Usage SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");
  3. Validazione della struttura XML :
    • Verificare che nella firma ci sia esattamente un nodo <SignedInfo>.

Affrontare queste vulnerabilità è fondamentale per i sistemi che utilizzano firme XML per l'autenticazione (ad es. SAML, SOAP).


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

La libreria xml-crypto è ampiamente utilizzata per verificare le firme digitali nei messaggi XML, inclusi protocolli come SAML, SOAP e altri. Ne consegue che la vulnerabilità potenzialmente riguarda:

  • Software e servizi che utilizzano xml-crypto per le firme XML , incluse piattaforme di integrazione aziendale e middleware (come IBM App Connect Enterprise, dove queste vulnerabilità sono state segnalate).
  • Dispositivi e sistemi che utilizzano firme XML per autenticazione e autorizzazione, inclusi server e gateway che supportano SAML.

  • Le vulnerabilità CVE-2025-29774 e CVE-2025-29775 colpiscono principalmente componenti software e piattaforme che utilizzano la libreria xml-crypto per elaborare le firme XML.
  • Le vittime note includono IBM App Connect Enterprise e probabilmente altre soluzioni aziendali basate su Node.js che utilizzano xml-crypto .
  • Attualmente non ci sono dati pubblici su marchi specifici di dispositivi hardware colpiti da questi attacchi.

Per valutare il rischio su dispositivi specifici, si consiglia di verificare se utilizzano versioni vulnerabili di xml-crypto o se dipendono da meccanismi di firma XML simili. Per lavorare con portafogli di criptovaluta basati su Node.js, IBM offre soluzioni separate, come  IBM Secure Bitcoin Wallet  , un'applicazione basata su Electrum Bitcoin Client che utilizza Node.js per interagire con la rete Bitcoin e gestire il portafoglio.

In questa soluzione, le chiavi private e il portafoglio possono essere memorizzati e crittografati utilizzando IBM Cloud Hyper Protect Crypto Services (zHSM), che fornisce un archivio sicuro delle chiavi basato su hardware. La generazione delle chiavi private per i portafogli Bitcoin è solitamente implementata in librerie crittografiche specializzate come Electrum, bitcoinjs-lib, ecc., che possono essere integrate nelle applicazioni Node.js. IBM Secure Bitcoin Wallet utilizza un backend Electrum modificato su Node.js per la gestione di chiavi e transazioni, tramite l'integrazione con IBM Cloud Hyper Protect Crypto Services, che fornisce crittografia hardware e archiviazione sicura delle chiavi private.


Parte pratica

Dalla teoria della vulnerabilità  CVE-2025-29775  è noto che un attaccante può elaborare una libreria xml-crypto non aggiornata per valori di transazione errati. Passiamo alla parte pratica dell'articolo e consideriamo un esempio utilizzando un portafoglio Bitcoin:  32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , dove c'erano monete perse per un importo di:  0.059672 BTC  a luglio 2025 questo importo è:  7, 052 USD


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf

Consideriamo il formato: Raw transaction dati binari ed esadecimali che contengono tutte le informazioni su la transazione . È necessario per trasmettere, verificare o creare transazioni a basso livello ed è la base per il funzionamento dell'intera rete Bitcoin. Gli utenti normali raramente incontrano Raw transactions direttamente, ma per sviluppatori e appassionati di criptovalute, questo è lo strumento principale per il controllo completo di tutte le transazioni della rete Bitcoin.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falsoRaw Transaction

Per restituire completamente gli oggetti UTXO nella rete Bitcoin, utilizzeremo lo strumento Dark AI . L'UTXO è la parte principale della struttura dati nella blockchain e rappresenta l'importo di monete BTC della criptovaluta che può essere speso dal detentore della chiave privata (che controlla questo indirizzo Bitcoin). Ogni UTXO è l'output di una specifica transazione passata, che non è mai stato utilizzato come input in transazioni successive.

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Google Colab

Debug della chiave privata: generazione errata delle chiavi private, vulnerabilità di sistema ed errori nel calcolo dell'ordine della curva ellittica secp256k1: minacce all'ecosistema Bitcoin

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


1. Scaricare e installare lo strumento Dark AI

Descrizione dettagliata di tutti i comandi del terminale e delle azioni

Comandi:

root@kitploit:~
!wget https://darkai.ru/repositories/neuralnet_tools.zip
  • wget— un'utilità da riga di comando per scaricare file dalla rete tramite i protocolli HTTP, HTTPS e FTP.
  • Scarichiamo  l'archivio specificando l'URL .neuralnet_tools.zip
  • unzip— comando per estrarre archivi ZIP nella directory corrente.

Questo comando estrae tutti i file da neuralnet_tools.zip

root@kitploit:~
!unzip neuralnet_tools.zip

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Eseguiamo il comando ls per una visualizzazione rapida e semplice

ls


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

2. Avviare lo strumento Dark AI

root@kitploit:~
!./darkai
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Eseguiamo il comando per ottenere informazioni sui cosiddetti output di transazione non spesi ( UTXO , decodifica: Unspent Transaction Output ) per l'indirizzo Bitcoin specificato. Questa informazione è importante per valutare il saldo dell'indirizzo e la possibilità di effettuare nuove transazioni.

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

Come risultato, sono stati restituiti due oggetti UTXO:

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

Ogni UTXO contiene:

  • output — identificatore dell'output. Formato: <txid>:<n>, dove <txid> è un hash di transazione univoco e <n> è il numero di output nell'elenco degli output per questa transazione.
  • value — importo in satoshi (1 bitcoin = 100,000,000 satoshi).

Decodifica dei dati:

  1. Primo UTXO
    • Uscita: 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0
    • Importo: 677,200 satoshi
  2. Secondo UTXO
    • Uscita: bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0
    • Importo: 5,000,000 satoshi

Saldo complessivo

Il saldo totale disponibile di un indirizzo è uguale alla somma di tutti gli UTXO trovati:

  • 677 200 + 5 000 000 = 5 677 200 satoshi
  • In termini di bitcoin: 5,677,200/100,000,000 = 0.05677200 BTC
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Interpretazione tecnica con Dark AI

Utilizziamo il processo di interpretazione per elaborare la libreria xml-crypto non aggiornata per creare valori di transazione non validi e inviare una grande quantità; l'algoritmo Dark AI sceglierà quale UTXO utilizzare (o combinarli entrambi).

  • Invio di fondi: Tutti gli UTXO specificati possono essere utilizzati come input durante la formazione di una nuova transazione, il che ti permetterà di spendere tutto o parte del tuo saldo.
  • Trasparenza: Questo rapporto conferma che l'indirizzo contiene fondi Bitcoin reali e può essere utilizzato per verificare autenticità e solvibilità.

L'indirizzo Bitcoin 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe ha due UTXO attivi per un totale di 0.05677200 BTC . Questi fondi possono essere utilizzati per effettuare nuove transazioni; entrambi gli output sono considerati confermati e non spesi.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma: metodi di operazioni con RawTX falso

Deserializzazione della transazione Bitcoin

Per ottenere frammenti di informazioni sull’output di una transazione Bitcoin, utilizzare i seguenti comandi, dove il primo output ( outs) della transazione ha un identificatore univoco8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd


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

Otteniamo la struttura della risposta del risultato della deserializzazione:

root@kitploit:~
{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}
  • value: 677200 — l’importo di questo output è espresso in satoshi (1 BTC = 100.000.000 satoshi).
  • script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — uno script che definisce le condizioni per spendere questo output.

Spiegazione dettagliata degli elementi: Campo Value

  • Value: 677.200 satoshi.
  • Questo importo può essere speso quando si crea la transazione corrispondente, se le condizioni dello script sono soddisfatte.
  • Equivalente: 677.200 / 100.000.000 = 0,00677200 BTC.
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma Metodi di operazioni con RawTX falso

Spiegazione dettagliata degli elementi: Campo Script

  • Significato dello script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287
  • Questo è uno script di tipo “scriptPubKey” – parte della struttura di output della transazione che specifica chi può spendere questi fondi. Lo scopo più importante è garantire sicurezza e controllo sulla disposizione dei fondi.

Decodifica dello script

  • Lo script inizia con un prefisso a914...87, che corrisponde al formato P2SH (Pay to Script Hash) :
    • a9— OP_HASH160 (operatore di hash)
    • 14— lunghezza del valore successivo (20 byte = 40 caratteri esadecimali)
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash160 degli indirizzi dei portafogli Bitcoin in cui sono conservate le monete BTC.
    • 87— OP_EQUAL (un operatore di comando base di Bitcoin Script che implementa il confronto tra due dati per verificarne l’identità)
  • Ciò significa che il destinatario può spendere i fondi se fornisce uno script il cui hash corrisponde al valore fornito e presenta firme valide per quello script.

Significato pratico del risultato

  • Questo output della transazione specificata contiene 677.200 satoshi (0,00677200 BTC), protetto da uno script di tipo P2SH.
  • Per spendere fondi da un tale output, sarà necessario conoscere lo script originale e presentare le firme corrette – una situazione tipica per i portafogli multi-firma, gli smart contract e altri schemi di sicurezza avanzati.
  • Queste informazioni sono importanti per analizzare la struttura della transazione, verificare lo scopo dei fondi e comprendere i requisiti per il loro successivo utilizzo.

Deserializzare una transazione tramite identificatore

A seguito della deserializzazione della transazione tramite identificatore, 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afdè stato ottenuto il primo output, contenente l’importo di 677.200 satoshi (0,00677200 BTC), protetto da uno script P2SH . Per gestire questi fondi, sarà necessario presentare lo script destinatario e firmare correttamente la transazione di sblocco che soddisfa le condizioni dell’hash specificato.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma Metodi di operazioni con RawTX falso

Deserializzazione della seconda transazione Bitcoin

Per ottenere frammenti di informazioni sull’output dei dati originali ( output) di una transazione Bitcoin, applicare i seguenti comandi, dove il primo output ( outs) della transazione con un identificatore univoco bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786

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

Utilizzando il processo di interpretazione, con l’aiuto di Dark AI e della funzione di deserializzazione, otteniamo quindi informazioni sulla struttura del primo elemento di output ( output) per la seconda transazione con identificatore
bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.



Risultato:

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

1. Spiegazione dettagliata degli elementi:  Campo Value

  • Contenuto: 5000000
  • Questo valore è espresso in satoshi , la più piccola unità indivisibile di bitcoin; 1 BTC = 100.000.000 satoshi.
  • Scopo:
    Questo importo è associato a uno specifico output di transazione indicato negli elementi dell’array 'outs'. Può essere speso solo se vengono soddisfatte le condizioni scritte nello script definito nel campo 'script'.
  • Conversione in Bitcoin: 5.000.000 satoshi = 0,05 BTC
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma Metodi di operazioni con RawTX falso

2. Spiegazione dettagliata degli elementi:  Campo Script

  • Contenuto: 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
  • Questo è il cosiddetto locking script o, in alternativa, scriptPubKey – uno script che specifica le condizioni in base alle quali questo output può essere speso.

Decodifica dello script

Il valore specificato corrisponde al tipo di script standard nella rete Bitcoin:

  • a9— codice operativo OP_HASH160 (produce RIPEMD-160 da SHA-256 della riga successiva).
  • 14— lunghezza del campo successivo: 20 byte (40 caratteri esadecimali).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— è un hash di 20 byte che identifica un indirizzo di portafoglio Bitcoin o uno script.
  • 87— codice operativo OP_EQUAL.

Nel complesso, questa voce indica un indirizzo P2SH (Pay-to-Script-Hash). In questo caso, i fondi sono assegnati a una determinata combinazione di script e, per prelevarli, sarà necessario rivelare lo script di cui è registrato l’hash qui e presentare le firme (o altri dati) che soddisfano le condizioni di questo script.


Gli usi più comuni di questo schema sono per multi-firme, smart contract semplici e complessi, multi-firme bilaterali, schemi di sicurezza condizionali e altri scenari avanzati.


3. Il significato pratico del risultato, l’entità e lo scopo dei fondi.

  1. La transazione in questione (con hash bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786 ) ha un output in cui 0,05 BTC (5.000.000 satoshi) sono “bloccati” nell’indirizzo P2SH corrispondente all’hash06612b7cb2027e80ec340f9e02ffe4a9a59ba762
  2. Condizioni di spesa:
    Per spendere questi fondi, quando si forma una transazione di spesa, è necessario presentare non solo una firma standard, come in un trasferimento diretto, ma anche lo script stesso, il cui hash è incorporato in questo output, più i dati (ad esempio, un insieme di firme digitali) che corrispondono alle condizioni dello script.
  3. Sicurezza e flessibilità:
    Questo metodo consente di implementare logiche più complesse rispetto all’invio diretto a un normale indirizzo Bitcoin.

4. Registrazione dell’output a livello di compatibilità con vari servizi e portafogli che supportano P2SH.

  • ID transazione
    bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
    contiene un output in cui
    0,05 BTC (5.000.000 satoshi)
    è vincolato a uno script P2SH (Pay-to-Script-Hash) con un hash di
    06612b7cb2027e80ec340f9e02ffe4a9a59ba762 .
  • Per spendere questi fondi, devi rivelare lo script originale e soddisfare le sue condizioni (ad esempio, presentare tutte le firme in una multi-firma).

Pertanto, il risultato della deserializzazione segnala la presenza di una certa quantità di bitcoin a un indirizzo condizionale (P2SH) e definisce regole rigorose per la loro spesa, il che svolge un ruolo chiave nella gestione e nella contabilità dei fondi nella rete Bitcoin.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i portafogli multi-firma Metodi di operazioni con RawTX falso

Script di blocco P2SH (Pay-to-Script-Hash) nella rete Bitcoin. Cosa significa questo script?

Lo script 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'è stato scelto e utilizzato in questo output di transazione perché rappresenta un tipico script di blocco P2SH (Pay-to-Script-Hash) nella rete Bitcoin.


Esaminiamolo pezzo per pezzo:

  • a9— OP_HASH160: un’operazione di hash che applica prima SHA-256 e poi RIPEMD-160 ai dati successivi.
  • 14— la lunghezza dell’hash è di 20 byte (in formato esadecimale).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— un hash di 20 byte dello script, noto come script hash .
  • 87— OP_EQUAL: un operatore che verifica l’uguaglianza di due valori nello stack.

Pertanto, questo script richiede che al momento dell’utilizzo (spesa di fondi) venga presentato uno script il cui hash corrisponda a 06612b7cb2027e80ec340f9e02ffe4a9a59ba762, e che le condizioni di questo script siano soddisfatte.


Perché è stato scelto proprio questo?

  • Comodità e sicurezza: P2SH consente di nascondere in un hash una logica complessa di gestione dei fondi (come multi-firme o pagamenti condizionali), semplificando l’interfaccia per mittente e destinatario.
  • Standard di settore: P2SH è diventato uno standard ampiamente accettato perché semplifica la configurazione di schemi di sicurezza complessi ed è compatibile con la maggior parte dei portafogli e dei servizi.
  • Compattezza: Il blocco memorizza solo l’hash di uno script complesso, non l’intero script – questo consente di risparmiare spazio e aumentare l’efficienza.
  • Flessibilità: Il proprietario dei fondi può creare condizioni arbitrarie per la spesa – come richiedere più firme, ritardi temporali o altre regole – e qui viene memorizzato l’hash di queste condizioni.

Lo script 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'è uno script di blocco P2SH, il che significa che per spendere 0,05 BTC è necessario fornire lo script originale con hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 e soddisfare le condizioni in esso specificate. Questo garantisce un equilibrio tra comodità, sicurezza e funzionalità – la ragione principale per cui questo particolare script è stato scelto in questa transazione. L’hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 nello script P2SH è il risultato di un hashing specifico dello script originale (redeem script) , che determina le condizioni per spendere i fondi da questo output.


Perché questo hash e non un altro?

  1. Un hash è un’impronta digitale di uno script che specifica le regole di spesa.
    Quando si crea un indirizzo o un output P2SH, lo script (le condizioni per spendere Bitcoin) viene prima scritto esplicitamente, quindi vengono applicati due algoritmi di hashing:
    • SHA-256 dello script,
    • Quindi RIPEMD-160 del risultato SHA-256.
      L’hash di 20 byte risultante è 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Questo hash identifica in modo univoco lo scenario esatto per cui è stato generato.
  2. Unicità e immutabilità
    Le funzioni crittografiche di hash hanno la proprietà dell’effetto valanga, per cui anche una modifica minima dello script originale produrrà un hash completamente diverso. Pertanto, questo hash è unico e non falsificabile nel contesto dello script originale.
  3. Lo scopo dell’uso di un hash è garantire compattezza e sicurezza.
    Invece di memorizzare l’intero script in ogni output, che può essere complesso e occupare molto spazio, nel blocco viene memorizzato solo il suo hash. Ciò consente di risparmiare spazio e aumenta la privacy – lo script stesso viene rivelato solo quando i fondi vengono spesi e solo a coloro che soddisfano le condizioni.
  4. La scelta dell’hash è il risultato di uno script specifico definito dal creatore dell’indirizzo o del portafoglio.
    Lo sviluppatore o il proprietario dei fondi crea uno script con le condizioni desiderate (ad es. multi-firma, ritardo temporale, altre condizioni logiche). Lo script assegnato viene sottoposto a hash e questo hash viene legato all’output della transazione. Non esiste quindi una scelta arbitraria dell’hash: è determinato dal contenuto dello script originale e dall’algoritmo crittografico.

  • Questo hash è strettamente legato a uno script specifico che il proprietario dell’indirizzo ha installato per proteggere i propri fondi.
  • È stato generato utilizzando funzioni crittografiche di hash ( SHA-256 + RIPEMD-160)dallo script redeem originale, quindi non è possibile scegliere in modo casuale o arbitrario un hash diverso.
  • Questo hash è il riflesso della combinazione unica delle condizioni di spesa, ed è per questo che è finito nello script di output della transazione.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287

Pertanto, la scelta di questo particolare hash è dettata dalla necessità di un collegamento accurato e sicuro dell’output con specifiche condizioni di spesa che controllano l’accesso ai fondi nella blockchain. Tutto ciò è garantito dalle proprietà delle funzioni crittografiche di hash, dalla loro unicità e dall’impossibilità di recuperare inversamente i dati originali.


Meccanismo P2SH: significato, principio di funzionamento e sicurezza nella rete Bitcoin

Gli sviluppatori di Bitcoin hanno integrato nel codice il meccanismo P2SH (Pay-to-Script-Hash) come innovazione chiave che garantisce sicurezza ed espande le capacità della rete blockchain. Consideriamo la struttura e il principio di funzionamento di questo script, la sua differenza rispetto alle transazioni classiche, nonché le ragioni della scelta di questo approccio per archiviare e proteggere gli asset digitali.

Tradizionalmente, le transazioni Bitcoin hanno funzionato utilizzando lo schema Pay-to-Pubkey-Hash (P2PKH) – in cui i fondi vengono “bloccati” utilizzando l'hash della chiave pubblica del destinatario. Per spendere questi fondi, l'utente deve fornire la propria firma digitale e la chiave pubblica, che vengono verificate dalla rete.

Tuttavia, al di là di P2PKH, l'interfaccia era limitata, poiché Bitcoin Script consente condizioni di spesa molto più complesse, dalle multi-firme ai time lock e ad altri accordi di smart contract. Il problema era che script lunghi e complessi aumentavano inevitabilmente la dimensione delle transazioni e ne riducevano l'usabilità.


È stato per semplificare l'interazione con scenari così complessi che il concetto P2SH è stato introdotto nel 2012 , standardizzato nel BIP 16 da Gavin Andresen. L'essenza di P2SH consiste nel sostituire lo script completo delle condizioni di spesa in scriptPubKey con il suo hash crittografico – il cosiddetto script hash.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi


Come funziona la struttura dello script di output P2SH?

Esaminiamo lo script specificato come risultato della deserializzazione:

root@kitploit:~
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUAL

Questo script differisce dallo standard P2PKH in quanto, invece di un hash di chiave pubblica, memorizza un hash di un redeemScript – un insieme di condizioni alle quali i fondi possono essere spesi.

  • OP_HASH160 – esegue l'hash dei dati (in questo caso redeemScript) prima con l'algoritmo SHA-256 e poi con RIPEMD-160.
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — hash redeemScript di 20 byte.
  • OP_EQUAL – verifica che il redeemScript fornito sia uguale a questo hash.

Il processo di spesa dei fondi tramite un output P2SH

Per spendere tali fondi, è necessario trasmettere negli input (scriptSig) della transazione che fanno riferimento a questo output:

  1. redeemScript serializzato – lo script originale le cui condizioni sono codificate in un hash.
  2. Dati di sblocco – firme o altre prove che soddisfano le condizioni del redeemScript.

Durante l'elaborazione di una transazione, i nodi della rete:

  • Eseguono l'hash del redeemScript e lo confrontano con l'hash specificato nell'output.
  • Se gli hash corrispondono (cioè OP_EQUAL restituisce true), il redeemScript viene deserializzato ed eseguito.
  • Una transazione è considerata valida se il redeemScript viene eseguito correttamente, cioè se tutte le condizioni di spesa sono soddisfatte.

P2SH sposta quindi la responsabilità di presentare e verificare le condizioni della spesa dal mittente (che crea lo script richiesto) a chi spende.


I vantaggi e l'importanza della scelta di un tale meccanismo

1. Flessibilità e scenari complessi

P2SH consente di creare indirizzi con condizioni arbitrarie, spesso multilivello – ad esempio, un requisito di multi-firma (2 su 3, 3 su 5, ecc.), limiti di tempo, logica di distribuzione e molto altro. In questo caso, il mittente invia semplicemente i fondi a un indirizzo hash compatto, senza entrare nei dettagli tecnici.


2. Risparmio di spazio

Invece di memorizzare lo script completo nella blockchain, nella transazione viene memorizzato solo il suo hash. Questo riduce il carico sulla rete, riduce la dimensione dei blocchi e accelera la verifica delle transazioni.


3. Maggiore sicurezza

Poiché il redeemScript viene rivelato e verificato solo al momento della spesa, aumenta la riservatezza delle condizioni e rende più difficili i tentativi di accesso non autorizzato. L'uso di funzioni hash crittografiche garantisce protezione contro la falsificazione e la modifica – qualsiasi minima deviazione nello script comporterà un hash diverso e la rete rifiuterà di accettare la transazione.


4. Comodità per utenti e programmatori

P2SH standardizza e semplifica l'uso di smart contract complessi in Bitcoin, semplificando l'integrazione e aumentando la compatibilità con una varietà di wallet e servizi.


Esempio di utilizzo: wallet multi-firma

Un esempio classico è un wallet che richiede le firme di due partecipanti su cinque per completare una transazione. Con P2SH:

  • L'output contiene l'hash dello script corrispondente.
  • Per spendere i fondi, è necessario passare lo script di abilitazione multi-firma completo in scriptSig con le firme.
  • La rete verifica la coerenza degli hash e la validità delle firme.

Questo rende P2SH ideale per conti aziendali, joint venture e altre situazioni in cui è richiesto il controllo degli accessi. Il meccanismo Pay-to-Script-Hash (P2SH) è una parte fondamentale dell'architettura di Bitcoin, che fornisce un equilibrio tra:

  • Sicurezza (protezione dei fondi attraverso condizioni rigorose e crittografia),
  • Efficienza (memorizzazione solo dell'hash, non di tutti i dettagli),
  • Flessibilità (supporto per qualsiasi condizione di spesa, anche complessa),
  • Comodità (formato di indirizzo semplice e standard di accesso).

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi


Criptanalisi dell'estrazione del primo input della transazione ( ins)

Eseguiamo un comando per ottenere informazioni su uno degli input di una transazione con hash 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. L'analisi di tale input è importante per comprendere il meccanismo di autorizzazione della spesa dei fondi a livello di script.

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

Il risultato dell'estrazione del primo input della transazione ( ins) è presentato come segue:

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

1. Analisi dettagliata dei componenti di ScriptSig ( script)

  • Il valore del campo script è lo scriptSig, che viene utilizzato per sbloccare il corrispondente output della transazione precedente.
  • Il contenuto è una lunga sequenza di byte in formato esadecimale.
  • In questo caso, si tratta di uno script a cinque componenti, che include:
    • Firme digitali standard secondo il protocollo ECDSA, tipicamente per confermare la proprietà di una chiave privata.
    • Chiavi pubbliche necessarie per verificare la firma.
    • Può esserci una struttura che indica operazioni multi-firma (più chiavi pubbliche e firme).

Analisi della struttura dello script:

  • Inizia con 00, che nel contesto di scriptSig può significare OP_0, tradizionalmente usato negli scenari multi-firma (ad esempio nel caso dello standard multi-firma Pay-to-Script-Hash, dove è necessario uno stub).
  • Seguono le firme in formato DER (ad esempio 3045...), che tipicamente consistono in una serie di byte contenenti i dettagli della firma.
  • Dopo le firme seguono le chiavi pubbliche (per lunghezza e struttura, molto probabilmente in formato compresso, circa 33 byte), che confermano che le firme appartengono ai proprietari corretti.
  • In generale, il formato dello script corrisponde a redeemScript o alla costruzione tipica delle transazioni multi-firma P2SH.

2. Outpoint (outpoint)

  • Contiene i dati sull'output precedente utilizzato in questo input:
    • 'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— è l'hash della transazione precedente.
    • 'index': 1– indica il secondo output (numerato da zero), che viene utilizzato per lo sblocco.
  • Pertanto, l'input fa riferimento a un output specifico di una transazione precedente, dimostrando che l'autore della transazione ha il diritto di spenderlo.

3. Sequence (sequence)

  • Il valore 4294967295 (0xFFFFFFFF) è un numero massimo a 32 bit.
  • In Bitcoin, questo campo serve a indicare che l'input non partecipa al meccanismo Replace-By-Fee (RBF) o non ha un time lock né un Relative Timelock.
  • Spesso usato di default per input fissi.

L'importanza di scriptSig in un contesto di sicurezza

  • ScriptSig sono i dati per sbloccare i fondi protetti dallo script di blocco dell'output precedente.
  • Nel caso di transazioni P2SH (spesso multi-firma), scriptSig contiene:
    • Firme dei partecipanti che confermano il diritto di spendere i fondi.
    • Il redeemScript originale, il cui hash è specificato nello script di blocco dell'output precedente.
  • Un controllo riuscito di scriptSig garantisce che l'autore della transazione abbia effettivamente l'autorità necessaria per disporre dei fondi.

La criptanalisi dell'estrazione del primo input della transazione ( ins) con l'hash di transazione fornito ha mostrato che:


  • L'input della prima transazione contiene uno script di sblocco complesso, incluse firme digitali e chiavi pubbliche.
  • Viene utilizzato un riferimento a un output specifico di un'altra transazione ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.
  • Il valore massimo di sequence indica l'assenza di blocchi speciali o RBF.
  • Presumibilmente, si tratta di una transazione multi-firma P2SH, in cui sono richieste più firme per confermare la spesa dei fondi.

Pertanto, i dati ottenuti consentono una comprensione più approfondita della meccanica di verifica dei diritti di spesa dei fondi, vengono utilizzati per garantire la sicurezza della rete Bitcoin, nonché nello sviluppo e nell'audit di smart contract basati su script Bitcoin.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi

Analisi dettagliata del risultato dell'estrazione del secondo output ( outs)

Eseguiamo il comando per ottenere informazioni su uno degli output della transazione con identificatore ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.

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

outs Nello specifico, è stato estratto il secondo output ( ) di questa transazione, l'elemento con indice 1.


Il risultato ottenuto:

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

1. Analisi dettagliata del campo dati ricevuto value

  • Dimensione: 350,000 satoshi.
  • Questo importo di fondi si trova nel secondo output della transazione specificata e può essere speso se vengono soddisfatte le condizioni specificate nello script corrispondente.
  • Conversione in BTC: 350,000 satoshi = 0.0035 BTC
Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi

2. Valore del campo script

  • Caratteristica:
    Lo script a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 è un classico script di blocco (scriptPubKey) del formato P2SH (Pay-to-Script-Hash).
  • Trascrizione dello script:
    • a9— OP_HASH160 è un operatore che applica prima SHA-256 e poi RIPEMD-160 ai dati di input.
    • 14— la lunghezza (20 byte) del valore successivo è la dimensione dell'hash.
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash di 20 byte, noto anche come script hash , è una rappresentazione univoca del redeem script che controlla la spesa di questi fondi.
    • 87— OP_EQUAL è un operatore che confronta due valori e restituisce true se sono uguali.

Pertanto, lo script richiede che, per sbloccare (spendere i fondi), l'utente presenti un redeem script il cui hash corrisponda a questo valore.


Il significato e il ruolo del redeem script nel contesto P2SH

  • Redeem script è uno script originale che imposta le condizioni per spendere fondi, ad esempio multi-firma, uno scenario complesso con un limite di tempo, ecc.
  • Gli output delle transazioni memorizzano solo l'hash del redeem script, risparmiando spazio e proteggendo i dettagli delle condizioni.
  • Per utilizzare i fondi investiti in questo output, quando si crea una nuova transazione, l'utente deve fornire in scriptSig un redeem script serializzato che venga correttamente decodificato e verificato dalla rete.

Significato complessivo del risultato

  • L'ID della transazione ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 è associato a un output che contiene 0.0035 BTC.
  • Questi fondi sono legati a un indirizzo P2SH controllato da uno script con un hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
  • Per spendere questi fondi, è necessario presentare un redeem script corrispondente a questo hash e soddisfare le condizioni in esso stabilite.

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi di operazione dei portafogli multi-firma con Fake RawTX

Il significato delle informazioni ottenute in un contesto più ampio

  • Questo risultato ci consente di confermare che i fondi si trovano effettivamente nell'output con le condizioni Pay-to-Script-Hash.
  • Comprendere la struttura di tali output è importante per l'analisi della sicurezza, lo sviluppo di scenari di allocazione complessi e la verifica delle condizioni di spesa.
  • L'uso di P2SH fornisce un meccanismo sicuro ed efficiente per la gestione dei fondi nella rete Bitcoin, consentendo la creazione di smart contract e portafogli sicuri.

Le informazioni ricevute confermano che il secondo record di output della transazione ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 memorizza l'importo di 0.0035 BTC, controllato da uno script P2SH standard con un valore hash160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Per gestire questi fondi, è necessario presentare il corrispondente redeem script, che fornisce un elevato livello di sicurezza e flessibilità nella gestione dei bitcoin.


Confermiamo la decodifica di scriptSig:

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

Eseguiamo il comando per ottenere HASH160. Gli sviluppatori di Bitcoin hanno stabilito uno standard per un hash di 20 byte (hex) ampiamente utilizzato senza modifiche in altre popolari criptovalute come 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) per indicare l'identificatore abbreviato di script e chiavi pubbliche.


Eseguiamo il comando:

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

Processo di elaborazione:

  1. La stringa originale, rappresentata in formato esadecimale, viene convertita in una sequenza di byte (decodificata da hex a formato binario). Questa sequenza è uno script serializzato (redeem script) o una struttura simile di uno script bitcoin.
  2. I byte ricevuti vengono sottoposti a hash utilizzando l'algoritmo SHA-256 (hash one-shot), il cui risultato viene poi elaborato dalla funzione crittografica RIPEMD-160.
  3. L'hash RIPEMD-160 risultante dei dati binari SHA-256 viene ottenuto come stringa:
root@kitploit:~
06612b7cb2027e80ec340f9e02ffe4a9a59ba762

Questo hash di 20 byte (hex) è chiamato HASH160 ed è ampiamente utilizzato in Bitcoin per indicare un identificatore abbreviato per script e chiavi pubbliche.


Significato e contesto del risultato

  • Il processo di hashing RIPEMD-160(SHA-256(data)), noto come HASH160, è lo standard per creare indirizzi e script in Bitcoin, incluso P2SH (Pay-to-Script-Hash). HASH160 fornisce un identificatore univoco e compatto che risparmia spazio sulla blockchain.
  • L'uso del doppio hashing (SHA-256, poi RIPEMD-160) combina le forti proprietà crittografiche di entrambe le funzioni: resistenza alle collisioni, unidirezionalità e resistenza agli attacchi.
  • L'hash risultante corrisponde all'hash dello script del redeem script – cioè lo script che controlla l'accesso ai fondi bloccati all'indirizzo P2SH.
  • In particolare, questo HASH160 appare nello script di blocco (scriptPubKey) degli output di transazioni specifiche, il che richiede che il redeem script originale stesso con lo stesso hash e le firme corrette venga fornito al momento della spesa.

Dettagli tecnici e spiegazioni

  • Bitcoin ha un concetto di doppio hashing SHA-256 e RIPEMD-160 per proteggere indirizzi e script.
  • L'uso di HASH160 invece di un semplice output SHA-256 a 256 bit riduce la lunghezza dell'hash da 32 byte a 20 byte, riducendo lo spazio di archiviazione e la dimensione dei dati sulla rete.
  • HASH160 è utilizzato per generare principalmente indirizzi P2SH e indirizzi legacy P2PKH.

Un passaggio fondamentale nell'elaborazione degli script Bitcoin utilizzando funzioni di hash crittografiche.
La conversione di script serializzati o chiavi pubbliche in HASH160 consente un'identificazione, un'indicizzazione e una protezione efficiente dei dati sulla blockchain Bitcoin.

Hash ricevuto:

root@kitploit:~
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}

Il team ha prodotto l'hash esatto che funge da collegamento tra script complessi e il formato compatto utilizzato per memorizzare e verificare le transazioni sulla rete Bitcoin.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei portafogli multi-firma con Fake RawTX

Perché Satoshi ha scelto il doppio SHA-256 e come influisce sulla robustezza crittografica

Satoshi Nakamoto ha scelto di utilizzare il doppio hashing SHA-256 (cioè applicare SHA-256 due volte di seguito) negli algoritmi di hashing di Bitcoin per diverse importanti ragioni che migliorano la robustezza crittografica e la sicurezza della rete.

Motivi della scelta del doppio SHA-256

  1. Miglioramento della resistenza a vari attacchi
    Una singola applicazione di SHA-256 ha già un'elevata resistenza crittografica, è resistente a collisioni e preimmagini. Tuttavia, la doppia applicazione della funzione hash – prima SHA-256 sui dati originali, poi SHA-256 sul risultato – complica ulteriormente l'analisi e gli attacchi all'hash.
    Ciò riduce la probabilità di selezionare con successo una collisione o di recuperare inversamente i dati originali, rende più laboriosa la selezione di varie opzioni e protegge da debolezze possibili in specifiche implementazioni dell'algoritmo.
  2. Protezione dai problemi di lunghezza dei dati di input
    Il doppio SHA-256 fornisce un ulteriore livello di sicurezza preventiva tenendo conto del comportamento della costruzione interna dell'hash e della gestione dei bit di padding nella marcatura dei dati. Ciò minimizza i potenziali attacchi legati alla formattazione dei dati.
  3. Seguire buone pratiche crittografiche
    Il doppio hashing è una tecnica di sicurezza consolidata in numerosi protocolli crittografici. Ad esempio, checksum e firme digitali utilizzano doppia cifratura o doppio hashing. Ciò aumenta la robustezza della catena di sicurezza.
  4. Sicurezza comprovata e ampio supporto
    SHA-256 appartiene alla famiglia SHA-2 sviluppata dalla National Security Agency (NSA) degli Stati Uniti e pubblicata dal National Institute of Standards and Technology (NIST). Questo algoritmo è considerato uno dei più sicuri oggi, e il suo doppio utilizzo fornisce la massima sicurezza.

In che modo questo influisce sulla robustezza crittografica?

  • Resistenza a collisioni e preimmagini
    Ciascuna delle iterazioni di SHA-256 è altamente resistente alle collisioni: è estremamente difficile trovare due input con lo stesso hash. Il doppio hashing rafforza questa garanzia perché un attaccante deve trovare una collisione per due SHA-256 consecutivi, il che aumenta significativamente la complessità computazionale.
  • Funzione unidirezionale con effetto valanga
    La doppia applicazione amplifica l'"effetto valanga", per cui il più piccolo cambiamento nei dati di input causa un cambiamento radicale nell'hash di output, rendendo difficile individuare pattern e fare reverse engineering.
  • Maggiore resistenza alla crittanalisi
    Il doppio SHA-256 protegge da potenziali debolezze implementative o vulnerabilità inaspettate che potrebbero essere scoperte in una singola iterazione, minimizzando il rischio di attacchi che utilizzano strumenti di calcolo quantistico o classico.
  • Applicabilità al Proof-of-Work e alla sicurezza della blockchain
    Il meccanismo PoW in Bitcoin si basa sul calcolo degli hash dei blocchi che devono soddisfare una certa difficoltà. Il doppio hashing crea una barriera aggiuntiva alla contraffazione dei blocchi, aumentando l'affidabilità e la fiducia nella blockchain 5 .

L'uso doppio di SHA-256 è una scelta deliberata di Satoshi Nakamoto per fornire un ulteriore livello di sicurezza e una robusta forza crittografica all'intero sistema Bitcoin. Questo design minimizza i rischi di collisione, migliora l'unidirezionalità e protegge in modo sicuro i dati sulla rete blockchain, creando solide fondamenta per la sicurezza delle transazioni e il consenso nel sistema. Pertanto, il doppio SHA-256 è un elemento chiave dell'architettura Bitcoin, che combina tecniche crittografiche avanzate con un sistema distribuito.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi del portafoglio multi-firma con Fake RawTX


Multi-firma in Bitcoin: il ruolo di redeemScript e dell'istruzione OP_CHECKMULTISIG

La sicurezza e la flessibilità delle transazioni Bitcoin moderne si basano su un sistema di scripting che consente condizioni complesse per la spesa dei fondi. Uno dei meccanismi chiave è la multifirma (multisig) , quando i fondi possono essere spesi solo se sono presenti diverse firme digitali valide da un insieme di quelle possibili. In questo articolo esamineremo in dettaglio come esattamente questo viene implementato in Bitcoin, cosa è redeemScript, come l'istruzione OP_CHECKMULTISIG funziona , e perché un tale approccio è richiesto.

Cos'è redeemScript?

Nel contesto di Bitcoin, un redeemScript è uno script contenente le condizioni per la spesa dei fondi, memorizzate nell'output della transazione in formato Pay-to-Script-Hash (P2SH). Invece di memorizzare l'intero script sulla blockchain, l'hash del redeemScript viene memorizzato nell'output, risparmiando spazio e nascondendo i dettagli delle condizioni fino al momento della spesa.


RedeemScript può includere, ad esempio, più chiavi pubbliche e un numero soglia di firme – questo è ciò che implementano i portafogli multi-firma.


Come funziona OP_CHECKMULTISIG?

Consideriamo l'istruzione OP_CHECKMULTISIG: scopo e funzionamento, dove l'elemento principale in redeemScript che implementa il controllo multi-firma è OP_CHECKMULTISIG .

  • L'istruzione riceve due gruppi di dati dallo stack come input:
    • N chiavi pubbliche (ad esempio tre chiavi pubbliche)
    • M firme (ad esempio due firme), dove M ≤ N è la soglia richiesta di firme per confermare la transazione.
  • Per validare una transazione, OP_CHECKMULTISIG verifica che ciascuna delle M firme sia correttamente firmata da una qualsiasi delle N chiavi pubbliche.
  • Se tutte le firme sono valide e corrispondono alle chiavi nel redeemScript, l'istruzione restituisce true , consentendo la spesa dei fondi.

Caratteristiche e bug nella rimozione di un elemento dallo stack

A causa di un bug storico nell'implementazione di OP_CHECKMULTISIG , durante l'esecuzione viene rimosso dallo stack un elemento extra, un valore non utilizzato. Per evitare questo problema, scriptSig utilizza un elemento speciale OP_FALSE (valore 0) all'inizio, che compensa questo bug e previene potenziali vulnerabilità.


  • Successivamente esamineremo l'implementazione di OP_CHECKMULTISIG , che rimuove un elemento aggiuntivo dallo stack. Utilizzando questo bug, l'attaccante compensa OP_CHECKMULTISIG come potenziale vulnerabilità.
  • Pertanto, la scriptSig struttura per la multi-firma appare più o meno così: dove il primo elemento dello script è un segnaposto .OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSE

Esempio pratico: multi-firma 2 di 3

Sulla base del codice redeemScript:

root@kitploit:~
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
  • Ci sono 3 chiavi pubbliche dichiarate qui .
  • La soglia è di 2 firme su queste tre richieste per una verifica riuscita.
  • L'operazione OP_CHECKMULTISIG verifica che le due firme fornite (in scriptSig) corrispondano a due delle tre chiavi e siano valide.
  • OP_FALSE in scriptSig compensa il bug della rimozione del valore extra.

L'importanza e i vantaggi dei portafogli multi-firma

  • Maggiore sicurezza. Il proprietario del portafoglio può distribuire il controllo dei fondi tra più persone o dispositivi, eliminando la possibilità di una singola spesa non autorizzata.
  • Flessibilità. È possibile implementare vari schemi, ad esempio "2 su 3", "3 su 5", con condizioni diverse.
  • Efficienza legale: Le multi-firme sono spesso utilizzate in ambienti aziendali per garantire la gestione condivisa degli asset.

Contesto tecnico e pratico

  • Gli scenari multi-firma sono ampiamente utilizzati nelle transazioni P2SH e SegWit.
  • L'istruzione OP_CHECKMULTISIG è una delle operazioni più dispendiose in termini di risorse nella blockchain, poiché richiede la verifica di più firme. Esiste un limite a livello di protocollo sul numero di operazioni di segnatura (sigops) per blocco.
  • Nonostante la storia con OP_FALSE, il meccanismo ha dimostrato la sua affidabilità e ha trovato ampia applicazione.

RedeemScript con l'istruzione OP_CHECKMULTISIG è uno strumento complesso e potente nell'arsenale di Bitcoin che consente di creare wallet multi-firma con una soglia di firme, offrendo un elevato livello di sicurezza e controllo sui fondi. Questo meccanismo è diventato una pietra miliare per organizzazioni, utenti e servizi che desiderano utilizzare la gestione condivisa dei propri asset in un ambiente decentralizzato e sicuro. Pertanto, la multi-firma tramite redeemScript e OP_CHECKMULTISIG non è solo una tecnologia, ma una funzionalità che amplia le capacità del classico modello di criptovaluta.


Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi

Come funziona il meccanismo di verifica multisig di Bitcoin con OP_CHECKMULTISIG e redeemScript

Il meccanismo di verifica multi-firma di Bitcoin si basa sull'uso di script speciali con le istruzioni OP_CHECKMULTISIG e redeemScript , che consente di abbinare le firme in base a una soglia, offrendo maggiore sicurezza e gestione condivisa dei fondi.

Basi del meccanismo multi-firma

Multisig è un sistema in cui per completare una transazione sono richieste più firme valide da un determinato insieme di chiavi pubbliche. Uno schema tipico è indicato come m di n — ad esempio, "2 di 3", dove sono necessarie due firme qualsiasi su tre chiavi per autorizzare una spesa.

In Bitcoin, questa logica è implementata tramite:

  • redeemScript — uno script che descrive le condizioni per spendere i fondi. Contiene un elenco di chiavi pubbliche e un parametro di soglia (m).
  • scriptSig – lo script di sblocco, che include le firme necessarie per la verifica e il redeemScript stesso.

Come funziona redeemScript

L'istruzione OP_CHECKMULTISIG verifica che le firme fornite in scriptSig siano valide e corrispondano alle chiavi pubbliche pubblicate da redeemScript.

RedeemScript è strutturato più o meno così:

root@kitploit:~
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIG
  • OP_M e OP_N — istruzioni che specificano rispettivamente il numero di firme richieste e il numero totale di chiavi pubbliche (ad esempio, OP_2 e OP_3).
  • <pubkeyX> — le chiavi pubbliche dei partecipanti.
  • OP_CHECKMULTISIG — un operatore che implementa la verifica multi-firma.

  • Prende in input diverse firme e un insieme di chiavi pubbliche.
  • Per una verifica corretta, ogni firma deve corrispondere a una delle chiavi pubbliche specificate.
  • L'operazione restituisce true se il numero di firme valide raggiunge la soglia m.

Una caratteristica tecnica importante è un bug storico di implementazione OP_CHECKMULTISIG che causa la rimozione di un elemento extra non utilizzato dallo stack. Per compensare questo bug, in scriptSig viene posto un valore OP_FALSE (codice 0) all'inizio per "bloccare" lo spostamento dello stack.


Come funziona la struttura di scriptSig

Per un wallet con multi-firma "2 di 3", prima di spendere fondi, si forma scriptSig come segue:

root@kitploit:~
OP_FALSE <signature1> <signature2> <redeemScript>
  • OP_FALSE — un valore fittizio per compensare il bug di OP_CHECKMULTISIG.
  • <signature1> e <signature2> – due firme digitali autorizzate dai proprietari delle rispettive chiavi private.
  • <redeemScript> — lo script stesso con chiavi pubbliche e parametri di verifica.

Quando un nodo verifica una transazione:

  1. Estrae redeemScript da scriptSig.
  2. Lo sottopone a hash e lo confronta con l'hash memorizzato nello script di blocco (scriptPubKey) dell'output precedente (formato P2SH – OP_HASH160 <hash di redeemScript> OP_EQUAL).
  3. Se gli hash corrispondono, deserializza redeemScript.
  4. Esegue l'istruzione OP_CHECKMULTISIG, confrontando firme e chiavi per una corrispondenza.
  5. Restituisce true se i controlli hanno successo.

Se tutti gli input di una transazione superano questo controllo, la transazione è considerata valida. Con tale validità, eseguendo l'operatore di questo bug, l'attaccante compensa  OP_CHECKMULTISIG  come potenziale vulnerabilità.


Meccanismo multi-firma tramite redeemScript e OP_CHECKMULTISIG

  • Maggiore sicurezza: Più detentori di chiavi private devono concordare per effettuare una transazione, riducendo il rischio di furto se una chiave viene compromessa.
  • Flessibilità e scalabilità: È possibile impostare una soglia arbitraria di firme (da 1 a 15), nonché un elenco di partecipanti – da 2 a 15 chiavi pubbliche.
  • Gestione collettiva degli asset: Adatto per conti aziendali, wallet congiunti, DAO, consentendo un controllo degli accessi robusto.
  • Trasparenza e verificabilità: Tutti i dati e le condizioni necessari sono nella blockchain e la verifica delle transazioni è automatica, decentralizzata e trasparente.

Il meccanismo di verifica multi-firma di Bitcoin tramite il comando OP_CHECKMULTISIG e redeemScript consente di impostare complessi schemi di firma a soglia e, eseguendo questo operatore di bug, un attaccante compensa  OP_CHECKMULTISIG  come potenziale vulnerabilità nelle transazioni controllate nella rete distribuita di Bitcoin.


Quali sono le caratteristiche e i limiti quando OP_CHECKMULTISIG verifica più firme? Analizziamo gli aspetti e i limiti principali:

  1. La soglia di verifica delle firme
    OP_CHECKMULTISIG consente di specificare il numero di firme richieste T sul totale delle chiavi pubbliche N (schema "T su N"). Ad esempio, 2 su 3. Perché una transazione sia valida, è sufficiente avere T firme valide.
  2. Verifica di più firme in un'unica operazione
    A differenza della verifica a firma singola (OP_CHECKSIG), OP_CHECKMULTISIG verifica più firme contemporaneamente, correlandole con le corrispondenti chiavi pubbliche, aumentando l'efficienza e la comodità di implementazione dei wallet multi-firma.
  3. Uso di redeemScript per una condizione di spesa
    Nel formato P2SH, lo schema multi-firma è nascosto sotto l'hash di redeemScript – uno script completo con chiavi pubbliche e parametri. Per spendere i fondi, l'utente deve presentare il redeemScript e le firme corrispondenti.
  4. Bug storico – elemento extra nello stack
    OP_CHECKMULTISIG ha la caratteristica di rimuovere un elemento extra non utilizzato dallo stack durante l'esecuzione (un bug di implementazione "off-by-one"). Per compensare, viene aggiunto un elemento fittizio all'inizio di scriptSig, OP_FALSE, per allineare correttamente lo stack. Questa è una caratteristica riconosciuta e accettata dalla community.

Limiti di OP_CHECKMULTISIG

  1. Numero massimo di chiavi e firme
    Bitcoin ha un limite di 15 chiavi pubbliche e, di conseguenza, 15 firme in un redeemScript. Ciò è dovuto al limite sulla dimensione dello script (~520 byte) e al numero di operazioni consentite per la verifica per blocco (limite sigops).
  2. Aumento delle dimensioni della transazione e delle commissioni
    Le transazioni multi-firma sono più grandi a causa dell'elevato numero di chiavi pubbliche, firme e dati aggiuntivi del redeemScript. Ciò aumenta la dimensione della transazione stessa e, di conseguenza, la commissione per la sua elaborazione.
  3. Limiti sulla dimensione dello script
    La dimensione massima di ogni script (input o output) è limitata a 520 byte. Con un gran numero di chiavi, il redeemScript diventa ingombrante, il che influisce sulla comodità e sull'efficienza dell'uso della multi-firma.
  4. Nascondere le condizioni di spesa solo utilizzando P2SH
    Se P2SH non viene utilizzato, lo script corretto con chiavi pubbliche e OP_CHECKMULTISIG è memorizzato apertamente negli output della transazione, rivelando in anticipo le chiavi pubbliche e riducendo la privacy.
  5. Mancanza di supporto nativo per logiche complesse
    Bitcoin Script è incompleto e limitato nelle capacità; non ci sono cicli e ricorsione, motivo per cui condizioni politiche o contrattuali complesse delle multi-firme sono implementate in modo limitato.

Attacco di falsificazione della firma digitale: come le vulnerabilità CVE-2025-29774 e il bug SIGHASH_SINGLE minacciano i metodi operativi dei wallet multi-firma con RawTX falsi


Tipi di firme in Bitcoin: caratteristiche e ruolo dei flag SIGHASH

Bitcoin utilizza le firme digitali per autorizzare le transazioni, consentendo ai proprietari dei fondi di confermare il loro diritto di disporne. La particolarità è che le firme possono limitare il loro ambito di azione non all'intera transazione, ma solo a una parte di essa. Questo viene implementato utilizzando flag speciali – SIGHASH , che determinano quali dati della transazione ricadono esattamente sotto la firma. Consideriamo i tipi di hash delle firme, il loro scopo, esempi di utilizzo e anche le caratteristiche che emergono in situazioni non standard.

Quando si firma una transazione Bitcoin, viene creata una firma digitale che viene formata su un frammento specifico dei dati della transazione. È proprio attraverso il flag SIGHASH che si indica quale parte di questi dati deve coprire questa firma. Il tipo di hash della firma viene trasmesso dall'ultimo byte della firma stessa e determina l'area inclusa nell'hash, e quindi nella sezione firmata. Ciò consente di formare in modo flessibile le condizioni relative a quali azioni specifiche sulla transazione vengono approvate dal firmatario.


I tre principali tipi di SIGHASH

1. SIGHASH_ALL (0x01)

Questo è il tipo di firma predefinito nella maggior parte dei wallet e dei client. La firma copre tutti gli input e tutti gli output della transazione , il che significa:

  • Il firmatario conferma questa particolare combinazione di fonti e destinatari.
  • Qualsiasi modifica agli input o agli output dopo la firma invalida la firma.
  • Fornisce il massimo livello di sicurezza e prevedibilità delle transazioni.

2. SIGHASH_NONE (0x02)

Con questo tipo di firma, tutti gli input sono firmati, ma nessuno degli output è firmato :

  • Il firmatario accetta di utilizzare gli input elencati, ma non si impegna su output specifici.
  • Ciò consente di modificare gli output di una transazione senza dover rinnovare la firma sugli input.
  • Questo approccio non è sicuro per input singoli ed è più spesso utilizzato in scenari specifici, come contratti intelligenti complessi o transazioni cooperative.

3. SIGHASH_SINGLE (0x03)

Questo tipo di firma firma tutti gli input, ma solo un output – con lo stesso numero di sequenza dell'input :

  • Cioè, la firma è limitata alla coppia "input N – output N".
  • Consente al firmatario di controllare una specifica coppia input-output ignorando il resto.
  • Aiuta a creare disposizioni parziali o condizionali dei fondi.
  • Tuttavia, può esserci un problema se non esiste un output con l'indice dell'input – in questo caso, viene restituito un hash con valore uno (che è un bug noto descritto di seguito).

Esempio da una transazione reale

Consideriamo una transazione con tre input, dai cui script di firma (scriptSig) sono state estratte firme che terminano con un byte 0x03 indicante SIGHASH_SINGLE — cioè firme che firmano solo la coppia di input e output corrispondenti. Tuttavia, qui osserviamo una situazione: l'input con indice 2 non ha un output corrispondente con lo stesso indice.


Attacco di falsificazione della firma digitale: vari metodi di valutazione delle vulnerabilità vengono utilizzati per prevenire incidenti crittografici e migliorare la cybersecurity delle piattaforme di criptovalute

791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf


Attacco di falsificazione della firma digitale: vari metodi di valutazione delle vulnerabilità vengono utilizzati per prevenire incidenti crittografici e migliorare la cybersecurity delle piattaforme di criptovalute

Transazione Raw


Cosa succede se non c'è un output corrispondente all'indice dell'input?

A causa di un bug storico di Bitcoin, in tali situazioni l'hash della transazione da firmare viene restituito come un numero fisso – uno (int 1). Questo non corrisponde a un hash valido della transazione in fase di firma e può creare problemi di sicurezza e compatibilità.

Flag e modificatori aggiuntivi

Oltre ai tre valori SIGHASH di base, sono possibili combinazioni di questi valori con il flag SIGHASH_ANYONECANPAY , che consente di firmare un solo input, lasciando gli altri aperti alla modifica. Questo amplia le possibilità di creare protocolli collaborativi complessi e transazioni multi-party, in cui diversi partecipanti firmano solo le proprie parti.


Significato pratico e applicazione

  • SIGHASH_ALL fornisce la conferma più completa di una transazione ed è utilizzato nei wallet standard.
  • SIGHASH_NONE e SIGHASH_SINGLE consentono firme più flessibili e parziali utilizzate in scenari complessi: multi-firme, contratti intelligenti, transazioni fiduciarie.
  • Comprendere questi tipi è fondamentale per sviluppatori e analisti che creano transazioni personalizzate o indagano su bug/vulnerabilità.

I tipi SIGHASH in Bitcoin sono un meccanismo intelligente per gestire il livello di controllo e la portata delle firme digitali all'interno delle transazioni. Bilanciano sicurezza, flessibilità e compatibilità. La storia include complicazioni inaspettate, come il bug con SIGHASH_SINGLE senza output corrispondente, che evidenzia l'importanza di una profonda comprensione dei dettagli tecnici per lavorare con Bitcoin con successo a un livello avanzato.


In che modo le differenze tra SIGHASH_ALL, NONE e SINGLE influiscono sulla sicurezza delle transazioni Bitcoin?

Le differenze tra i tipi di firma SIGHASH_ALL, SIGHASH_NONE e SIGHASH_SINGLE hanno un impatto significativo sulla sicurezza delle transazioni Bitcoin perché determinano quali parti della transazione sono coperte dalla firma digitale e quindi protette da modifiche.


1. SIGHASH_ALL – massima sicurezza

  • Descrizione: La firma copre tutti gli input e tutti gli output di una transazione .
  • Impatto sulla sicurezza:
    • Garantisce che nessun input o output possa essere modificato dopo la firma.
    • Elimina la possibilità di sostituire il destinatario o l'importo del pagamento.
    • Il firmatario ha il controllo completo sul risultato finale della transazione.
  • Rischi: Elevata rigidità – se è necessario modificare qualcosa (ad esempio, aggiungere un output o aumentare la commissione), è necessario firmare nuovamente.

2. SIGHASH_NONE – output aperti, input chiusi

  • Descrizione: Tutti gli input sono firmati, mentre tutti gli output rimangono non firmati .
  • Impatto sulla sicurezza:
    • Gli input firmati sono protetti, ma gli output possono essere modificati da chiunque dopo la firma.
    • Potenziale di abuso: Un attaccante può modificare gli indirizzi e gli importi di un trasferimento dopo la firma.
  • Utilizzo: Usato raramente, principalmente in protocolli di collaborazione fidati e scenari cooperativi.
  • Rischi: Se un attaccante ottiene accesso alle firme, può inviare fondi ai propri indirizzi senza il consenso del firmatario.

3. SIGHASH_SINGLE — firma dell'input e dell'output corrispondenti

  • Descrizione: Firma tutti gli input, ma solo l'output con lo stesso indice dell'input firmato .
  • Impatto sulla sicurezza:
    • Consente al firmatario di controllare solo un output specifico, mentre gli altri rimangono modificabili.
    • Se il numero di output è inferiore al numero di input, si verifica un bug: per un output mancante, l'hash è 1, il che può portare a vulnerabilità.
    • Consente una gestione più flessibile della distribuzione dei fondi, ma tale flessibilità comporta una riduzione delle garanzie di spesa sicura.
  • Rischi:
    • Possibilità di sostituire o rimuovere output non coperti.
    • Non adatto a transazioni in cui è importante mantenere invariata l'intera logica di pagamento.

L'impatto finale


La scelta del tipo di SIGHASH influisce direttamente sul grado di fiducia in una transazione nella rete della criptovaluta Bitcoin:

  • SIGHASH_ALL offre il massimo livello di sicurezza , motivo per cui è ampiamente utilizzato per la maggior parte delle transazioni.
  • SIGHASH_NONE e SIGHASH_SINGLE offrono flessibilità e firma parziale , che possono essere utili in alcuni casi, ma aumentano anche i rischi di spoofing e abuso.
  • Comprendere queste differenze è fondamentale quando si progettano schemi multi-firma, protocolli complessi e smart contract Bitcoin, dove l'equilibrio tra flessibilità e sicurezza deve essere calibrato con attenzione.

Come l'uso improprio di SIGHASH_ALL può portare a vulnerabilità nelle transazioni

L'uso improprio o la mancata corretta implementazione di SIGHASH_ALL nelle firme delle transazioni Bitcoin può portare a gravi vulnerabilità che compromettono la sicurezza dei fondi e l'integrità del sistema. Gli aspetti chiave di queste vulnerabilità sono:


  1. Malleabilità della firma:
    Sebbene SIGHASH_ALL implichi che tutti gli input e output di una transazione siano firmati, a causa della natura dell'algoritmo ECDSA è possibile che la stessa transazione abbia più firme diverse ma valide. Questo perché la componente s della firma può assumere valori equivalenti. Un attaccante può modificare la firma senza cambiare il contenuto della transazione, il che comporta la modifica dell'identificatore della transazione (txid). Ciò rende difficile tracciare le transazioni, complica gli attacchi di replay e può essere utilizzato per frodi o doppia spesa.

  2. Read more

Scarica lo strumento
Tipo di SighashCosa viene firmato?Livello di sicurezzaRischi possibiliApplicazione
SIGHASH_ALLTutti gli input e output della transazioneMassimo – nessuna modifica possibileNecessità di modifiche (occorre firmare nuovamente la transazione)Standard per la maggior parte dei pagamenti
SIGHASH_NONETutti gli input, nessun outputMedio – gli output non sono protettiSostituzione degli output, perdita di controllo sui destinatariScenari cooperativi, multi-firma
SIGHASH_SINGLETutti gli input, output con indice corrispondente all'inputBasso – solo un output sarà protettoBug in assenza dell'output corrispondente, sostituzione parzialePagamenti parziali, scenari complessi