Mecanismo de privacidade Hack Mimblewimble

A privacidade das criptomoedas Mimblewimble / Grin é fundamentalmente vulnerável. Depois de gastar apenas US $ 60 por semana na AWS, vinculei remetentes e destinatários a 96% das transações do Grin em tempo real.

A vulnerabilidade está no coração do protocolo Mimblewimble e não acho que possa ser corrigido. Portanto, em termos de proteção da privacidade, o Mimblewimble não pode mais ser considerado uma alternativa viável ao Zcash ou Monero.

Nos últimos dois anos, o Mimblewimble se tornou popular como um protocolo compacto para criptomoedas privadas ("moedas de privacidade"). O Mimblewimble foi cunhado em 2016 por um hacker sob o pseudônimo de Tom Elvis Jedusor. Ele enviou a descrição do protocolo para o bate-papo no IRC e desapareceu. Desde então, as implementações mais famosas do Mimblewimble são as criptomoedas privadas Grin criadas por desenvolvedores anônimos, bem como os projetos Tari e BEAM que atraíram investimentos de risco. Até o Litecoin está considerando a integração do Mimblewimble .



Vários pesquisadores já levantaram a hipótese das possíveis fraquezas do mecanismo de privacidade no Mimblewimble. A contribuição do meu trabalho é demonstrar um método de ataque específico, provar sua viabilidade na criptomoeda real e medir sua eficácia. Ao executar o experimento Grin, consegui desarmar com êxito 96% das transações que revi. Portanto, agora é óbvio que você não pode confiar no Mimblewimble se precisar de alta privacidade.

No meu github, você encontrará uma descrição detalhada do ataque, fontes para jogá-lo, dados coletados e perguntas técnicas. Mais adiante neste artigo, há uma explicação geral e intuitiva da conectividade, como o ataque funciona e o que isso significa para as tecnologias de privacidade.

O que é conectividade?


É importante entender o que esse ataque significa e o que não significa.

Esse ataque não nos permite determinar a quantia que as pessoas recebem. O Mimblewimble oculta com êxito a quantidade de transferências usando criptografia baseada em curvas elípticas de baunilha ( esquema de obrigações de Pedersen ). O que esse ataque nos permite fazer é determinar quem pagou quem . Em outras palavras, ele nos permite conectar transações e determinar a direção das transferências.

Por que isso é importante?

Digamos que a Coinbase saiba que um endereço específico pertence a um venezuelano chamado Daniel. Você, um usuário americano, está tentando sacar moedas com o Coinbase. Mas depois de expandir o gráfico da transação, a Coinbase determina que você recebeu dinheiro de Daniel - mesmo que eles não saibam quanto. Devido a restrições impostas à Venezuela pela Autoridade de Controle de Ativos Estrangeiros dos EUA, a Coinbase fecha sua conta. (Obviamente, as trocas saberão muito sobre o gráfico da transação, porque eles têm dados do usuário KYC que são exibidos em ordem).

Ou imagine que algum governo autoritário saiba que um determinado endereço pertence a um dissidente político. Você envia a este dissidente uma pequena rosquinha. Mais tarde, quando você envia sua transferência do Mimblewimble para uma central local, essa central transfere os dados da transação para o governo. Como o governo vê o gráfico inteiro da transação, agora sabe que você apoiou o dissidente político.

Tais ataques não seriam possíveis no Zcash. Como as transações no Zcash não estão conectadas ou, em outras palavras, todas as transações do Zcash têm um grande conjunto de anonimato . Um conjunto de anonimato é um conjunto de transações das quais sua transação não pode ser distinguida. Imagine isso como uma mistura com a multidão: quanto maior o conjunto de anonimato, mais "multidão" sua transação será misturada.



No Zcash, o conjunto de anonimato de cada transação inclui todas as moedas protegidas. Este é o anonimato máximo possível do ponto de vista da informação teórica.



No Monero, o conjunto de anonimato para cada transação é o conjunto de todas as transações de isca ativadas pelo usuário. Embora o cliente Monero permita definir o número de iscas em um conjunto, o valor padrão atual é 11. (O Monero tem suas próprias dificuldades em escolher iscas com segurança , mas acho que, na maioria das vezes, funciona, mais ou menos ).

Inicialmente, assumiu-se que o conjunto de anonimato Mimblewimble consiste em todas as transações no mesmo bloco, ou seja, se parece com o seguinte:



Mas, na verdade, é assim:



Isso reduz o anonimato Mimblewimble definido para um único endereço.

Quero dizer que isso não é uma crítica a Grin em geral! Eu realmente respeito a comunidade Grin e os desenvolvedores principais, que sempre responderam prontamente às minhas perguntas nos fóruns.

O Grin ainda oferece maior privacidade do que o Bitcoin e outras moedas privadas, pois criptografa os valores com segurança. Mas o modelo de privacidade Mimblewimble é estritamente mais fraco que o de Zcash ou Monero. E isso a torna insuficiente para muitos casos de uso do mundo real em que a privacidade é necessária.

Visão geral do ataque


Exatamente como você pode anular a anonimização de um gráfico de transação no Mimblewimble?

Observei que, apesar da criptografia dos valores da transferência, o Mimblewimble deixa um gráfico de transação rastreável. Mas os desenvolvedores do protocolo sabiam disso e, portanto, o Mimblewimble usa duas maneiras principais de combater a conectividade: através da agregação de todo o bloco e do "dente-de-leão" (Dandelion) .

A idéia da agregação de ponta a ponta é que, quando as transações são coletadas em um bloco, elas são agregadas em uma "super transação". Essa "super transação " se parece com um CoinJoin gigante - todas as entradas e saídas são misturadas e não há maneira fácil de determinar qual pagou a quem. Existem apenas várias entradas e saídas, e quantidades específicas estão ocultas.



Parece confiável? Há apenas um problema: esse CoinJoin é construído uma transação por vez. Como as transações são constantemente criadas e enviadas de locais diferentes, se você mantiver um nó sniffer que coleta todas as transações antes da agregação de ponta a ponta, é muito fácil desembaraçar o CoinJoin. Qualquer nó sniffer pode simplesmente monitorar a rede e lembrar as transações originais antes de serem agregadas. Isso é fácil se você simplesmente arquivar todas as mensagens que vê em uma rede P2P.


Aqui você pode se surpreender - e isso é tudo?

De fato, há outra camada de proteção criada pela equipe do Grin: o protocolo Dandelion ("dandelion") . O dente-de-leão é um método de rede desenvolvido por pesquisadores da Universidade Carnegie Mellon, que deve ocultar o IP do criador da transação.



Normalmente, em criptomoedas como bitcoin, o criador da transação simplesmente envia a transação a todos os seus pares e passa rapidamente pela rede P2P. Mas no protocolo Dandelion, a distribuição de cada transação começa com o jogo secreto de um telefone com defeito. O criador transfere sua transação para apenas um banquete, que, por sua vez, passa para outro banquete, e assim por diante ao longo da cadeia (“tronco” de dente-de-leão). Após um número aleatório desses movimentos, o último banquete envia a transação exatamente como no bitcoin (“flor” de dente-de-leão). Mas esse banquete está tão longe do criador da transação que nenhum observador pode dizer quem iniciou a cadeia.

Isso funciona muito bem para ocultar o IP da pessoa que está comprometendo a transação. Mas o Dandelion in Grin tem uma segunda função: em casos raros, permite manter o anonimato da transação, mesmo se houver um nó sniffer na rede. Como cada transação começa na fase "tronco" do dente-de-leão, quando duas transações se cruzam na fase de propagação "tronco", elas serão agregadas mais cedo. Se isso acontecer, quando a transação for enviada e se tornar visível para todos, o nó sniffer não poderá colar as transações: elas já estarão presas juntas no CoinJoin.

Esse mecanismo de envio de transações é a principal defesa do Grin contra a conectividade transacional por nós sniffer. Mas há uma maneira fácil de quebrá-la.

Por padrão, cada nó Grin é conectado a 8 outros nós pares. Mas, aumentando o número de pares, posso conectar meu nó sniffer a cada nó da rede. Se meu site estiver online continuamente por um longo tempo, no final, quase todos os nós da rede se conectarão a mim, tornando-me um super hub .

Quando me torno um super-nó, há uma alta probabilidade de estar na cadeia de "dente-de-leão" de cada transação. Portanto, a única razão pela qual talvez eu não consiga capturar uma transação antes de sua agregação é se as duas transações cruzaram a fase-tronco do dente-de-leão antes de ver pelo menos uma delas . Se eu vir pelo menos um deles antes de serem agregados, posso separá-los com uma simples subtração dos conjuntos.



No meu ataque, consegui conectar 96% de todas as transações, conectando apenas 200 pares do total de 3000 pares na rede Grin. Mas se eu estivesse disposto a gastar um pouco mais de dinheiro, poderia conectar-me facilmente a 3.000 nós para realizar quase todas as transações. E para isso, não é necessário manter um superusuário grande - o mesmo ataque funcionará se você executar 3.000 nós separados com IPs exclusivos, cada um dos quais será conectado a apenas um ponto. Desde que eu intercepte todos os dados transacionais e os despejo no banco de dados mestre central, o ataque funcionará exatamente da mesma maneira.

Portanto, é possível salvar o Mimblewimble?


Claro. Na minha opinião, na versão atual do Grin, não há como proteger o gráfico de transações. Apenas prolongar o "dente-de-leão" não é suficiente - será fácil derrotar com um grande número de nós, como descrevo no relatório técnico .

Mas, apesar da conectividade transacional, o Mimblewimble ainda possui propriedades que diferenciam o protocolo de outras criptomoedas. Por meio dele, a agregação de ponta a ponta é possível, o que é uma maneira eficaz de reduzir o tamanho da blockchain e oculta efetivamente os valores das transações. Se você deseja alta privacidade, sempre pode combinar o Mimblewimble com outro protocolo que oculta o gráfico de transações, por exemplo, como no Ethereum 9¾ (que combina o Mimblewimble com um esquema de redefinição zero no estilo Zerocash).

Mas é óbvio que o próprio Mimblewimble não é forte o suficiente para fornecer alta privacidade.

O Bitcoin agora tem 11 anos, mas as criptomoedas ainda estão em um estágio muito inicial de desenvolvimento. Há não muito tempo, foram descobertas vulnerabilidades sérias no Zcash e no Monero . E isso é de se esperar: as tecnologias mais interessantes ainda estão em fase de pesquisa.

Mas é assim que a ciência sempre se desenvolve: constantemente propomos novas hipóteses e as refutamos até restarem apenas aquelas que passaram no teste do tempo.

Agradecemos a Hasib Kireshi pela ajuda substancial na compilação deste relatório e na ilustração dos conjuntos de anonimato. Agradecimentos adicionais a Oleg Ostroumov, Elena Nadolinsky, Mohamed Fouda, Lucas Ryan e Nader Al-Naji pela revisão dos rascunhos deste post. E muito obrigado a Jake Stutzman (Protocolo NEAR) pelas ilustrações de Dandelion e agregação de blocos. Obrigado Daria Smirnova por traduzir o artigo.

Se você gostou do artigo, recomendo assinar o meu Twitter , onde eles vão primeiro (em inglês).

Divulgação: A Dragonfly Capital concorda em não negociar os ativos listados neste relatório por três dias a partir da data de publicação.

Source: https://habr.com/ru/post/pt477018/


All Articles