Skip to main content

Maleabilidade de Transação | Bitcoin Glossary | Mapping Bitcoin

Maleabilidade de Transação

Segurança

Also known as: tx malleability, malleability

Vulnerabilidade onde o TXID mudava ao alterar dados de assinatura sem invalidar a transação. O SegWit corrigiu segregando a testemunha do cálculo do hash.

Visão Geral

A maleabilidade de transações foi uma vulnerabilidade de longa data no Bitcoin onde um terceiro (ou mesmo o signatário da transação) poderia modificar os dados de assinatura em uma transação sem invalidá-la, fazendo o ID de transação mudar. Embora a transação modificada ainda transferisse a mesma quantia para o mesmo destinatário, o TXID alterado quebrava quaisquer transações dependentes que referenciassem o ID original.

Como Funcionava

Em transações pré-SegWit, a assinatura (scriptSig) estava incluída nos dados que eram hasheados para produzir o TXID. Como as assinaturas ECDSA têm múltiplas codificações válidas para a mesma autorização, os bytes da assinatura podiam ser alterados enquanto permaneciam criptograficamente válidos:

Transação Original:
  TXID: abc123...
  scriptSig: [assinatura_A]   <-- Pode ser modificado
  Saídas: 1 BTC para Alice

Transação Maleada:
  TXID: def456...              <-- TXID diferente!
  scriptSig: [assinatura_A']  <-- Codificação diferente, ainda válida
  Saídas: 1 BTC para Alice    <-- Mesmo pagamento

Por Que Era um Problema

  • Encadeamento de transações: Qualquer transação que referenciasse o TXID original como entrada se tornaria inválida se a versão maleada fosse minerada em seu lugar.
  • Exploits de exchanges: Atacantes podiam sacar de exchanges, malear o TXID e afirmar que o saque nunca chegou — levando a exchange a reenviar fundos.
  • Lightning Network impossível: Os canais de pagamento exigem cadeias confiáveis de transações pré-assinadas. A maleabilidade tornava isso inseguro, pois uma transação de financiamento maleada invalidaria todas as transações de compromisso subsequentes.

A Correção SegWit

O SegWit resolveu a maleabilidade de transações movendo dados de testemunha (assinaturas) para uma estrutura separada que não está incluída no cálculo do TXID:

Pré-SegWit:  TXID = Hash(versão + entradas + scriptSig + saídas + locktime)
                                              ^^^^^^^^^^
                                              Maleável!

SegWit:      TXID = Hash(versão + entradas + saídas + locktime)
             Dados de testemunha comprometidos separadamente (não no TXID)

Essa correção foi o pré-requisito crítico para construir a Lightning Network, que depende de cadeias de transações pré-assinadas com TXIDs previsíveis.

Importância Histórica

A exchange Mt. Gox citou famosamente a maleabilidade de transações como um fator em seu colapso em 2014, embora investigações subsequentes tenham revelado que a maleabilidade não foi a principal causa de suas perdas. No entanto, o incidente trouxe atenção generalizada para a vulnerabilidade e motivou o desenvolvimento do SegWit.