Mezcladores, CoinJoin y criptomonedas de privacidad · Lección 3 de 5
Mezcladores de contratos inteligentes
9 min de lectura
Un mezclador de contratos inteligentes deja un registro público más completo que cualquier servicio de custodia: cada depósito y cada retiro es un evento que cualquiera puede decodificar. Lo que elimina es el único dato que buscan los investigadores: el vínculo entre ambos, y lo elimina mediante criptografía, no mediante una base de datos que pueda incautarse. Esta lección aborda qué prueban los registros del contrato, cómo funcionan las heurísticas de vinculación publicadas y hasta qué punto se puede confiar en ellas, y dónde se encuentra la evidencia que confirma un vínculo: notas, relayers e interfaces.
Tornado Cash desde el punto de vista probatorio
Tornado Cash es el diseño de referencia. Cada pool es un contrato que acepta un importe fijo; los pools de ETH aceptan 0,1, 1, 10 o 100 ETH, y existen pools de tokens para activos como DAI, USDC, USDT y WBTC. Los contratos de los pools no se pueden pausar ni actualizar. Los mecanismos se describen en la lección de IDFE-BA Mezcladores, CoinJoin y ofuscación en grafos; aquí se explica qué demuestra cada registro.
| Registro | Campos clave | Qué demuestra | Qué no demuestra |
|---|---|---|---|
Llamada a deposit(bytes32 _commitment) y evento Deposit | commitment, leafIndex, timestamp, remitente de la transacción | Esta dirección pagó el importe del pool y registró este compromiso | Quién lo retiró después |
Llamada a withdraw(...) | prueba, raíz de Merkle, nullifierHash, destinatario, relayer, comisión, reembolso | Se presentó una prueba válida de algún depósito no gastado del árbol | Qué depósito |
Evento Withdrawal | to, nullifierHash, relayer, fee | Este destinatario recibió el importe menos la comisión; se pagó a este relayer, si lo hubo | Quién lo solicitó |
El software del depositante genera dos secretos: un nullifier y un valor aleatorio. El compromiso es un hash de ambos; el hash del nullifier es un hash únicamente del nullifier. El usuario conserva ambos secretos en una nota, una cadena como tornado-eth-0.1-1-0x… que codifica la moneda, el importe, el ID de cadena y los secretos. El contrato registra cada hash del nullifier y rechaza un segundo retiro con el mismo valor. Quien tenga la nota puede retirar; en la práctica, la nota es una clave al portador.
El conjunto de anonimato y cómo informarlo
Para un retiro determinado, los candidatos son los depósitos realizados en el mismo pool antes de ese retiro. Dos cifras describen ese conjunto con precisión, y las tablas de eventos decodificados proporcionan ambas:
-- Conjunto de anonimato para un retiro del pool de 10 ETH en el bloque 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;
La primera subconsulta cuenta cada depósito anterior al bloque del retiro: todos son candidatos, porque el contrato nunca revela qué depósitos se han gastado. La segunda cuenta los retiros anteriores. La diferencia es el número de depósitos que seguían sin gastarse en ese momento, es decir, el tamaño operativo del pool. Informe ambas cifras, junto con el pool, el bloque y la fuente de datos. Los nombres de las tablas son ilustrativos; constrúyalas a partir de los registros del contrato del pool filtrados por la firma del evento (consulte la lección de IDFE-BA Consulta de registros y trazas de EVM).
Heurísticas de vinculación en investigaciones publicadas
Los investigadores han medido con qué frecuencia los usuarios revelan el vínculo por sí mismos. Las heurísticas que más se citan son:
| Heurística | Lógica | Solidez y salvedades |
|---|---|---|
| Coincidencia de direcciones | La misma dirección deposita y retira | Casi determinista respecto del control; aun así, compruebe si se trata de direcciones compartidas o de custodia |
| Direcciones vinculadas | Las direcciones del depositante y del destinatario han realizado transacciones entre sí fuera del mezclador (Tutela utilizó tres o más transacciones de este tipo) | Sólida cuando las interacciones son directas y repetidas |
| Financiación de gas | El depositante, o una dirección que este financia, paga el gas de la dirección de retiro | Patrón sólido; los proveedores de gas y los financiadores compartidos generan vínculos falsos |
| Múltiples denominaciones | Un conjunto inusual de depósitos en distintos pools (por ejemplo, 3 × 10 ETH y 1 × 1 ETH) coincide con el mismo conjunto de retiros en el plazo de aproximadamente un día | Probabilística; pierde solidez a medida que aumenta la actividad del pool |
| Precio de gas único | El depósito y el retiro utilizaron el mismo precio de gas inusual, establecido por el usuario | Solo antes del cambio del mercado de comisiones de agosto de 2021 (EIP-1559), y solo para retiros que no pasan por un relayer |
| Temporalidad | Un retiro poco después de un depósito en un pool poco activo | Débil por sí sola; útil para acotar conjuntos |
| Reclamos de recompensas | Los reclamos del programa de recompensas por minería de anonimato (de diciembre de 2020 a diciembre de 2021) revelaron cuánto tiempo permaneció un depósito en el pool | De alcance limitado; solo para quienes reclamaron recompensas |
Dos estudios muestran la magnitud. Tutela (Wu y colegas, 2022) señaló alrededor de 42.800 de 97.300 depósitos, aproximadamente el 44 %, como posiblemente comprometidos por al menos una heurística; las principales fueron direcciones vinculadas (18.900), coincidencia de direcciones (18.600) y múltiples denominaciones (16.200). También calculó una reducción promedio del 37 % (±15 %) en los conjuntos de anonimato. Wang y colegas (ACM Web Conference 2023) informaron reducciones promedio del 27,34 % en los pools de mezcladores más populares de Ethereum y del 46,02 % en un mezclador comparable de otra cadena. Béres y colegas (2021) utilizaron identificadores de servicios de nombres como referencia parcial para perfilar a los usuarios según sus hábitos de precios de gas y su actividad en distintos momentos del día.
El punto probatorio fundamental es que los autores de Tutela señalan que sus heurísticas producirán falsos positivos y no informan ninguna validación con datos de referencia para las heurísticas de Tornado Cash. Las cifras publicadas muestran que las filtraciones son frecuentes; no proporcionan una tasa de error para un vínculo en su caso. Califique un vínculo basado en una sola heurística con C o D, según su lógica, y busque corroboración de otro tipo de evidencia.
Ejemplo práctico. La dirección 0xA1b2…9F deposita 3 × 10 ETH y 1 × 1 ETH en el plazo de una hora. Diecinueve horas después, una dirección nueva, 0x5cE0…71, recibe tres retiros del pool de 10 ETH y uno del pool de 1 ETH mediante un relayer, cada uno menos la comisión del relayer, y su primera transacción saliente paga a una dirección de depósito de un exchange. El examinador cuenta cuántas otras direcciones depositaron la misma combinación en las 48 horas anteriores (ninguna) y cuántos conjuntos de retiros con esa composición se produjeron (uno). La coincidencia de múltiples denominaciones se registra con una calificación D y sus recuentos; se solicitan los registros del exchange para la dirección de depósito; si muestran que se trata del mismo cliente que financió 0xA1b2…9F, el vínculo sube a B.
Notas: la evidencia que confirma un vínculo
Una nota encontrada bajo autoridad legal aporta algo que ninguna heurística puede ofrecer. A partir de los secretos de la nota, el examinador vuelve a calcular el compromiso, que identifica el evento Deposit, y el hash del nullifier, que identifica el evento Withdrawal, si existe. Esto establece un vínculo determinista y repetible de forma independiente entre el depositante y el destinatario. Si ningún retiro contiene ese hash del nullifier, el depósito sigue en el pool y la nota aún permite controlarlo; en ese caso, protegerlo es una cuestión de recuperación de activos (consulte las lecciones Opciones de congelamiento e incautación y Protección de criptoactivos incautados).
Dónde se encuentran las notas:
- archivos de texto, incluidos los archivos de respaldo que el cliente de línea de comandos escribe al crear una nota;
- gestores de contraseñas, aplicaciones de notas, capturas de pantalla, mensajes de chat enviados a uno mismo y documentos en papel;
- respaldos cifrados que la interfaz podía almacenar en cadena mediante una «cuenta de notas», legibles con la clave de la cuenta;
- informes de la herramienta de cumplimiento de la interfaz, que generaba un documento a partir de una nota con el depósito y el retiro correspondientes.
Trate una nota como trataría una clave privada (consulte las lecciones Wallets en dispositivos incautados y Hashing, registro y cadena de custodia). Nunca la pegue en una interfaz alojada ni en un sitio de terceros: cualquiera que la vea puede retirar fondos no gastados. Vuelva a calcular los valores con código de fuente abierta en una máquina aislada del examinador, registre la versión y el hash del software y pida a un segundo examinador que repita el cálculo.
Relayers e interfaces
El evento Withdrawal indica el relayer y su comisión, por lo que la dirección del relayer es un hecho determinista. Los relayers son operadores independientes; los registrados hacen staking de tokens de gobernanza en un registro en cadena que la interfaz consulta, pero los pools pagan a cualquier relayer que se indique en un retiro. Un relayer recibe la solicitud de retiro a través de la red y puede conservar registros de las horas de las solicitudes y de las direcciones de red, si lleva algún registro. Considérelo un posible custodio de registros, identifique a su operador a partir del registro y de los registros de nombres, y tenga en cuenta que muchos operan detrás de redes de anonimización o no conservan nada.
La interfaz es código independiente, distribuido desde almacenamiento descentralizado y gateways, y puede cambiar. A principios de 2024, una propuesta de gobernanza maliciosa insertó código en la interfaz distribuida a través de gateways IPFS que enviaba las notas de los usuarios a un servidor externo, desde el 1 de enero de 2024 hasta que se descubrió. De esto se desprenden dos lecciones: registre qué versión de la interfaz y qué gateway utilizó el sujeto (historial del navegador, registros de conexión de la extensión de la wallet) y recuerde que la nota también puede estar en manos de otra persona.
Una autoridad sancionó los contratos de Tornado Cash en agosto de 2022 y levantó la designación en marzo de 2025; los contratos siguieron funcionando todo el tiempo (consulte la lección de IDFE-CC Análisis de wallets y transacciones).
Enfoque del examen: qué demuestran y qué no demuestran los eventosDeposityWithdrawaly los parámetros dewithdraw; el compromiso, el hash del nullifier y la nota como clave al portador; cómo informar los depósitos previos y los depósitos no gastados como conjunto de anonimato; las heurísticas de coincidencia de direcciones, direcciones vinculadas, financiación de gas, múltiples denominaciones, precio de gas único, temporalidad y reclamos de recompensas, con sus salvedades; Tutela (alrededor del 44 % de los depósitos señalados, reducción promedio del 37 %) y Wang et al. (27,34 %), y la ausencia de tasas de error validadas; una nota encontrada como vínculo determinista, dónde se encuentran las notas y cómo manejarlas de forma segura; evidencia sobre relayers e interfaces.
Preguntas de práctica
Comprueba lo que has aprendido. Estas preguntas no cuentan para el examen.
Inicia sesión para guardar tu progreso y continuar donde lo dejaste. Es gratis. Iniciar sesión