Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Digital-Signature-Forgery-Attack — Como as vulnerabilidades CVE-2025-29774 e o bug SIGHASH_SINGLE ameaçam os métodos operacionais de carteiras multi-assinatura com RawTX falsos | Kitploit
Ferramentas/GitHubGitHub/demining/digital-signature-forgery-attack
Análise de VulnerabilidadesExploraçãoCriptografiaCTFAprendizado e EducaçãoRecursos Curados
GitHubdemining/digital-signature-forgery-attack

Digital-Signature-Forgery-Attack

Como as vulnerabilidades CVE-2025-29774 e o bug SIGHASH_SINGLE ameaçam os métodos operacionais de carteiras multi-assinatura com RawTX falsos

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver RepositórioSite
4há 1 anoAinda não revisado
Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos Operacionais de Carteiras Multi-Assinatura com RawTX Falso

Neste artigo, analisaremos o ataque criptográfico de falsificação de assinatura digital (Digital Signature Forgery Attack), cujas consequências representam uma ameaça à segurança das transações na rede Bitcoin, uma vez que as assinaturas digitais confirmam a propriedade e a autorização das transferências de criptomoedas. Consideraremos exemplos do impacto de tais ataques no Bitcoin com base em pesquisas modernas e vulnerabilidades identificadas.

Um Ataque de Falsificação de Assinatura Digital é uma tentativa de um atacante de criar uma assinatura digital ECDSA falsa que será reconhecida como válida pela rede Bitcoin. Esse ataque permite autorizar transações sem conhecer a chave privada do proprietário, o que coloca em risco a segurança dos fundos na carteira de criptomoedas do detentor de 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

Em criptografia, uma assinatura digital fornece confirmação da autenticidade de uma mensagem ou transação. A falsificação de assinatura significa que é possível criar um par “RawTX” que será aceito pelo sistema como válido, embora na verdade não tenha sido criado pelo proprietário da chave privada. Isso abre caminho para fraudes, roubo de fundos e violação da integridade do blockchain. O Ataque de Falsificação de Assinatura Digital (DSFA) como ataque criptográfico é implementado em componentes de software que usam a biblioteca xml-crypto para verificar assinaturas de documentos XML na plataforma Node.js.


Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos Operacionais de Carteiras Multi-Assinatura com RawTX Falso

https://youtu.be/qbu1m_C1wyA


Em primeiro lugar, isso diz respeito a soluções de integração empresarial, serviços em nuvem e sistemas de login único (single sign-on), como o IBM App Connect Enterprise Certified Container e outras aplicações que dependem do xml-crypto para autenticação e autorização SAML. As vulnerabilidades de hardware não estão associadas a dispositivos físicos específicos, mas são implementadas em produtos de software que utilizam a biblioteca vulnerável.

As vulnerabilidades CVE-2025-29774 e CVE-2025-29775, conhecidas como Ataque de Falsificação de Assinatura Digital, são implementadas na biblioteca de software  xml-crypto , uma biblioteca para assinar digitalmente e criptografar documentos XML na plataforma Node.js.


Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX FalsoBoletim de Segurança: os operandos do IBM App Connect Enterprise Certified Container são vulneráveis a bypass na validação de assinatura em dados XML [CVE-2025-29774] [CVE-2025-29775]
  • IBM App Connect Enterprise Certified Container  é um software de integração e processamento de dados que usa xml-crypto para verificar assinaturas de documentos XML. As vulnerabilidades permitem que a verificação de assinatura digital seja contornada, o que leva à possibilidade de forjar e modificar mensagens assinadas, incluindo respostas SAML para autenticação e autorização.
  • Sistemas e aplicações que usam Node.js com a biblioteca xml-crypto  para verificar mensagens XML assinadas, especialmente no contexto de autenticação SAML (por exemplo, portais empresariais, sistemas de login único, serviços em nuvem). A vulnerabilidade permite que um atacante modifique mensagens XML assinadas válidas para que elas passem na verificação de assinatura, levando a bypass de autenticação e autorização, escalonamento de privilégios e falsificação de credenciais.

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX FalsoDivulgação para CVE-2025-29774 e CVE-2025-29775 (SAMLStorm).
  • As vulnerabilidades estão relacionadas à verificação incorreta de assinatura criptográfica no xml-crypto , especificamente ao tratamento do nó DigestValue, onde um atacante pode inserir comentários XML sem quebrar a verificação de assinatura.
  • Isso permite que atributos críticos de identificação e controle de acesso em documentos XML assinados sejam modificados, resultando na capacidade de contornar a segurança sem exigir credenciais ou direitos de acesso.

Assim, este código implementa algoritmos de assinatura criptográfica e verificação de assinatura para vários esquemas (RSA com diferentes hashes SHA e HMAC-SHA1), o que permite que sejam integrados em sistemas que exigem assinatura digital de dados.


Vulnerabilidade crítica no código signature-algorithms.ts

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX Falso

O código signature-algorithms.ts é usado para criar e verificar com segurança assinaturas digitais, garantindo autenticidade e integridade dos dados. As assinaturas ECDSA fornecem verificação de autoria usando uma chave privada, e o HMAC – verificação de integridade e autenticidade usando uma chave secreta. Os algoritmos usados estão em conformidade com os padrões de Assinatura Digital XML (os URIs dos algoritmos apontam para especificações W3C).


Assim, o código signature-algorithms.ts implementa algoritmos de assinatura criptográfica e verificação de assinatura para vários esquemas (ECDSA, RSA com diferentes hashes SHA e HMAC-SHA1), o que permite que sejam integrados em sistemas que exigem assinatura digital de dados.


Funcionalidade básica

  • Cada classe implementa uma interface  SignatureAlgorithm e fornece métodos para:
    • Criar Assinatura  ( getSignature): recebe os dados da assinatura e uma chave privada, retorna uma assinatura digital em formato base64.
    • Verificação de assinatura  ( verifySignature): recebe a entrada, a chave pública e a assinatura, retorna um valor booleano indicando se a assinatura está correta.
    • GetAlgorithmName  ( getAlgorithmName): Retorna um URI que identifica o algoritmo de assinatura usado.

Algoritmos suportados

  • RsaSha1  – assinatura usando RSA e a função hash SHA-1.
  • RsaSha256  – assinatura usando RSA e SHA-256.
  • RsaSha512  – assinatura usando RSA e SHA-512.
  • HmacSha1  – assinatura usando HMAC baseado em SHA-1.

Detalhes técnicos

  • Para assinaturas RSA, são usadas as classes  crypto.createSign e  crypto.createVerify com os algoritmos correspondentes (“RSA-SHA1”, “RSA-SHA256”, “RSA-SHA512”).
  • Para assinaturas HMAC, é usado  crypto.createHmac com o algoritmo “SHA1”.
  • As assinaturas são codificadas em base64 para facilitar a transmissão e o armazenamento.
  • Os métodos são encapsulados em uma função  createOptionalCallbackFunction, que provavelmente permite que sejam usados tanto com callbacks quanto com promises (detalhes não estão no código).

O uso do algoritmo RSA-SHA1 em assinaturas criptográficas contém uma vulnerabilidade relacionada a colisões de hash SHA-1. Isso permite que um atacante crie duas mensagens diferentes com a mesma assinatura se ele controlar parte dos dados que estão sendo assinados.


Especificamente, o problema está na classe RsaSha1:

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

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX Falsosignature-algorithms.ts#L7

Também a segunda vulnerabilidade está na classe RsaSha1:

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

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX Falsosignature-algorithms.ts#L17

Por que esse ataque crítico de colisão permite criar dados diferentes com o mesmo hash?

  1. Colisões SHA-1 : O algoritmo SHA-1 não é mais considerado seguro.
  2. Contexto RSA : Quando combinado com RSA, isso pode levar a assinaturas forjadas em dados não confiáveis (por exemplo, certificados ou documentos).
  3. Recomendações : NIST e a comunidade de segurança recomendam usar SHA-256/SHA-512 em vez de SHA-1.

Notas adicionais:

  • A classe (HMAC-SHA1) HmacSha1é menos vulnerável, mas também obsoleta. O HMAC é mais resistente a colisões do que o SHA-1 “puro”, mas a migração para SHA-256 é preferível.
  • O código contém implementações modernas (RsaSha256/RsaSha512) que devem ser usadas em vez de RsaSha1.

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operações de Carteiras Multi-Assinatura com RawTX Falso

CVE-2025-29774 e CVE-2025-29775 são vulnerabilidades críticas na biblioteca xml-crypto para Node.js, relacionadas à verificação incorreta de assinaturas digitais em documentos XML. Ambas as vulnerabilidades permitem que um atacante modifique mensagens XML assinadas de uma forma que passe despercebida pela verificação de assinatura.


Mecanismo do Ataque de Falsificação de Assinatura Digital

1. Vulnerabilidades nos algoritmos RSA-SHA1

No código, as classes RsaSha1 usam o algoritmo legado RSA-SHA1 para assinatura e verificação:

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

SHA1 é considerado criptograficamente inseguro; o principal problema reside na lógica de processamento de estruturas XML da biblioteca :

  • Ao criar uma assinatura, o documento XML passa por uma etapa de canonicalização (trazê-lo a uma forma padrão, por exemplo, removendo espaços e comentários).
  • Ao verificar uma assinatura, a biblioteca não leva em consideração a diferença entre as versões canonicalizadas e não canonicalizadas de um documento . Isso permite que um atacante modifique o documento (por exemplo, adicione comentários ou altere a estrutura) sem quebrar a assinatura.

2. Exemplo de funcionamento

  1. Modificação do SignedInfo :
    • O atacante adiciona nós adicionais <SignedInfo>  ao documento XML , o que resulta em um cálculo incorreto de hash durante a verificação.
    xml<Signature> <SignedInfo>...</SignedInfo> <!-- Original knot --> <SignedInfo>...</SignedInfo> <!-- Added by an attacker --> </Signature>
  2. Uso de um algoritmo fraco :
    • O algoritmo SHA1 é vulnerável a colisões, facilitando a criação de assinaturas falsas para documentos modificados.

3. Consequências

  • Bypass de autenticação : Modificação de atributos em tokens SAML ou outros documentos XML relacionados a acesso.
  • Escalonamento de privilégios : Substituição de um ID de usuário por um administrador no sistema de autorização.
  • Ataques em massa : A vulnerabilidade pode ser explorada remotamente sem interação do usuário (CVSS 9.3).

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

Detalhes técnicos das vulnerabilidades:

CVE-2025-29774

  • Problema : Validação insuficiente da estrutura do documento XML durante a verificação da assinatura.
  • Exploração : Adição de nós ou atributos extras à parte assinada do documento.

CVE-2025-29775

  • Questão : Uso incorreto do contexto de canonicalização ao calcular um hash.
  • Exploração : Modificação de um documento na forma não canonicalizada após a assinatura.

Recomendações para solução de problemas

  1. Atualização da biblioteca :
    • Para versões 2.x → 2.1.6, 3.x → 3.2.1, 6.x → 6.0.1.
  2. Substituição do algoritmo : typescript // Uso SHA-256 / SHA-1 const signer = crypto.createSign("RSA-SHA256");
  3. Validação da estrutura XML :
    • Verifique se existe exatamente um nó <SignedInfo> na assinatura.

Corrigir essas vulnerabilidades é crítico para sistemas que usam assinaturas XML para autenticação (por exemplo, SAML, SOAP).


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

A biblioteca xml-crypto é amplamente utilizada para verificar assinaturas digitais em mensagens XML, incluindo protocolos como SAML, SOAP e outros. Consequentemente, a vulnerabilidade potencialmente afeta:

  • Software e serviços que usam xml-crypto para assinaturas XML , incluindo plataformas de integração empresarial e middleware (como IBM App Connect Enterprise, onde essas vulnerabilidades foram relatadas).
  • Dispositivos e sistemas que usam assinaturas XML para autenticação e autorização, incluindo servidores e gateways que suportam SAML.

  • As vulnerabilidades CVE-2025-29774 e CVE-2025-29775 afetam principalmente componentes de software e plataformas que usam a biblioteca xml-crypto para processar assinaturas XML.
  • Vítimas conhecidas incluem IBM App Connect Enterprise e provavelmente outras soluções empresariais baseadas em Node.js que usam xml-crypto .
  • Atualmente não há dados públicos sobre marcas específicas de dispositivos de hardware afetadas por esses ataques.

Para avaliar o risco em dispositivos específicos, é recomendável verificar se eles usam versões vulneráveis do xml-crypto ou dependem de mecanismos semelhantes de assinatura XML. Para trabalhar com carteiras de criptomoedas baseadas em Node.js, a IBM oferece soluções separadas, como  IBM Secure Bitcoin Wallet  , um aplicativo baseado no Electrum Bitcoin Client que usa Node.js para interagir com a rede Bitcoin e gerenciar a carteira.

Nesta solução, chaves privadas e carteira podem ser armazenadas e criptografadas usando o IBM Cloud Hyper Protect Crypto Services (zHSM), que fornece armazenamento seguro de chaves baseado em hardware. A geração de chaves privadas para carteiras Bitcoin geralmente é implementada em bibliotecas criptográficas especializadas, como Electrum, bitcoinjs-lib, etc., que podem ser integradas em aplicações Node.js. A IBM Secure Bitcoin Wallet usa um backend Electrum modificado em Node.js para gerenciamento de chaves e transações, por meio da integração com o IBM Cloud Hyper Protect Crypto Services, que fornece criptografia por hardware e armazenamento seguro de chaves privadas.


Parte prática

Pela teoria da vulnerabilidade  CVE-2025-29775  sabe-se que um atacante pode processar a biblioteca  xml-crypto  não atualizada para valores incorretos de transação. Vamos para a parte prática do artigo e considerar um exemplo usando uma carteira Bitcoin:  32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCe , onde havia moedas perdidas no valor de:  0.059672 BTC  em julho de 2025 esse valor é:  7, 052 USD


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

Vamos considerar o formato: Raw transaction dados binários e hexadecimais que contêm todas as informações sobre a transação . É necessário para transmitir, verificar ou criar transações em baixo nível e é a base para o funcionamento de toda a rede Bitcoin. Usuários comuns raramente encontram Raw transactions diretamente, mas para desenvolvedores e entusiastas de criptomoedas, essa é a principal ferramenta para controle total sobre todas as transações da rede Bitcoin.


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

Para retornar completamente os objetos UTXO na rede Bitcoin, usaremos a ferramenta Dark AI . UTXO é a principal parte da estrutura de dados no blockchain e representa a quantidade de moedas BTC da criptomoeda que pode ser gasta pelo detentor da chave privada (que controla este endereço Bitcoin). Cada UTXO é a saída de uma transação passada específica, que nunca foi usada como entrada em transações subsequentes.

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

Google Colab

Private key Debug: Incorrect generation of private keys, system vulnerabilities and errors in calculating the order of the elliptic curve secp256k1 threats to the Bitcoin ecosystem

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


1. Baixar e instalar a ferramenta Dark AI tool

Descrição detalhada de todos os comandos de terminal e ações

Comandos:

root@kitploit:~
!wget https://darkai.ru/repositories/neuralnet_tools.zip
  • wget— um utilitário de linha de comando para baixar arquivos da rede via protocolos HTTP, HTTPS e FTP.
  • Baixamos  o arquivo especificando a URL .neuralnet_tools.zip
  • unzip— comando para extrair arquivos ZIP no diretório atual.

Este comando extrai todos os arquivos de neuralnet_tools.zip

root@kitploit:~
!unzip neuralnet_tools.zip

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

Vamos executar o comando ls para uma visualização rápida e fácil

ls


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

2. Iniciar a ferramenta Dark AI tool

root@kitploit:~
!./darkai
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Vamos executar o comando para obter informações sobre os chamados unspent transaction outputs ( UTXO , decodificação: Unspent Transaction Output ) para o endereço Bitcoin especificado. Essa informação é importante para avaliar o saldo do endereço e a possibilidade de realizar novas transações.

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

Como resultado, dois objetos UTXO foram retornados:

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

Cada UTXO contém:

  • output — identificador de saída. Formato: <txid>:<n>, onde <txid>é um hash de transação único, e <n> é o número da saída na lista de saídas desta transação.
  • value — valor em satoshis (1 bitcoin = 100.000.000 satoshis).

Decodificação dos dados:

  1. Primeiro UTXO
    • Saída: 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd:0
    • Valor: 677.200 satoshis
  2. Segundo UTXO
    • Saída: bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786:0
    • Valor: 5.000.000 satoshis

Saldo geral

O saldo total disponível de um endereço é igual à soma de todos os UTXOs encontrados:

  • 677 200 + 5 000 000 = 5 677 200 satoshis
  • Em bitcoins: 5.677.200/100.000.000 = 0.05677200 BTC
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Interpretação técnica com Dark AI

Usamos o processo de interpretação para processar a biblioteca xml-crypto não atualizada para criar valores de transação inválidos e enviar uma grande quantia; o algoritmo Dark AI escolherá qual UTXO usar (ou combinará ambos).

  • Envio de fundos: Todos os UTXOs especificados podem ser usados como entradas ao formar uma nova transação, o que permitirá gastar todo ou parte do seu saldo.
  • Transparência: Este relatório confirma que o endereço contém fundos Bitcoin reais e pode ser usado para verificar autenticidade e solvência.

O endereço Bitcoin 32GkPB9XjMAELR4Q2Hr31Jdz2tntY18zCepossui dois UTXOs ativos totalizando 0.05677200 BTC . Esses fundos podem ser usados para realizar novas transações; ambas as saídas são consideradas confirmadas e não gastas.


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

Desserialização de transação Bitcoin

Para obter fragmentos de informações sobre a saída de uma transação Bitcoin, use os seguintes comandos, onde a primeira saída ( outs) da transação tem um identificador exclusivo8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afd


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

Obtemos a estrutura da resposta do resultado da desserialização:

root@kitploit:~
{'value': 677200, 'script': 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'}
  • value: 677200 — o valor dessa saída é expresso em satoshi (1 BTC = 100,000,000 satoshi).
  • script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 — um script que define as condições para gastar esta saída.

Explicação detalhada dos elementos: Campo Value

  • Value: 677,200 satoshi.
  • Este valor pode ser gasto ao criar a transação correspondente se as condições do script forem atendidas.
  • Equivalente: 677,200/100,000,000 = 0.00677200 BTC.
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

Explicação detalhada dos elementos: Campo Script

  • Significado do script: a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287
  • Este é um script do tipo “scriptPubKey” – parte da estrutura de saída da transação que especifica quem pode gastar esses fundos. O objetivo mais importante é garantir segurança e controle sobre a disposição dos fundos.

Decodificação do script

  • O script começa com um prefixo a914...87, que corresponde ao formato P2SH (Pay to Script Hash) :
    • a9— OP_HASH160 (operador de hash)
    • 14— comprimento do próximo valor (20 bytes = 40 caracteres hexadecimais)
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash160 do endereço de carteira Bitcoin onde as moedas BTC estão armazenadas.
    • 87— OP_EQUAL (um operador de comando básico do Bitcoin Script que implementa a comparação de dois dados para verificar sua identidade)
  • Isso significa que o destinatário pode gastar os fundos se fornecer um script cujo hash corresponda ao valor fornecido e apresentar assinaturas válidas para esse script.

Significado prático do resultado

  • Esta saída da transação especificada contém 677,200 satoshi (0.00677200 BTC), que é protegida por um script do tipo P2SH.
  • Para gastar fundos de tal saída, você precisará conhecer o script original e apresentar as assinaturas corretas – uma situação típica para carteiras multisig, contratos inteligentes e outros esquemas de segurança avançados.
  • Esta informação é importante para analisar a estrutura da transação, verificar a finalidade dos fundos e entender os requisitos para seu uso posterior.

Desserialize uma transação pelo identificador

Como resultado da desserialização da transação pelo identificador, 8602122a7044b8795b5829b6b48fb1960a124f42ab1c003e769bbaad31cb2afda primeira saída foi obtida, contendo o valor de 677,200 satoshi (0.00677200 BTC), protegido por um script P2SH . Para gerenciar esses fundos, será necessário apresentar o script de destino e assinar corretamente a transação de desbloqueio que atenda às condições do hash especificado.


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

Desserialização da segunda transação Bitcoin

Para obter fragmentos de informações sobre a saída dos dados originais ( output) de uma transação Bitcoin, aplique os seguintes comandos, onde a primeira saída ( outs) da transação com um identificador exclusivo bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786

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

Usando o processo de interpretação, com a ajuda de Dark AI usando a função de desserialização, obtemos então informações sobre a estrutura do primeiro elemento de saída ( output) para a segunda transação com o identificador
bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786.



Resultado:

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

1. Explicação detalhada dos elementos:  Campo Value

  • Conteúdo: 5000000
  • Este valor é expresso em satoshi , a menor unidade indivisível do bitcoin; 1 BTC = 100,000,000 satoshi.
  • Finalidade:
    Este valor está associado a uma saída de transação específica especificada nos elementos da matriz 'outs'. Ele só pode ser gasto se as condições descritas no script definido no campo forem atendidas 'script'.
  • Conversão em Bitcoin: 5,000,000 satoshi = 0.05 BTC
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

2. Explicação detalhada dos elementos:  Campo Script

  • Conteúdo: 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'
  • Este é o chamado script de bloqueio ou, de outra forma, scriptPubKey – um script que especifica as condições sob as quais esta saída pode ser gasta.

Decodificação do script

O valor especificado corresponde ao tipo de script padrão na rede Bitcoin:

  • a9— código de operação OP_HASH160 (produz RIPEMD-160 a partir de SHA-256 da próxima linha).
  • 14— comprimento do campo subsequente: 20 bytes (40 caracteres hexadecimais).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— é um hash de 20 bytes que identifica um endereço de carteira Bitcoin ou um script.
  • 87— código de operação OP_EQUAL.

Em conjunto, essa entrada significa um endereço P2SH (Pay-to-Script-Hash). Nesse caso, os fundos são atribuídos a uma determinada combinação de script e, para retirá-los, você precisará revelar o script cujo hash está registrado aqui e apresentar assinaturas (ou outros dados) que satisfaçam as condições desse script.


Os usos mais comuns desse esquema são para multi-assinaturas, contratos inteligentes simples e complexos, multi-assinaturas bilaterais, esquemas de segurança condicional e outros cenários avançados.


3. O significado prático do resultado, o tamanho e a finalidade dos fundos.

  1. A transação em questão (com o hash bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786 ) tem uma saída na qual 0.05 BTC (5,000,000 satoshis) estão “bloqueados” no endereço P2SH correspondente ao hash06612b7cb2027e80ec340f9e02ffe4a9a59ba762
  2. Condições para gastar:
    Para gastar esses fundos, ao formar uma transação de gasto, é necessário apresentar não apenas uma assinatura padrão, como em uma transferência direta, mas também o próprio script, cujo hash está incorporado nesta saída, além de dados (por exemplo, um conjunto de assinaturas digitais) que correspondam às condições do script.
  3. Segurança e flexibilidade:
    Este método permite implementar uma lógica mais complexa do que enviar diretamente para um endereço Bitcoin comum.

4. Registro da saída no nível de compatibilidade com vários serviços e carteiras que suportam P2SH.

  • ID da transação
    bd992789fd8cff1a2e515ce2c3473f510df933e1f44b3da6a8737630b82d0786
    contém uma saída na qual
    0.05 BTC (5,000,000 satoshi)
    é garantido por um script P2SH (Pay-to-Script-Hash) com um hash de
    06612b7cb2027e80ec340f9e02ffe4a9a59ba762 .
  • Para gastar esses fundos, você deve revelar o script original e cumprir suas condições (por exemplo, apresentar todas as assinaturas em uma multi-assinatura).

Assim, o resultado da desserialização relata a presença de uma certa quantidade de bitcoins em um endereço condicional (P2SH) e define regras estritas para seu gasto, o que desempenha um papel fundamental na gestão e contabilização de fundos na rede Bitcoin.


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

Script de bloqueio P2SH (Pay-to-Script-Hash) na rede Bitcoin. O que esse script significa?

O script 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'é escolhido e usado nesta saída de transação porque representa um script de bloqueio P2SH (Pay-to-Script-Hash) típico na rede Bitcoin.


Vamos analisá-lo parte por parte:

  • a9— OP_HASH160: Uma operação de hash que primeiro aplica SHA-256 e depois RIPEMD-160 aos dados subsequentes.
  • 14— o comprimento do hash é de 20 bytes (em formato hexadecimal).
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— um hash de 20 bytes do script, conhecido como o hash do script .
  • 87— OP_EQUAL: Um operador que verifica a igualdade de dois valores na pilha.

Assim, este script exige que, no momento do uso (gasto de fundos), seja apresentado um script cujo hash corresponda a 06612b7cb2027e80ec340f9e02ffe4a9a59ba762, e que as condições deste script sejam cumpridas.


Por que este específico foi escolhido?

  • Conveniência e segurança: P2SH permite que lógicas complexas de gerenciamento de fundos (como multi-assinaturas ou pagamentos condicionais) sejam ocultas em um hash, simplificando a interface para o remetente e o destinatário.
  • Padrão da indústria: P2SH tornou-se um padrão amplamente aceito porque simplifica a configuração de esquemas de segurança complexos e é compatível com a maioria das carteiras e serviços.
  • Compacidade: O bloco armazena apenas o hash de um script complexo, não o script inteiro – isso economiza espaço e aumenta a eficiência.
  • Flexibilidade: O proprietário dos fundos pode criar condições arbitrárias para gasto – como exigir múltiplas assinaturas, atrasos de tempo ou outras regras – e o hash dessas condições é armazenado aqui.

O script 'a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287'é um script de bloqueio P2SH, que diz que, para gastar 0.05 BTC, você precisa fornecer o script original com o hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 e cumprir as condições especificadas nele. Isso proporciona um equilíbrio entre conveniência, segurança e funcionalidade – a principal razão para escolher este script específico nesta transação. O hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 no script P2SH é o resultado de um hash específico do script original (redeem script) , que determina as condições para gastar fundos desta saída.


Por que esse hash e não outro?

  1. Um hash é uma impressão digital de um script que especifica as regras para o gasto.
    Ao criar um endereço ou saída P2SH, o script (as condições para gastar Bitcoin) é primeiro escrito explicitamente, depois dois algoritmos de hash são aplicados:
    • SHA-256 do script,
    • Em seguida, RIPEMD-160 do resultado SHA-256.
      O hash resultante de 20 bytes é 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Esse hash identifica exclusivamente o cenário exato para o qual foi gerado.
  2. Unicidade e Imutabilidade
    Funções hash criptográficas têm a propriedade do “efeito avalanche”, pela qual mesmo uma mudança mínima no script original produzirá um hash completamente diferente. Portanto, esse hash é único e infalsificável no contexto do script original.
  3. O objetivo do uso de um hash é garantir compacidade e segurança.
    Em vez de armazenar o script completo em cada saída, que pode ser complexo e ocupar muito espaço, apenas o hash é armazenado no bloco. Isso economiza espaço e aumenta a privacidade – o script em si é revelado apenas quando os fundos são gastos e somente para aqueles que cumprem as condições.
  4. A seleção do hash é o resultado de um script específico definido pelo criador do endereço ou da carteira.
    O desenvolvedor ou proprietário dos fundos cria um script com as condições desejadas (ex.: multi-assinatura, atraso de tempo, outras condições lógicas). O script atribuído é submetido a hash e esse hash é vinculado à saída da transação. Assim, não há seleção arbitrária de hash – ela é determinada pelo conteúdo do script original e pelo algoritmo criptográfico.

  • Este hash está estritamente vinculado a um script específico que o proprietário do endereço instalou para proteger seus fundos.
  • Ele foi gerado usando funções hash criptográficas ( SHA-256 + RIPEMD-160)a partir do script de resgate original, portanto não é possível selecionar aleatoriamente ou arbitrariamente um hash diferente.
  • Este hash é um reflexo da combinação única de condições de gasto, e é por isso que ele foi parar no script de saída da transação.a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287

Assim, a escolha desse hash específico é determinada pela necessidade de uma vinculação precisa e segura da saída com condições de gasto específicas que controlam o acesso aos fundos no blockchain. Tudo isso é garantido pelas propriedades das funções hash criptográficas, sua exclusividade e a impossibilidade de recuperação reversa dos dados originais.


Mecanismo P2SH: Significado, Princípio de Funcionamento e Segurança na Rede Bitcoin

Os desenvolvedores do Bitcoin incorporaram no código o mecanismo P2SH (Pay-to-Script-Hash) como uma inovação fundamental que garante segurança e expande as capacidades da rede blockchain. Vamos considerar a estrutura e o princípio de funcionamento deste script, sua diferença em relação às transações clássicas, bem como as razões para escolher essa abordagem para armazenar e proteger ativos digitais.

Tradicionalmente, as transações Bitcoin funcionam usando o esquema Pay-to-Pubkey-Hash (P2PKH) – em que os fundos são “bloqueados” usando o hash da chave pública do destinatário. Para gastar esses fundos, o usuário deve fornecer sua assinatura digital e chave pública, que são verificadas pela rede.

Porém, além do P2PKH, a interface era limitada, pois o Bitcoin Script permite condições de gasto muito mais complexas, de assinaturas múltiplas a bloqueios de tempo e outros acordos de contratos inteligentes. O problema era que scripts longos e complexos inevitavelmente aumentavam o tamanho das transações e reduziam sua usabilidade.


Foi para simplificar a interação com cenários tão complexos que o conceito P2SH foi introduzido em 2012 , padronizado no BIP 16 por Gavin Andresen. A essência do P2SH se resume a substituir o script completo das condições de gasto em scriptPubKey pelo seu hash criptográfico – o chamado hash de script.


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


Como funciona a estrutura do script de saída P2SH?

Vamos analisar o script especificado como resultado da desserialização:

root@kitploit:~
OP_HASH160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 OP_EQUAL

Este script difere do P2PKH padrão porque, em vez de um hash de chave pública, ele armazena um hash de um redeemScript – um conjunto de condições sob as quais os fundos podem ser gastos.

  • OP_HASH160 – aplica hash aos dados (neste caso, redeemScript) primeiro com o algoritmo SHA-256 e depois com RIPEMD-160.
  • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762 — hash redeemScript de 20 bytes.
  • OP_EQUAL – verifica se o redeemScript fornecido é igual a esse hash.

O processo de gasto de fundos por meio de uma saída P2SH

Para gastar esses fundos, é necessário transmitir nas entradas (scriptSig) da transação que referenciam esta saída:

  1. redeemScript serializado – o script original cujas condições estão codificadas em um hash.
  2. Dados de desbloqueio – assinaturas ou outras evidências que atendem às condições do redeemScript.

Ao processar uma transação, os nós da rede:

  • Aplicam hash ao redeemScript e o comparam com o hash especificado na saída.
  • Se os hashes coincidirem (ou seja, OP_EQUAL retorna true), o redeemScript é desserializado e executado.
  • Uma transação é considerada válida se o redeemScript for executado corretamente, ou seja, todas as condições de gasto forem atendidas.

O P2SH, portanto, transfere a responsabilidade de apresentar e verificar as condições do gasto do remetente (que cria o script necessário) para o gastador.


As vantagens e a importância de escolher esse mecanismo

1. Flexibilidade e cenários complexos

P2SH permite criar endereços com condições arbitrárias, muitas vezes de vários níveis – por exemplo, um requisito de múltiplas assinaturas (2 de 3, 3 de 5, etc.), limites de tempo, lógica de distribuição e muito mais. Nesse caso, o remetente simplesmente envia fundos para um endereço hash compacto, sem entrar em detalhes técnicos.


2. Economia de espaço

Em vez de armazenar o script completo no blockchain, apenas o seu hash é armazenado na transação. Isso reduz a carga na rede, diminui o tamanho dos blocos e acelera a verificação das transações.


3. Segurança aprimorada

Como o redeemScript só é revelado e verificado no momento do gasto, isso aumenta a confidencialidade das condições e dificulta tentativas de acesso não autorizado. O uso de funções hash criptográficas garante proteção contra falsificação e modificação – qualquer pequeno desvio no script resultará em um hash diferente e a rede se recusará a aceitar a transação.


4. Conveniência para usuários e programadores

P2SH padroniza e simplifica o uso de contratos inteligentes complexos no Bitcoin, simplificando a integração e aumentando a compatibilidade com uma variedade de carteiras e serviços.


Exemplo de uso: carteiras multi-assinatura

Um exemplo clássico é uma carteira que exige assinaturas de dois dos cinco participantes para concluir uma transação. Com P2SH:

  • A saída contém o hash do script correspondente.
  • Para gastar fundos, é necessário passar o script completo de habilitação multi-assinatura no scriptSig com assinaturas.
  • A rede verifica a consistência dos hashes e a validade das assinaturas.

Isso torna o P2SH ideal para contas corporativas, joint ventures e outras situações em que o controle de acesso é necessário. O mecanismo Pay-to-Script-Hash (P2SH) é uma parte fundamental da arquitetura do Bitcoin, proporcionando um equilíbrio entre:

  • Segurança (protegendo fundos por meio de condições rigorosas e criptografia),
  • Eficiência (armazenando apenas o hash, não todos os detalhes),
  • Flexibilidade (suporte a quaisquer condições de gasto, mesmo as complexas),
  • Conveniência (formato de endereço simples e padrão de acesso).

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


Criptoanálise da extração da primeira entrada da transação ( ins)

Vamos executar um comando para obter informações sobre uma das entradas de uma transação com o hash 6102bfd4bad33443bcb99765c0751b6b8e4e65f4db4e3b65324c5e9e3dac8132. A análise de tal entrada é importante para entender o mecanismo de autorização de gasto de fundos no nível do script.

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

O resultado da extração da primeira entrada da transação ( ins) é apresentado a seguir:

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

1. Análise detalhada dos componentes do ScriptSig ( script)

  • O valor do campo script é o scriptSig , que é usado para desbloquear a saída correspondente da transação anterior.
  • O conteúdo é uma longa sequência de bytes em formato hexadecimal.
  • Neste caso, é um script de cinco componentes, que inclui:
    • Assinaturas digitais padrão de acordo com o protocolo ECDSA, normalmente para confirmar a propriedade de uma chave privada.
    • Chaves públicas necessárias para verificar a assinatura.
    • Pode haver uma estrutura indicando operações multi-assinatura (várias chaves públicas e assinaturas).

Análise da estrutura do script:

  • Começa com 00, que no contexto de scriptSig pode significar OP_0 , tradicionalmente usado em cenários multi-assinatura (por exemplo, no caso do padrão multi-assinatura Pay-to-Script-Hash, onde é necessário um espaço reservado).
  • Em seguida, vêm as assinaturas no formato DER (por exemplo, 3045...), que normalmente consistem em uma série de bytes contendo os detalhes da assinatura.
  • As assinaturas são seguidas por chaves públicas (em comprimento e estrutura, muito provavelmente em formato compactado, já que cerca de 33 bytes), que confirmam que as assinaturas pertencem aos proprietários corretos.
  • Em geral, o formato do script corresponde a redeemScript ou à construção típica de transações multi-assinatura P2SH.

2. Outpoint (outpoint)

  • Contém dados sobre a saída anterior que é usada nesta entrada:
    • 'hash': 'ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577'— é o hash da transação anterior.
    • 'index': 1– indica a segunda saída (numerada a partir de zero), usada para desbloqueio.
  • Assim, a entrada referencia uma saída específica de uma transação anterior, provando que o autor da transação tem o direito de gastá-la.

3. Sequência (sequence)

  • O valor 4294967295 (0xFFFFFFFF) é um número máximo de 32 bits.
  • No Bitcoin, esse campo serve para indicar que a entrada não participa do mecanismo Replace-By-Fee (RBF) ou não possui bloqueio de tempo em Relative Timelock.
  • Frequentemente usado por padrão para entradas fixas.

A importância do scriptSig em um contexto de segurança

  • ScriptSig são os dados para desbloquear fundos que estão protegidos pelo script de bloqueio da saída anterior.
  • No caso de transações P2SH (frequentemente para multi-assinatura), o scriptSig contém:
    • Assinaturas dos participantes confirmando o direito de gastar fundos.
    • O redeemScript original, cujo hash é especificado no script de bloqueio da saída anterior.
  • Uma verificação bem-sucedida do scriptSig garante que o autor da transação realmente tem a autoridade necessária para dispor dos fundos.

A criptoanálise da extração da primeira entrada da transação ( ins) com o hash de transação fornecido mostrou que:


  • A entrada da primeira transação contém um script de desbloqueio complexo, incluindo assinaturas digitais e chaves públicas.
  • Uma referência a uma saída específica de outra transação é usada ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577:1.
  • O valor máximo de sequência indica a ausência de bloqueios especiais ou RBF.
  • Presumivelmente, estamos falando de uma transação multi-assinatura P2SH, em que várias assinaturas são necessárias para confirmar o gasto dos fundos.

Assim, os dados obtidos permitem uma compreensão mais profunda da mecânica de verificação dos direitos de gasto de fundos, são usados para garantir a segurança da rede Bitcoin, bem como no desenvolvimento e auditoria de contratos inteligentes baseados em scripts Bitcoin.


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

Análise detalhada do resultado da extração da segunda saída ( outs)

Vamos executar o comando para obter informações sobre uma das saídas da transação com o identificador ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577.

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

outs Especificamente, a segunda saída ( ) desta transação, o elemento com índice 1, foi extraída .


O resultado obtido:

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

1. Análise detalhada do campo de dados recebido value

  • Tamanho: 350,000 satoshis.
  • Essa quantidade de fundos está na segunda saída da transação especificada e pode ser gasta se as condições especificadas no script correspondente forem atendidas.
  • Conversão em BTC: 350,000 satoshi = 0.0035 BTC
Digital Signature Forgery Attack: How CVE-2025-29774 Vulnerabilities and the SIGHASH_SINGLE Bug Threaten Multi-Signature Wallets Methods of Operations with Fake RawTX

2. Valor do campo script

  • Característica:
    O script a91406612b7cb2027e80ec340f9e02ffe4a9a59ba76287 é um script de bloqueio clássico (scriptPubKey) do formato P2SH (Pay-to-Script-Hash) .
  • Transcrição do script:
    • a9— OP_HASH160 é um operador que aplica primeiro SHA-256 e depois RIPEMD-160 aos dados de entrada.
    • 14— o comprimento (20 bytes) do próximo valor é o tamanho do hash.
    • 06612b7cb2027e80ec340f9e02ffe4a9a59ba762— hash de 20 bytes, também conhecido como script hash , é uma representação única do script de resgate que controla o gasto desses fundos.
    • 87— OP_EQUAL é um operador que compara dois valores e retorna verdadeiro se forem iguais.

Assim, o script exige que, para desbloquear (gastar fundos), o usuário apresente um script de resgate cujo hash corresponda a esse valor.


O significado e o papel do redeem script no contexto de P2SH

  • Redeem script é um script original que define as condições para gastar fundos, por exemplo, multi-assinatura, um cenário complexo com limite de tempo, etc.
  • As saídas de transação armazenam apenas o hash do redeem script, economizando espaço e protegendo os detalhes das condições.
  • Para usar os fundos investidos nesta saída, ao criar uma nova transação, o usuário deve fornecer no scriptSig um redeem script serializado que seja corretamente decodificado e verificado pela rede.

Significado geral do resultado

  • O ID da transação ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577está associado a uma saída que contém 0.0035 BTC.
  • Esses fundos estão vinculados a um endereço P2SH controlado por um script com um hash 06612b7cb2027e80ec340f9e02ffe4a9a59ba762.
  • Para gastar esses fundos, você deve apresentar um redeem script correspondente a este hash e cumprir as condições estabelecidas nele.

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operação de Carteiras Multi-Assinatura com Fake RawTX

O significado da informação obtida em um contexto mais amplo

  • Este resultado nos permite confirmar que os fundos estão de fato na saída com as condições Pay-to-Script-Hash.
  • Entender a estrutura de tais saídas é importante para a análise de segurança, o desenvolvimento de cenários complexos de alocação e a verificação das condições de gasto.
  • O uso de P2SH fornece um mecanismo seguro e eficiente para gerenciar fundos na rede Bitcoin, permitindo a criação de contratos inteligentes e carteiras seguras.

A informação recebida confirma que o segundo registro de saída da transação ec2a40cac3ac5dadf1d31f3cad03bdc8465caab5acbc5407ee7f4a7400aab577 armazena o valor de 0.0035 BTC, controlado por um script P2SH padrão com um valor hash160 06612b7cb2027e80ec340f9e02ffe4a9a59ba762. Para gerenciar esses fundos, é necessário apresentar o redeem script correspondente, o que proporciona um alto nível de segurança e flexibilidade no gerenciamento de bitcoins.


Vamos confirmar a descriptografia do scriptSig:

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

Vamos executar o comando para obter HASH160 Os desenvolvedores de Bitcoin estabeleceram um padrão para um hash de 20 bytes (hex), amplamente utilizado sem alterações em outras criptomoedas populares, como 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), para denotar o identificador abreviado de scripts e chaves públicas.


