Post
Topic
Board Português (Portuguese)
Merits 13 from 4 users
Re: Hacker ganha R$ 2 milhões em Bitcoin após resolver enigma e perde tudo
by
CY4NiDE
on 18/02/2025, 19:51:14 UTC
⭐ Merited by bitmover (6) ,TryNinja (5) ,joker_josue (1) ,criptoevangelista (1)

Isso só é possível se o "atacante" também tem a chave privada.

Imagine o seguinte.

A pessoa solucionou o puzzle e pegou a chave privada.
Daí ele foi e fez uma transação  para transferir os fundos do puzzle pra carteira dele.

Mas, ele pagou 5 sat /vB, que iria demorar 10 blocos pra confirmar.

Até aqui você acertou.

Com poucas linhas de Python é possível armar um script que checa a mempool de segundo em segundo através de um node ou API, monitorando um endereço específico, aguardando esse endereço submeter uma transação pela primeira vez e revelar a chave publica, informação que até então (no contexto do puzzle #66) é conhecida apenas pelo detentor da chave privada.

Quando a primeira transação que gasta fundos do endereço #66 chega na mempool, a chave publica daquele endereço é revelada pra rede inteira instantaneamente. O script do atacante recebe retorno em questão de milissegundos e agora o atacante também tem aquela chave publica.

Basta agora iniciar uma instancia de Pollard Kangaroo ou BSGS pra derivar a chave privada. No pior dos cenários essa etapa poderia levar uns 30 segundos (Pra um ECDLP de 66 bits a complexidade é de apenas 2^33 operações usando os algoritmos citados) mas dependendo do hardware e implementação é possível derivar uma chave privada de 66 bits instantaneamente.

Tendo a chave privada o atacante começa a spammar a mempool com novas transações que gastam os mesmos fundos para outro endereço, pagando taxas mais altas do que a transação original e recebendo maior prioridade (Replace By Fee). O processo inteiro é facilmente automatizado do inicio ao fim com um único script em Python que faz tudo em menos de 1 minuto:

*A transação original é enviada a mempool pela pessoa que resolveu a chave privada primeiro e está aguardando confirmação*

- Detectar essa transação na mempool = milissegundos
- Recuperar a chave publica dos metadados = milissegundos
- Derivar chave privada de 66 bits através da chave publica = 1~30 segundos
- Usar a chave privada pra assinar novas transações = milissegundos
- Relay dessas transações através de APIs = milissegundos

Enquanto isso a transação original levaria seus ~10 minutos até ser confirmada. Obviamente não da tempo, pois antes disso acontecer a mempool já foi enxurrada com as transações do atacante, mais atrativas pros mineradores por conta das taxas mais altas sendo oferecidas.

Mesmo que a transação original venha com a bandeira Replace By Fee desabilitada e tenha sido aceita por um node que respeita essa bandeira, o atacante ainda pode submeter as transações dele pra mempool através de outros nodes, já que a grande maioria deles permite full RBF independente da bandeira RBF presente na transação original.

Esse hack só funciona no contexto do puzzle/desafio por conta das chaves privadas mais curtas (66,67,68,69 bits etc). Fora desse contexto é impossível empregar o método pois as chaves privadas usadas na rede possuem todos os 256 bits.