Como alguns de vocês sabem, eu sempre fui muito de pesquisar sobre as curiosidades a cerca das criptomoedas. Gosto de visitar os posts antigos das lendas que já foram muito frequentes aqui no BitcoinTalk e ver a forma como eles pensavam sobre determinados assuntos, como corrigiram alguns problemas no código e como essa comunidade foi crescendo de algo que haviam poucos cypherpunks para pessoas que não fazem a mínima ideia qual é essa ideologia de vida.
Geralmente essas minhas pesquisas eu acabo guardando para mim. E vira e mexe eu solto quando alguém faz algum post relacionado com o assunto. Mas lembrei dessa história e me deu na telha de fazer um post para que mais gente que assim como eu gosta de saber de algumas curiosidades possa saber e pesquisar mais se achar interessante.
Então, vamos lá. O que eu venho compartilhar hoje começou lá em 2013 quando o
Peter Todd, grande desenvolvedor do Bitcoin, lançou o seguinte
desafio (cortei algumas partes para não ficar tão extenso):
Recompensas nos seguintes endereços P2SH estão disponíveis para qualquer pessoa capaz de demonstrar ataques de colisão contra algumas formas de algoritmos criptográficos. Você resgata sua recompensa demonstrando duas mensagens diferentes, mas que resultam no mesmo hash quando criptografadas. Essas mensagens são usadas em um scriptSig, que satisfaz o scriptPubKey que armazena as moedas, permitindo movê-las para um scriptPubKey (endereço Bitcoin) de sua escolha.
Doações adicionais para as recompensas são bem-vindas, especialmente para SHA1 - endereço
37k7toV1Nv4DfmQbmZ8KuZDQCYK9x5KpzP - onde se acredita que um ataque a um único valor de hash seja preciso um gasto estimado de US$ 2,77 milhões. (4)
SHA1:
$ btc decodescript 6e879169a77ca787
{
"asm" : "OP_2DUP OP_EQUAL OP_NOT OP_VERIFY OP_SHA1 OP_SWAP OP_SHA1 OP_EQUAL",
"type" : "nonstandard",
"p2sh" : "37k7toV1Nv4DfmQbmZ8KuZDQCYK9x5KpzP"
}
SHA256:
$ btc decodescript 6e879169a87ca887
{
"asm" : "OP_2DUP OP_EQUAL OP_NOT OP_VERIFY OP_SHA256 OP_SWAP OP_SHA256 OP_EQUAL",
"type" : "nonstandard",
"p2sh" : "35Snmmy3uhaer2gTboc81ayCip4m9DT4ko"
}
...
Notas:
1) Aconselhamos minerar o bloco no qual você mesmo coleta sua recompensa; scriptSigs que satisfazem os scriptPubKeys acima não assinam criptograficamente as saídas da transação. Se o valor da recompensa for suficientemente grande, outros mineradores poderão achar lucrativo reorganizar a cadeia para eliminar o seu bloco e receber a recompensa eles próprios. Isto é particularmente lucrativo para pools de mineração maiores e centralizados.
2) Observe que o valor da sua recompensa dos algoritmos SHA256, RIPEMD160, RIPEMD160(SHA256()) ou SHA256^2 pode ser diminuído pelo ato de coletá-la.
3) Devido às limitações da linguagem de script do Bitcoin, as recompensas só podem ser coletadas com soluções que usam mensagens com tamanho inferior a 521 bytes.
4) "Quando veremos colisões para SHA-1?" -Bruce Schneier -https://www.schneier.com/blog/archives/2012/10/when_will_we_se.html
O que ele acaba de criar com esse post? Basicamente ele criou um puzzle utilizando o Bitcoin em que a partir daquele momento não seria mais preciso a intervenção de ninguém para receber o prêmio. E para ganhar esse prêmio bastava ficar ligado em quando uma colisão de SHA1 fosse encontrada. Basicamente ele gerou um endereço P2SH (
O que é P2SH?) em que o script que definia quando aqueles fundos poderiam ser gastos era o seguinte:
OP_2DUP OP_EQUAL OP_NOT OP_VERIFY OP_SHA1 OP_SWAP OP_SHA1 OP_EQUAL
Traduzindo seriam basicamente: pegue a mensagem 1, pegue a mensagem 2, verifique que eles não são iguais. Aplique a função hash em 1 e 2 e verifique que elas são iguais. Você pode estar pensando: é só isso? A questão é que para que uma coincidência dessa ocorra naturalmente a probabilidade é de 1 para 340 undecilhões, ou 1 em 2¹²⁸. Mas o que acontece é que várias pessoas estudam diversas técnicas de ataques à esses hashs, pois, a nossa vida digital como conhecemos hoje basicamente depende de funções assim. Deste modo, quando alguém encontra uma colisão, a ideia é abandonar essa forma de criptografia, pois ninguém na terra deve ter a capacidade de quebrá-la. É uma paranoia de segurança, mas é bem importante.
Eis que então acontece algo em 2017:
Pesquisadores do Google anunciam que encontraram (provocaram) a primeira colisão de SHA1 da históriaAlguns dados desse anúncio:
6.500 anos de processamento de CPU para completar a primeira fase do ataque.
110 anos de processamento de GPU para completar a segunda fase.
Isso porque esse ataque eles fizeram é 100 mil vezes mais rápido do que um ataque de força bruta
Voltando ao puzzle...Dada essa notícia então, alguém muito ligeiro foi lá e usou os dados da pesquisa do Google para resolver então o puzzle do Peter Todd que naquela altura acumulava 2.48 BTC no seu endereço.
Essa é a transação que resgatou o puzzle:
https://live.blockcypher.com/btc/tx/8d31992805518fd62daa3bdd2a5c4fd2cd3054c9b3dca1d78055e9528cff6adc/#advanced-detailsO que ninguém esperava, ou somente os mais inocentes não esperavam é que como essa transação não necessitava de algum tipo de assinatura e todos os dados para gerar a transação estavam na própria transação, haviam bots que estavam monitorando esse tipo de transação para tentar fazer um gasto duplo e obter uma confirmação mais rápido que a pessoa que "resolveu" originalmente o puzzle. Felizmente o atacante não obteve sucesso e quem foi o experto que viu o anúncio do Google e já estava ligado no puzzle ninguém sabe, mas ele é parte de uma história interessante do nosso universo crypto.
Para quem se interessou no desafio e gostaria de ver como ele foi "montado" pelo Peter Todd segue um tutorial do BitcoinJS Guide que tenta replicar a mesma ideia