Vamos executar o comando:

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

Processo de processamento:

  1. A string original, representada em formato hexadecimal, é convertida em uma sequência de bytes (decodificada de hex para formato binário). Essa sequência é um script serializado (redeem script) ou uma estrutura semelhante de um script bitcoin.
  2. Os bytes recebidos são submetidos a hash usando o algoritmo SHA-256 (one-shot hash), cujo resultado é então processado pela função criptográfica RIPEMD-160.
  3. O hash RIPEMD-160 resultante dos dados binários SHA-256 é obtido como uma string:
root@kitploit:~
06612b7cb2027e80ec340f9e02ffe4a9a59ba762

Este hash de 20 bytes (hex) é chamado de HASH160 e é amplamente utilizado no Bitcoin para denotar um identificador abreviado para scripts e chaves públicas.


Significado e contexto do resultado

  • O processo de hash RIPEMD-160(SHA-256(data)) , conhecido como HASH160, é o padrão para criar endereços e scripts no Bitcoin, incluindo P2SH (Pay-to-Script-Hash). O HASH160 fornece um identificador único e compacto que economiza espaço na blockchain.
  • O uso de hash duplo (SHA-256 e depois RIPEMD-160) combina as fortes propriedades criptográficas de ambas as funções: resistência a colisões, irreversibilidade (one-wayness) e resistência a ataques.
  • O hash resultante corresponde ao script hash do redeem script – ou seja, o script que controla o acesso aos fundos bloqueados no endereço P2SH.
  • Em particular, este HASH160 aparece no script de bloqueio (scriptPubKey) das saídas de transações específicas, o que exige que o próprio redeem script original, com o mesmo hash e assinaturas corretas, seja fornecido ao gastar.

Detalhes técnicos e explicações

  • O Bitcoin tem o conceito de hash duplo SHA-256 e RIPEMD-160 para proteger endereços e scripts.
  • Usar HASH160 em vez de uma simples saída SHA-256 de 256 bits reduz o comprimento do hash de 32 bytes para 20 bytes, o que reduz o armazenamento e o tamanho dos dados na rede.
  • O HASH160 é usado para gerar principalmente endereços P2SH e endereços P2PKH legados.

Uma etapa fundamental no processamento de scripts Bitcoin usando funções de hash criptográficas.
Converter scripts serializados ou chaves públicas em HASH160 permite identificação, indexação e proteção eficientes dos dados na blockchain do Bitcoin.

Hash recebido:

root@kitploit:~
{'06612b7cb2027e80ec340f9e02ffe4a9a59ba762'}

A equipe produziu o hash exato que serve como elo entre scripts complexos e o formato compacto usado para armazenar e verificar transações na rede Bitcoin.


Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos de Operação de Carteiras Multi-Assinatura com Fake RawTX

Por que Satoshi escolheu o SHA-256 duplo e como isso afeta a força criptográfica

Satoshi Nakamoto escolheu usar o hash duplo SHA-256 (ou seja, aplicar SHA-256 duas vezes consecutivas) nos algoritmos de hash do Bitcoin por várias razões importantes que aumentam a força criptográfica e a segurança da rede.

