
Estudo criptanalítico das falhas CVE-2025-29774 e SIGHASH_SINGLE na implementação ECDSA do Bitcoin, permitindo recuperação de chave privada via reutilização de nonce e falsificação de assinatura para acesso a carteiras perdidas.
Este artigo de pesquisa apresenta um estudo criptanalítico abrangente de vulnerabilidades críticas na implementação de assinatura digital do protocolo Bitcoin, nomeadamente o Phantom Signature Attack (CVE-2025-29774) e o erro fundamental de processamento SIGHASH_SINGLE . O estudo demonstra que o processamento incorreto de primitivas criptográficas no mecanismo de assinatura de transações cria as condições para o comprometimento completo das chaves privadas dos proprietários de carteiras de criptomoedas sem o seu conhecimento. O ataque explora um bug legado no cliente Satoshi original, no qual o sistema retorna um valor hash universal de “1” (uint256) em vez de rejeitar a assinatura se o número de entradas e saídas da transação não corresponder.
A parte prática do estudo envolve o uso da ferramenta criptográfica KeyFuzzMaster para identificar sistematicamente vulnerabilidades no código de verificação de assinatura, operações de curva elíptica e funções de hash de transações. São apresentadas fórmulas matemáticas para recuperação de chave privada através da reutilização de nonce (parâmetro k) no algoritmo ECDSA na curva secp256k1. São discutidas primitivas criptográficas do algoritmo ECDSA (Elliptic Curve Digital Signature Algorithm) sobre a curva elíptica secp256k1 . As assinaturas digitais no Bitcoin desempenham uma função tripla: autorização de gastos, não repúdio e garantia da integridade da transação.
No entanto, a manutenção de soluções arquitectónicas legadas para garantir a compatibilidade reversa levou ao surgimento de vulnerabilidades criptográficas subtis com consequências potencialmente catastróficas. Entre estas, o bug SIGHASH_SINGLE destaca-se — uma falha fundamental no mecanismo de geração de hash de assinatura, herdada da implementação original do Bitcoin Core e integrada no consenso da rede.
| Identificador CVE | Componente | Pontuação CVSS | Criticidade |
|---|---|---|---|
| CVE-2025-29774 | xml-crypto / SIGHASH_SINGLE | 9.3 | Crítica |
| CVE-2025-29775 | xml-crypto DigestValue bypass | 9.3 | Crítica |
| CVE-2025-48102 | GoUrl Bitcoin Payment Gateway (Stored XSS) | 5.9 | Média |
| CVE-2025-26541 | CodeSolz WooCommerce Gateway (Reflected XSS) | 6.1 | Média |
Bitcoin usa a curva elíptica secp256k1 definida pelo padrão SECG (Standards for Efficient Cryptography Group). A curva é definida pela equação de Weierstrass sobre um corpo finito:
Equação da curva:
y² ≡ x³ + ax + b (mod p)
Para secp256k1:
y² ≡ x³ + 7 (mod p), onde a = 0, b = 7
Os parâmetros da curva secp256k1 são determinados pela tupla T = (p, a, b, G, n, h):
Parâmetros secp256k1:
p = 2²⁵⁶ − 2³² − 977 (o número primo que define um corpo finito)
n = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141
(a ordem do grupo de pontos da curva é a ordem inteira do gerador G)
G = (Gₓ, Gᵧ) — ponto base fixo (gerador)
O algoritmo ECDSA usa uma chave privada d para formar uma assinatura numa mensagem M. O processo de assinatura envolve as seguintes operações matemáticas: