Mixers, CoinJoin e moedas de privacidade · Aula 3 de 5
Mixers de contratos inteligentes
9 min de leitura
Um mixer de contrato inteligente deixa um registro público mais completo do que qualquer serviço custodial: cada depósito e cada saque são eventos que qualquer pessoa pode decodificar. O que ele remove é o único fato que os investigadores querem descobrir: o vínculo entre eles. E o remove com criptografia, em vez de um banco de dados que possa ser apreendido. Esta aula aborda o que os registros do contrato comprovam, como funcionam as heurísticas de vinculação publicadas e até que ponto se pode confiar nelas, além de onde realmente estão as evidências que estabelecem um vínculo: notas, relayers e interfaces.
Tornado Cash em termos probatórios
Tornado Cash é o modelo de referência. Cada pool é um contrato que aceita um valor fixo; os pools de ETH aceitam 0,1, 1, 10 ou 100 ETH, e há pools de tokens para ativos como DAI, USDC, USDT e WBTC. Os contratos dos pools não podem ser pausados nem atualizados. A mecânica é descrita na aula IDFE-BA Mixers, CoinJoin e ofuscação em grafos; veja o que cada registro comprova.
| Registro | Campos principais | O que comprova | O que não comprova |
|---|---|---|---|
Chamada deposit(bytes32 _commitment) e evento Deposit | commitment, leafIndex, timestamp, remetente na transação | Este endereço pagou o valor do pool e registrou este commitment | Quem sacou posteriormente |
Chamada withdraw(...) | prova, raiz de Merkle, nullifierHash, destinatário, relayer, taxa, reembolso | Foi apresentada uma prova válida de algum depósito não gasto na árvore | Qual depósito |
Evento Withdrawal | to, nullifierHash, relayer, fee | Este destinatário recebeu o valor menos a taxa; este relayer, se houver, foi pago | Quem solicitou o saque |
O software do depositante gera dois segredos: um nullifier e um valor aleatório. O commitment é um hash de ambos; o hash do nullifier é um hash apenas do nullifier. O usuário guarda os dois segredos em uma nota, uma string como tornado-eth-0.1-1-0x… que codifica a moeda, o valor, o ID da cadeia e os segredos. O contrato registra cada hash de nullifier e rejeita um segundo saque com o mesmo valor. Quem tiver a nota poderá sacar; na prática, a nota é uma chave ao portador.
O conjunto de anonimato e como relatá-lo
Para um determinado saque, os candidatos são os depósitos feitos no mesmo pool antes dele. Dois números descrevem esse conjunto com precisão, e as tabelas de eventos decodificados fornecem ambos:
-- Conjunto de anonimato para um saque do pool de 10 ETH no bloco 15.200.000
SELECT
(SELECT COUNT(*) FROM tc_deposits
WHERE pool = 'ETH-10' AND block_number < 15200000) AS prior_deposits,
(SELECT COUNT(*) FROM tc_withdrawals
WHERE pool = 'ETH-10' AND block_number < 15200000) AS prior_withdrawals;
A primeira subconsulta conta todos os depósitos anteriores ao bloco do saque: cada um é um candidato, pois o contrato nunca revela quais depósitos foram gastos. A segunda conta os saques anteriores. A diferença é o número de depósitos ainda não gastos naquele momento, que corresponde ao tamanho efetivo do pool. Informe ambos os valores, junto com o pool, o bloco e a fonte dos dados. Os nomes das tabelas aqui são ilustrativos; crie-as a partir dos logs do contrato do pool, filtrados pela assinatura do evento (consulte a aula IDFE-BA Consultas a logs e rastros da EVM).
Heurísticas de vinculação em pesquisas publicadas
Pesquisadores mediram a frequência com que os próprios usuários deixam escapar o vínculo. As heurísticas mais citadas:
| Heurística | Lógica | Força e ressalvas |
|---|---|---|
| Correspondência de endereço | O mesmo endereço deposita e saca | Quase determinística quanto ao controle; ainda é preciso verificar se há endereços compartilhados ou custodiais |
| Endereços vinculados | Os endereços do depositante e do destinatário transacionaram entre si fora do mixer (a Tutela usou três ou mais transações desse tipo) | Forte quando as interações são diretas e repetidas |
| Financiamento de gas | O depositante, ou um endereço financiado por ele, paga o gas do endereço de saque | Padrão forte; provedores de gas e financiadores compartilhados criam vínculos falsos |
| Múltiplas denominações | Um conjunto incomum de depósitos em vários pools (por exemplo, 3 × 10 ETH e 1 × 1 ETH) corresponde ao mesmo conjunto de saques em cerca de um dia | Probabilística; perde força à medida que a atividade do pool aumenta |
| Preço de gas exclusivo | O depósito e o saque usaram o mesmo preço de gas incomum, definido pelo usuário | Apenas antes da mudança do mercado de taxas de agosto de 2021 (EIP-1559), e apenas para saques sem relayer |
| Tempo | Um saque logo após um depósito em um pool com pouca atividade | Fraca isoladamente; útil para restringir os conjuntos |
| Reivindicações de recompensas | As reivindicações do programa de recompensas de mineração de anonimato (dezembro de 2020 a dezembro de 2021) revelaram por quanto tempo um depósito permaneceu no pool | Aplicável a um grupo restrito; apenas para usuários que fizeram reivindicações |
Dois estudos mostram a dimensão do fenômeno. A Tutela (Wu e colegas, 2022) sinalizou cerca de 42.800 de 97.300 depósitos, aproximadamente 44%, como potencialmente comprometidos por pelo menos uma heurística. Os principais fatores foram endereços vinculados (18.900), correspondência de endereço (18.600) e múltiplas denominações (16.200). O estudo estimou uma redução média de 37% (±15%) nos conjuntos de anonimato. Wang e colegas (ACM Web Conference 2023) relataram reduções médias de 27,34% para os pools de mixers mais populares da Ethereum e de 46,02% para um mixer comparável em outra cadeia. Béres e colegas (2021) usaram identificadores de serviços de nomes como referência parcial para traçar perfis de usuários com base nos hábitos de preço de gas e na atividade por horário do dia.
O ponto crucial para as evidências: os autores da Tutela afirmam que suas heurísticas produzirão falsos positivos e não apresentam validação com referência à verdade para as heurísticas de Tornado Cash. Os números publicados mostram que os vazamentos são comuns; eles não fornecem uma taxa de erro para um vínculo no seu caso. Classifique um vínculo baseado em uma única heurística como grau C ou D, dependendo da lógica, e procure confirmação em outro tipo de evidência.
Exemplo resolvido. O endereço 0xA1b2…9F deposita 3 × 10 ETH e 1 × 1 ETH em uma hora. Dezenove horas depois, o novo endereço 0x5cE0…71 recebe três saques do pool de 10 ETH e um do pool de 1 ETH por meio de um relayer, cada um descontada a taxa do relayer. Sua primeira transação de saída paga um endereço de depósito de um exchange. O examinador conta quantos outros endereços depositaram a mesma combinação nas 48 horas anteriores (nenhum) e quantos conjuntos de saques com essa configuração ocorreram (um). A correspondência de múltiplas denominações é registrada como grau D, com suas contagens; são solicitados os registros do exchange para o endereço de depósito. Se mostrarem o mesmo cliente que financiou 0xA1b2…9F, o vínculo sobe para B.
Notas: a evidência que estabelece um vínculo
Uma nota encontrada sob autoridade legal faz o que nenhuma heurística pode fazer. Com os segredos da nota, o examinador recalcula o commitment, que identifica o evento Deposit, e o hash do nullifier, que identifica o evento Withdrawal, se houver. Isso estabelece um vínculo determinístico e repetível de forma independente entre o depositante e o destinatário. Se nenhum saque apresentar esse hash do nullifier, o depósito ainda está no pool e a nota ainda dá controle sobre ele; nesse caso, protegê-lo é uma questão de recuperação de ativos (consulte as aulas Opções de congelamento e apreensão e Proteção de criptoativos apreendidos).
Onde as notas podem ser encontradas:
- arquivos de texto, incluindo arquivos de backup gravados pelo cliente de linha de comando ao criar uma nota;
- gerenciadores de senhas, aplicativos de notas, capturas de tela, mensagens enviadas para si mesmo e papel;
- backups criptografados que a interface poderia armazenar na cadeia por meio de uma “conta de notas”, legíveis com a chave da conta;
- relatórios da ferramenta de conformidade da interface, que gerava um documento a partir de uma nota, listando seu depósito e saque.
Trate uma nota como trataria uma chave privada (consulte as aulas Carteiras em dispositivos apreendidos e Hashing, registro e cadeia de custódia). Nunca a cole em uma interface hospedada ou em um site de terceiros: qualquer pessoa que a veja poderá sacar fundos ainda não gastos. Recalcule usando código de código aberto em uma máquina isolada do examinador, registre a versão e o hash do software e peça a um segundo examinador que repita o cálculo.
Relayers e interfaces
O evento Withdrawal identifica o relayer e sua taxa, portanto o endereço do relayer é um fato determinístico. Os relayers são operadores independentes; os registrados depositam tokens de governança como garantia em um registro na cadeia que a interface consulta, mas os pools pagam qualquer relayer indicado em um saque. Um relayer recebe a solicitação de saque pela rede e pode manter registros dos horários das solicitações e dos endereços de rede, caso mantenha algum registro. Considere-o um possível detentor de registros, identifique seu operador a partir do registro e de registros de nomes, e espere que muitos operem por trás de redes de anonimização ou não mantenham registros.
A interface é um código separado, servido por armazenamento descentralizado e gateways, e que muda. No início de 2024, uma proposta maliciosa de governança inseriu código na interface servida por gateways IPFS que enviava as notas dos usuários a um servidor externo, a partir de 1º de janeiro de 2024 até que isso fosse descoberto. Seguem-se duas lições: registre qual versão da interface e qual gateway o indivíduo usou (histórico do navegador, registros de conexão da extensão da carteira) e lembre-se de que a nota também pode estar nas mãos de outra pessoa.
Uma autoridade sancionou os contratos de Tornado Cash em agosto de 2022 e suspendeu a designação em março de 2025; os contratos continuaram funcionando durante todo esse período (consulte a aula IDFE-CC Triagem de carteiras e transações).
Foco no exame: o que os eventosDepositeWithdrawale os parâmetros dewithdrawcomprovam e não comprovam; o commitment, o hash do nullifier e a nota como chave ao portador; como relatar os depósitos anteriores e os depósitos não gastos como conjunto de anonimato; as heurísticas de correspondência de endereço, endereços vinculados, financiamento de gas, múltiplas denominações, preço de gas exclusivo, tempo e reivindicações de recompensas, com suas ressalvas; Tutela (cerca de 44% dos depósitos sinalizados, redução média de 37%) e Wang et al. (27,34%), além da ausência de taxas de erro validadas; a nota encontrada como vínculo determinístico, onde as notas podem ser encontradas e como manuseá-las com segurança; evidências de relayers e interfaces.
Questões de prática
Verifique o que você aprendeu. Estas questões não contam para o exame.
Entre para salvar seu progresso e continuar de onde parou. É grátis. Entrar