Razões para escolher o SHA-256 duplo

  1. Melhoria da resistência a diversos ataques
    Uma única aplicação do SHA-256 já possui alta resistência criptográfica, sendo resistente a colisões e pré-imagens. No entanto, a aplicação dupla da função de hash – primeiro SHA-256 aos dados originais, depois SHA-256 ao resultado – complica ainda mais a análise e os ataques ao hash.
    Isso reduz a probabilidade de selecionar com sucesso uma colisão ou recuperar reversamente os dados originais, torna mais trabalhosa a seleção de várias opções e protege contra fraquezas possíveis em implementações específicas do algoritmo.
  2. Proteção contra problemas de comprimento dos dados de entrada
    O SHA-256 duplo fornece uma camada adicional de segurança preventiva ao levar em conta o comportamento da construção interna do hash e o tratamento dos bits de preenchimento (padding) na marcação dos dados. Isso minimiza possíveis ataques relacionados à formatação dos dados.
  3. Seguindo boas práticas criptográficas
    O hash duplo é uma técnica de segurança bem estabelecida em diversos protocolos criptográficos. Por exemplo, checksums e assinaturas digitais usam criptografia dupla ou hash duplo. Isso aumenta a força da cadeia de segurança.
  4. Segurança comprovada e amplo suporte
    O SHA-256 é um membro da família SHA-2, desenvolvida pela Agência de Segurança Nacional (NSA) dos EUA e publicada pelo Instituto Nacional de Padrões e Tecnologia (NIST). Este algoritmo é considerado um dos mais seguros da atualidade, e seu uso duplo proporciona segurança máxima.

Como isso afeta a força criptográfica?

  • Resistência a colisões e pré-imagens
    Cada uma das rodadas do SHA-256 é altamente resistente a colisões — é extremamente difícil encontrar duas entradas com o mesmo hash. O hash duplo reforça essa garantia porque um atacante deve encontrar uma colisão para dois SHA-256 consecutivos, o que aumenta significativamente a complexidade computacional.
  • Função unidirecional com efeito avalanche
    A aplicação dupla potencializa o “efeito avalanche”, em que a menor alteração nos dados de entrada causa uma mudança radical no hash de saída, dificultando a detecção de padrões e a engenharia reversa.
  • Resistência aprimorada à criptoanálise
    O SHA-256 duplo protege contra possíveis fraquezas de implementação ou vulnerabilidades inesperadas que poderiam ser descobertas em uma única iteração, minimizando o risco de ataques usando ferramentas de computação quântica ou clássica.
  • Aplicabilidade ao Proof-of-Work e à segurança da blockchain
    O mecanismo de PoW no Bitcoin depende do cálculo de hashes de blocos que devem atender a uma certa dificuldade. O hash duplo cria uma barreira adicional contra a falsificação de blocos, aumentando a confiabilidade e a confiança na blockchain 5 .

O uso duplo SHA-256é uma escolha deliberada de Satoshi Nakamoto para fornecer uma camada adicional de segurança e robusta força criptográfica a todo o sistema Bitcoin. Este design minimiza os riscos de colisão, aprimora a irreversibilidade (one-wayness) e protege com segurança os dados na rede blockchain, criando uma base sólida para a segurança das transações e o consenso no sistema. Assim, o SHA-256 duplo é um elemento-chave da arquitetura do Bitcoin, combinando técnicas criptográficas avançadas com um sistema distribuído.


Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos Operacionais de Carteiras Multi-Assinatura com Fake RawTX


Multi-assinatura no Bitcoin: o papel do redeemScript e a instrução OP_CHECKMULTISIG

A segurança e a flexibilidade das transações modernas de Bitcoin baseiam-se em um sistema de scripts que permite condições complexas para gastar fundos. Um dos mecanismos-chave é a multi-assinatura (multisig) , em que os fundos só podem ser gastos se houver várias assinaturas digitais válidas de um conjunto de possíveis. Neste artigo, examinaremos em detalhes como exatamente isso é implementado no Bitcoin, o que é o redeemScript, como a instrução OP_CHECKMULTISIG funciona , e por que essa abordagem é tão procurada.

O que é redeemScript?

No contexto do Bitcoin, um redeemScript é um script que contém as condições para gastar fundos, armazenadas na saída da transação no formato Pay-to-Script-Hash (P2SH). Em vez de armazenar o script completo na blockchain, o hash do redeemScript é armazenado na saída, economizando espaço e ocultando os detalhes das condições até o momento do gasto.


O RedeemScript pode incluir, por exemplo, múltiplas chaves públicas e um número limite de assinaturas – é isso que as carteiras multi-assinatura implementam.


Como funciona o OP_CHECKMULTISIG?

Vamos considerar a instrução OP_CHECKMULTISIG: propósito e funcionamento, em que o principal elemento no redeemScript que implementa a verificação de multi-assinatura é OP_CHECKMULTISIG .

  • A instrução recebe dois grupos de dados da pilha como entrada:
    • N chaves públicas (por exemplo, três chaves públicas)
    • M assinaturas (por exemplo, duas assinaturas), em que M ≤ N é o limite necessário de assinaturas para confirmar a transação.
  • Para validar uma transação, OP_CHECKMULTISIG verifica se cada uma das M assinaturas foi assinada corretamente por qualquer uma das N chaves públicas.
  • Se todas as assinaturas forem válidas e corresponderem às chaves no redeemScript, a instrução retorna true , permitindo que os fundos sejam gastos.

Características e bug na remoção de um elemento da pilha

Devido a um bug histórico na implementação do OP_CHECKMULTISIG , um elemento extra, um valor não utilizado, é removido da pilha durante a execução. Para evitar esse problema, o scriptSig usa um elemento especial OP_FALSE(valor 0) no início, que compensa esse bug e previne vulnerabilidades potenciais.


  • A seguir, veremos a implementação do OP_CHECKMULTISIG , que remove um elemento adicional da pilha. Usando esse bug, o atacante explora o OP_CHECKMULTISIG como uma vulnerabilidade potencial.
  • Assim, a estrutura scriptSig para multi-assinatura se parece com algo como: em que o primeiro elemento do script é um dummy .OP_FALSE <signature1> <signature2> ... <redeemScript>OP_FALSE

Exemplo prático: multi-assinatura 2 de 3

Com base no código do redeemScript:

root@kitploit:~
023927... 03d2c0... 03ec01... 3 OP_CHECKMULTISIG
  • Há 3 chaves públicas declaradas aqui .
  • O limite é de 2 assinaturas destas três, necessárias para uma verificação bem-sucedida.
  • A operação OP_CHECKMULTISIGverifica se as duas assinaturas fornecidas (no scriptSig) correspondem a duas das três chaves e são válidas.
  • OP_FALSEno scriptSig compensa o bug da remoção do valor extra.

A importância e os benefícios das carteiras multi-assinatura

  • Segurança aumentada. O proprietário da carteira pode distribuir o controle sobre os fundos entre várias pessoas ou dispositivos, eliminando a possibilidade de um único gasto não autorizado.
  • Flexibilidade. Vários esquemas podem ser implementados, por exemplo, “2 de 3”, “3 de 5”, com diferentes condições.
  • Eficiência jurídica: Multi-assinaturas são frequentemente usadas em ambientes corporativos para garantir a gestão compartilhada de ativos.

Contexto técnico e prático

  • Cenários de multi-assinatura são amplamente utilizados em transações P2SH e SegWit.
  • A instrução OP_CHECKMULTISIG é uma das operações que mais consomem recursos na blockchain, pois exige a verificação de múltiplas assinaturas. Há um limite no nível de protocolo para o número de operações de assinatura (sigops) por bloco.
  • Apesar da história com OP_FALSE, o mecanismo provou sua confiabilidade e encontrou ampla aplicação.

RedeemScript com a instrução OP_CHECKMULTISIG é uma ferramenta complexa e poderosa no arsenal do Bitcoin que permite criar carteiras multi-assinatura com um limite de assinaturas, proporcionando um alto nível de segurança e controle sobre os fundos. Este mecanismo tornou-se uma pedra angular para organizações, usuários e serviços que desejam usar o gerenciamento compartilhado de seus ativos em um ambiente descentralizado e seguro. Assim, a multi-assinatura via redeemScript e OP_CHECKMULTISIG não é apenas uma tecnologia, mas uma funcionalidade que expande as capacidades do modelo clássico de criptomoeda.


Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos Operacionais de Carteiras Multi-Assinatura com RawTX Falso

Como Funciona o Mecanismo de Verificação Multisig do Bitcoin com OP_CHECKMULTISIG e redeemScript

O mecanismo de verificação multi-assinatura do Bitcoin baseia-se no uso de scripts especiais com as instruções OP_CHECKMULTISIG e redeemScript , o que permite a correspondência de assinaturas por limite, proporcionando maior segurança e gerenciamento compartilhado dos fundos.

Fundamentos do mecanismo multi-assinatura

Multisig é um sistema no qual múltiplas assinaturas válidas de um determinado conjunto de chaves públicas são necessárias para concluir uma transação. Um esquema típico é denotado como m de n — por exemplo, "2 de 3", onde quaisquer duas assinaturas de três chaves são necessárias para autorizar um gasto.

No Bitcoin, essa lógica é implementada por meio de:

  • redeemScript — um script que descreve as condições para gastar fundos. Ele contém uma lista de chaves públicas e um parâmetro de limite (m).
  • scriptSig – o script de desbloqueio, que inclui as assinaturas necessárias para a verificação e o próprio redeemScript.

Como funciona o redeemScript

A instrução OP_CHECKMULTISIG verifica se as assinaturas scriptSig fornecidas são válidas e correspondem às chaves públicas publicadas do redeemScript.

O RedeemScript é estruturado mais ou menos assim:

root@kitploit:~
OP_M <pubkey1> <pubkey2> ... <pubkeyN> OP_N OP_CHECKMULTISIG
  • OP_M e OP_N— instruções que especificam o número de assinaturas necessárias e o número total de chaves públicas, respectivamente (por exemplo, OP_2 e OP_3).
  • <pubkeyX>— chaves públicas dos participantes.
  • OP_CHECKMULTISIG— um operador que implementa a verificação multi-assinatura.

  • Ele recebe como entrada várias assinaturas e um conjunto de chaves públicas.
  • Para verificar com sucesso, cada assinatura deve corresponder corretamente a uma das chaves públicas especificadas.
  • A operação retorna verdadeiro se o número de assinaturas válidas atingir o limite m.

Uma característica técnica importante é um bug histórico de implementação OP_CHECKMULTISIG que faz com que um elemento extra e não utilizado seja removido da pilha. Para compensar esse bug, um valor OP_FALSE (código 0) é colocado no início do scriptSig para "travar" o deslocamento da pilha.


Como funciona a estrutura do scriptSig

Para uma carteira com multi-assinatura "2 de 3", antes de gastar fundos, o scriptSig é formado da seguinte forma:

root@kitploit:~
OP_FALSE <signature1> <signature2> <redeemScript>
  • OP_FALSE— um valor fictício para compensar o bug do OP_CHECKMULTISIG.
  • <signature1> e <signature2>– duas assinaturas digitais autorizadas pelos proprietários das chaves privadas correspondentes.
  • <redeemScript>— o próprio script com chaves públicas e parâmetros de verificação.

Ao verificar uma transação de nó:

  1. Extrai o redeemScript do scriptSig.
  2. Calcula seu hash e o compara com o hash armazenado no script de bloqueio (scriptPubKey) da saída anterior (formato P2SH – OP_HASH160 <hash do redeemScript> OP_EQUAL).
  3. Se os hashes coincidirem, desserializa o redeemScript.
  4. Executa a instrução OP_CHECKMULTISIG, comparando assinaturas e chaves para verificar a correspondência.
  5. Retorna verdadeiro se as verificações forem bem-sucedidas.

Se todas as entradas de uma transação passarem por esta verificação, a transação é considerada válida. Com essa validade, ao executar o operador desse bug, o atacante explora  OP_CHECKMULTISIG  como uma vulnerabilidade potencial.


Mecanismo multi-assinatura via redeemScript e OP_CHECKMULTISIG

  • Maior segurança: Vários detentores de chaves privadas devem concordar para realizar uma transação, reduzindo o risco de roubo se uma chave for comprometida.
  • Flexibilidade e escalabilidade: Você pode definir um limite arbitrário de assinaturas (de 1 a 15), bem como uma lista de participantes – de 2 a 15 chaves públicas.
  • Gestão coletiva de ativos: Adequado para contas corporativas, carteiras conjuntas, DAO, permitindo um controle de acesso robusto.
  • Transparência e verificabilidade: Todos os dados e condições necessários estão na blockchain, e a verificação das transações é automática, descentralizada e transparente.

O mecanismo de verificação multi-assinatura do Bitcoin usando o comando OP_CHECKMULTISIG e o redeemScript permite configurar esquemas complexos de assinaturas por limite e, ao executar esse operador de bug, um atacante explora  OP_CHECKMULTISIG  como uma vulnerabilidade potencial em transações controladas na rede distribuída do Bitcoin.


Quais são os recursos e limitações ao verificar múltiplas assinaturas com OP_CHECKMULTISIG? Vamos analisar os principais aspectos e limitações:

  1. O limite de verificação de assinaturas
    O OP_CHECKMULTISIG permite especificar o número de assinaturas necessárias T do número total de chaves públicas N (o esquema "T de N"). Por exemplo, 2 de 3. Para que uma transação seja válida, basta ter T assinaturas válidas .
  2. Verificação de múltiplas assinaturas em uma única operação
    Ao contrário da verificação de assinatura única (OP_CHECKSIG), o OP_CHECKMULTISIG verifica várias assinaturas de uma só vez, correlacionando-as com as chaves públicas correspondentes, o que aumenta a eficiência e a conveniência da implementação de carteiras multi-assinatura.
  3. Uso do redeemScript para uma condição de gasto
    No formato P2SH, o esquema multi-assinatura fica oculto sob o hash do redeemScript – um script completo com chaves públicas e parâmetros. Para gastar os fundos, o usuário deve apresentar o redeemScript e as assinaturas correspondentes.
  4. Bug histórico – elemento extra na pilha
    O OP_CHECKMULTISIG tem a característica de remover um elemento extra e não utilizado da pilha durante a execução (um bug de implementação "off-by-one"). Para compensar, um elemento fictício OP_FALSE é adicionado ao início do scriptSig para alinhar corretamente a pilha. Este é um recurso reconhecido e aceito pela comunidade.

Limitações do OP_CHECKMULTISIG

  1. Número máximo de chaves e assinaturas
    O Bitcoin tem um limite de 15 chaves públicas e, consequentemente, 15 assinaturas em um redeemScript. Isso se deve ao limite do tamanho do script (~520 bytes) e ao número de operações permitidas para verificação por bloco (limite de sigops).
  2. Maior tamanho da transação e taxas
    As transações multi-assinatura são maiores devido ao grande número de chaves públicas, assinaturas e dados adicionais do redeemScript. Isso aumenta o tamanho da própria transação e, consequentemente, a taxa para processá-la.
  3. Limites de tamanho do script
    O tamanho máximo de cada script (entrada ou saída) é limitado a 520 bytes. Com um grande número de chaves, o redeemScript se torna volumoso, o que afeta a conveniência e a eficiência do uso da multi-assinatura.
  4. Ocultação das condições de gasto apenas com o uso de P2SH
    Se o P2SH não for usado, o script correto com chaves públicas e OP_CHECKMULTISIG é armazenado abertamente nas saídas da transação, o que revela as chaves públicas antecipadamente, reduzindo a privacidade.
  5. Falta de suporte nativo para lógica complexa
    O Bitcoin Script é incompleto e limitado em capacidades, não há ciclos nem recursão, razão pela qual condições políticas ou contratuais complexas de multi-assinaturas são implementadas de forma limitada.

Ataque de Falsificação de Assinatura Digital: Como as Vulnerabilidades CVE-2025-29774 e o Bug SIGHASH_SINGLE Ameaçam os Métodos Operacionais de Carteiras Multi-Assinatura com RawTX Falso


Tipos de Assinaturas no Bitcoin: Recursos e Papel dos Flags SIGHASH

O Bitcoin usa assinaturas digitais para autorizar transações, permitindo que os proprietários dos fundos confirmem seu direito de dispor deles. A peculiaridade é que as assinaturas podem limitar seu escopo de ação não à transação inteira, mas apenas a uma parte dela. Isso é implementado usando flags especiais – SIGHASH , que determinam exatamente quais dados da transação ficam sob a assinatura. Vamos considerar os tipos de hashes de assinatura, sua finalidade, exemplos de uso, bem como os recursos que surgem em situações não padronizadas.

Ao assinar uma transação Bitcoin, é criada uma assinatura digital formada sobre um fragmento específico dos dados da transação. É por meio do flag SIGHASH que se indica qual parte desses dados essa assinatura deve cobrir. O tipo de hash da assinatura é transmitido pelo último byte da própria assinatura e determina a área incluída no hash e, portanto, na seção assinada. Isso permite a formação flexível de condições sobre quais ações específicas na transação são aprovadas pelo signatário.


Os três principais tipos de SIGHASH

1. SIGHASH_ALL (0x01)

Este é o tipo de assinatura padrão na maioria das carteiras e clientes. A assinatura cobre todas as entradas e todas as saídas da transação , o que significa:

  • O signatário confirma essa combinação específica de fontes e destinatários.
  • Qualquer alteração nas entradas ou saídas após a assinatura invalida a assinatura.
  • Proporciona o mais alto nível de segurança e previsibilidade da transação.

2. SIGHASH_NONE (0x02)

Com este tipo de assinatura, todas as entradas são assinadas, mas nenhuma das saídas é assinada :

  • O signatário concorda em usar as entradas listadas, mas não se compromete com saídas específicas.
  • Isso permite alterar as saídas de uma transação sem ter que reassinar as entradas.
  • Essa abordagem não é segura para entradas únicas e é mais frequentemente usada em cenários específicos, como contratos inteligentes complexos ou transações cooperativas.

3. SIGHASH_SINGLE (0x03)

Este tipo de assinatura assina todas as entradas, mas apenas uma saída – com o mesmo número de sequência da entrada :

  • Ou seja, a assinatura é limitada ao par "entrada N – saída N".
  • Permite que o signatário controle um par específico de entrada-saída enquanto ignora o restante.
  • Ajuda a criar disposições parciais ou condicionais de fundos.
  • No entanto, pode haver um problema se não houver uma saída com o índice da entrada – nesse caso, um hash com valor um é retornado (o que é um bug conhecido descrito abaixo).

Exemplo de uma transação real

Considere uma transação com três entradas, onde assinaturas que terminam com um byte 0x03 apontando para SIGHASH_SINGLE foram extraídas dos scripts de assinatura (scriptSig) de duas delas — ou seja, assinaturas que assinam apenas o par de entradas e saídas correspondentes. No entanto, aqui observamos uma situação: a entrada com índice 2 não possui uma saída correspondente com o mesmo índice.


Ataque de Falsificação de Assinatura Digital Vários métodos de avaliação de vulnerabilidades são usados para prevenir incidentes cripto e melhorar a cibersegurança das plataformas de criptomoedas

791fe035d312dcf9196b48649a5c9a027198f623c0a5f5bd4cc311b8864dd0cf


Ataque de Falsificação de Assinatura Digital Vários métodos de avaliação de vulnerabilidades são usados para prevenir incidentes cripto e melhorar a cibersegurança das plataformas de criptomoedas

Transação Bruta


O que acontece se não houver saída correspondente ao índice da entrada?

Devido a um bug histórico do Bitcoin, nessas situações o hash da transação para assinatura é retornado como um número fixo – um (int 1). Isso não corresponde a um hash válido da transação que está sendo assinada e pode criar problemas de segurança e compatibilidade.

Flags e modificadores adicionais

Além dos três valores básicos de SIGHASH, são possíveis combinações desses valores com o flag SIGHASH_ANYONECANPAY , que permite que apenas uma entrada seja assinada, deixando as outras abertas para modificação. Isso expande as possibilidades de criação de protocolos colaborativos complexos e transações multipartes, onde diferentes participantes assinam apenas suas partes.


Significado prático e aplicação

  • SIGHASH_ALL fornece a confirmação mais completa de uma transação e é usado em carteiras padrão.
  • SIGHASH_NONE e SIGHASH_SINGLE permitem assinaturas mais flexíveis e parciais usadas em cenários complexos: multi-assinaturas, contratos inteligentes, transações confiáveis.
  • Compreender esses tipos é fundamental para desenvolvedores e analistas que criam transações personalizadas ou investigam bugs/vulnerabilidades.

Os tipos SIGHASH são, no Bitcoin, um mecanismo engenhoso para gerenciar o nível de controle e o escopo das assinaturas digitais dentro das transações. Eles estabelecem um equilíbrio entre segurança, flexibilidade e compatibilidade. A história inclui complicações inesperadas, como o bug do SIGHASH_SINGLE sem saída correspondente, o que destaca a importância de um profundo entendimento dos detalhes técnicos para trabalhar com Bitcoin com sucesso em um nível avançado.


Como as diferenças entre SIGHASH_ALL, NONE e SINGLE afetam a segurança das transações Bitcoin?

As diferenças entre os tipos de assinatura SIGHASH_ALL, SIGHASH_NONE e SIGHASH_SINGLE têm um impacto significativo na segurança das transações Bitcoin, pois determinam quais partes da transação são mantidas dentro da assinatura digital e, portanto, protegidas contra modificação.


1. SIGHASH_ALL – segurança máxima

  • Descrição: A assinatura cobre todas as entradas e todas as saídas de uma transação .
  • Impacto na segurança:
    • Garante que nenhuma entrada ou saída possa ser modificada após a assinatura.
    • Elimina a possibilidade de substituir o destinatário ou o valor do pagamento.
    • O signatário tem controle total sobre o resultado final da transação.
  • Riscos: Alta rigidez – se for necessário alterar algo (por exemplo, adicionar uma saída ou aumentar a comissão), é preciso reassinar.

2. SIGHASH_NONE – saídas abertas, entradas fechadas

  • Descrição: Todas as entradas são assinadas e todas as saídas ficam sem assinatura .
  • Impacto na segurança:
    • As entradas assinadas são protegidas, mas as saídas podem ser alteradas por qualquer pessoa após a assinatura.
    • Potencial de abuso: um atacante pode alterar os endereços e os valores de uma transferência após a assinatura.
  • Uso: Raramente usado, principalmente em protocolos de colaboração confiáveis e cenários cooperativos.
  • Riscos: Se um atacante obtiver acesso às assinaturas, ele pode enviar fundos para seus próprios endereços sem o consentimento do signatário.

3. SIGHASH_SINGLE — assinatura da entrada e saída correspondentes

  • Descrição: Assina todas as entradas, mas apenas a saída com o mesmo índice da assinatura da entrada .
  • Impacto na segurança:
    • Permite que o signatário controle apenas uma saída específica, enquanto as demais permanecem modificáveis.
    • Se o número de saídas for menor que o número de entradas, ocorre um bug: para uma saída ausente, o hash é 1, o que pode levar a vulnerabilidades.
    • Permite uma distribuição mais flexível da gestão de fundos, mas essa flexibilidade vem acompanhada de uma redução nas garantias de gasto seguro.
  • Riscos:
    • Possibilidade de substituir ou remover saídas não cobertas.
    • Não é adequado para transações em que é importante manter toda a lógica de pagamento inalterada.

O impacto final


A escolha do tipo de SIGHASH afeta diretamente o grau de confiança em uma transação na rede da criptomoeda Bitcoin:

  • SIGHASH_ALL fornece o mais alto nível de segurança , razão pela qual é amplamente utilizado na maioria das transações.
  • SIGHASH_NONE e SIGHASH_SINGLE oferecem flexibilidade e assinatura parcial , o que pode ser útil em determinados casos, mas também aumenta os riscos de falsificação e abuso.
  • Compreender essas diferenças é fundamental ao projetar esquemas de multissinatura, protocolos complexos e contratos inteligentes Bitcoin, onde o equilíbrio entre flexibilidade e segurança deve ser cuidadosamente ajustado.

Como o Uso Incorreto de SIGHASH_ALL Pode Levar a Vulnerabilidades em Transações

O uso incorreto ou a falta de implementação correta do SIGHASH_ALL nas assinaturas de transações Bitcoin pode levar a vulnerabilidades graves que afetam a segurança dos fundos e a integridade do sistema. Os principais aspectos dessas vulnerabilidades são:



    Read more

Baixar ferramenta
Tipo SighashO que está sendo assinado?Nível de segurançaRiscos possíveisAplicação
SIGHASH_ALLTodas as entradas e saídas da transaçãoMáximo – nenhuma alteração possívelExigência de mudança (é preciso reassinar a transação)Padrão para a maioria dos pagamentos
SIGHASH_NONETodas as entradas, nenhuma saídaMédio – as saídas não são protegidasSubstituição de saídas, perda de controle sobre os destinatáriosCenários cooperativos, multissinatura
SIGHASH_SINGLETodas as entradas, saída com índice correspondente à entradaBaixo – apenas uma saída será protegidaBug na ausência da saída correspondente, substituição parcialPagamentos parciais, cenários complexos