La privacidad de la criptomoneda Mimblewimble / Grin es fundamentalmente vulnerable. Después de gastar solo $ 60 por semana en AWS, vinculé de manera única a los remitentes y destinatarios para el 96% de las transacciones de Grin en tiempo real.
La vulnerabilidad está en el corazón del protocolo Mimblewimble, y no creo que se pueda solucionar. Por lo tanto, en términos de protección de la privacidad, Mimblewimble ya no puede considerarse una alternativa viable a Zcash o Monero.
En los últimos dos años, Mimblewimble se ha vuelto popular como un protocolo compacto para criptomonedas privadas ("monedas de privacidad"). Mimblewimble fue acuñado en 2016 por un hacker bajo el seudónimo de Tom Elvis Jedusor. Envió la
descripción del
protocolo al chat IRC y desapareció. Desde entonces, las implementaciones más famosas de Mimblewimble son la criptomoneda cripto privada
Grin creada por desarrolladores anónimos, así como los proyectos
Tari y
BEAM que han atraído inversiones de riesgo. Incluso Litecoin está considerando la
integración de Mimblewimble .

Varios investigadores ya han
planteado la
hipótesis de las debilidades potenciales del mecanismo de privacidad en Mimblewimble. La contribución de mi trabajo es que demuestro un método de ataque específico, pruebo su viabilidad en criptomonedas reales y mido su efectividad. Al ejecutar el experimento Grin, pude desanonizar con éxito el 96% de las transacciones que revisé. Así que ahora es obvio que
no puede confiar en Mimblewimble si necesita una gran privacidad.En
mi github encontrarás una descripción detallada del ataque, fuentes para jugarlo, datos recopilados y preguntas técnicas frecuentes. Más adelante en este artículo hay una explicación general e intuitiva de la conectividad, cómo funciona el ataque y qué significa esto para las tecnologías de privacidad.
¿Qué es la conectividad?
Es importante comprender lo que significa este ataque y lo que no significa.
Este ataque no nos permite determinar la cantidad que reciben las personas. Mimblewimble oculta con éxito la cantidad de transferencias mediante criptografía basada en curvas elípticas de vainilla (
esquema de obligaciones de Pedersen ). Lo que este ataque nos permite hacer es determinar
quién le pagó a quién . En otras palabras, nos permite conectar transacciones entre sí y determinar la dirección de las transferencias.
¿Por qué es esto importante?
Digamos que Coinbase sabe que una dirección específica pertenece a un venezolano llamado Daniel. Usted, un usuario estadounidense, está tratando de retirar monedas con Coinbase. Pero después de expandir el gráfico de transacciones, Coinbase determina que recibió dinero de Daniel, a pesar de que no saben cuánto. Debido a las
restricciones impuestas a Venezuela por la Autoridad de Control de Activos Extranjeros de EE. UU., Coinbase cierra su cuenta. (Por supuesto, los intercambios sabrán mucho sobre el gráfico de transacciones, porque tienen datos de usuario de KYC que se muestran en fiat).
O imagine que algún gobierno autoritario sabe que cierta dirección pertenece a un disidente político. Envías a este disidente una pequeña dona. Más tarde, cuando envía su transferencia de Mimblewimble a un intercambio local, ese intercambio transfiere los datos de sus transacciones al gobierno. Como el gobierno ve el gráfico completo de la transacción, ahora sabe que usted apoyó al disidente político.
Tales ataques no serían posibles en Zcash. Debido a que las transacciones en Zcash no están conectadas o, en otras palabras, cada transacción de Zcash tiene un gran
conjunto de anonimato . Un conjunto de anonimato es un conjunto de transacciones del que no se puede distinguir su transacción. Imagine esto como una mezcla con la multitud: cuanto mayor sea el conjunto de anonimato, más "multitud" se mezcla su transacción.

En Zcash, el conjunto de anonimato de cada transacción incluye todas las monedas protegidas. Este es el máximo anonimato posible desde el punto de vista de la información teórica.

En Monero, el conjunto de anonimato para cada transacción es el conjunto de todas las transacciones de cebo habilitadas por el usuario. Aunque el cliente Monero le permite establecer el número de señuelos en un conjunto, el valor predeterminado actual es 11. (Monero tiene sus propias dificultades para
elegir señuelos de forma segura , pero creo que en su mayor parte funciona,
más o menos ).
Inicialmente, se suponía que el conjunto de anonimato de Mimblewimble consiste en todas las transacciones en el mismo bloque, es decir, se ve así:

Pero en realidad se ve así:

Esto reduce el anonimato de Mimblewimble establecido en una sola dirección.
¡Quiero decir que esto no es una crítica de Grin en general! Realmente respeto a la comunidad de Grin y a los desarrolladores principales, que siempre han respondido mis preguntas en los foros.
Grin aún ofrece una mayor privacidad que Bitcoin y otras monedas privadas, ya que cifra cantidades de forma segura. Pero el modelo de privacidad de Mimblewimble es estrictamente más débil que el de Zcash o Monero. Y esto lo hace insuficiente para muchos casos de uso del mundo real donde se necesita privacidad.
Descripción general del ataque
¿Cómo exactamente puedes desanonimizar un gráfico de transacción en Mimblewimble?
Observé que, a pesar del cifrado de las cantidades de transferencia, Mimblewimble deja un gráfico de transacciones rastreable. Pero los desarrolladores del protocolo sabían sobre esto, y por lo tanto, Mimblewimble usa dos formas principales para combatir la conectividad: a
través de la agregación de todo el bloque y el
"diente de león" (Dandelion) .
La idea de la agregación de extremo a extremo es que cuando las transacciones se recopilan en un bloque, se agregan en una "supertransacción". Esta "súper
transacción " parece una
CoinJoin gigante: todas las entradas y salidas se mezclan, y no hay una manera fácil de determinar quién le pagó a quién. Hay solo un montón de entradas y un montón de salidas, y cantidades específicas están ocultas.

¿Suena confiable? Solo hay un problema: este CoinJoin se crea una transacción a la vez. Dado que las transacciones se crean y envían constantemente desde diferentes lugares, si mantiene un nodo sniffer que recopila todas las transacciones antes de que se complete la agregación de extremo a extremo, es muy fácil desenredar CoinJoin. Cualquier nodo sniffer puede simplemente monitorear la red y recordar las transacciones originales antes de que se agreguen. Esto es bastante fácil si simplemente archiva todos los mensajes que ve en una red P2P.

Aquí puede sorprenderse, ¿y eso es todo?
De hecho, existe otra capa de protección creada por el equipo de Grin:
el protocolo Dandelion ("diente de león") . Dandelion es un método de red
desarrollado por investigadores de la Universidad Carnegie Mellon, que debería ocultar la IP del creador de la transacción.

Por lo general, en las criptomonedas como bitcoin, el creador de la transacción simplemente envía la transacción a todos sus pares y pasa rápidamente a través de la red P2P. Pero en el protocolo Dandelion, la distribución de cada transacción comienza con el juego secreto de un teléfono roto. El creador transfiere su transacción a una sola fiesta, que, a su vez, la pasa a otra fiesta, y así sucesivamente a lo largo de la cadena ("tronco" de diente de león). Después de un número aleatorio de tales movimientos, la última fiesta envía la transacción exactamente como en bitcoin ("flor" de diente de león). Pero esta fiesta está tan lejos del creador de la transacción que ningún observador puede saber quién inició la cadena.
Esto funciona muy bien para ocultar la IP de la persona que está cometiendo la transacción. Pero Dandelion en Grin tiene una segunda función: en casos raros, le permite mantener el anonimato de la transacción incluso si hay un nodo sniffer en la red. Como cada transacción comienza en la fase de "raíz" del diente de león, cuando dos transacciones se cruzan en la fase de propagación de "raíz", se agregarán antes. Si esto sucede, cuando la transacción se envíe y sea visible para todos, el nodo sniffer no podrá pegar las transacciones: ya están pegadas en CoinJoin.
Este mecanismo de envío de transacciones es la defensa principal de Grin contra la conectividad transaccional de los nodos sniffer. Pero hay una manera fácil de romperla.
Por defecto, cada nodo Grin está conectado a otros 8 nodos pares. Pero al aumentar el número de pares, puedo conectar mi nodo sniffer a cada nodo de red. Si mi sitio ha estado en línea continuamente durante mucho tiempo, al final, casi todos los nodos de la red se conectarán a mí, lo que me convierte en un
súper hub .
Cuando me convierto en un súper nudo, hay una alta probabilidad de estar en la cadena de "diente de león" de cada transacción. Por lo tanto, la única razón por la que no podría atrapar una transacción antes de su agregación es si las dos transacciones se
cruzaron en la fase del tallo del diente de león antes de ver al menos una de ellas . Si veo al menos uno de ellos antes de que se agreguen, puedo separarlos con una simple resta de los conjuntos.

En mi ataque, pude conectar el 96% de todas las transacciones, conectando solo a 200 pares del total de 3000 pares en la red Grin. Pero si estuviera dispuesto a gastar un poco más de dinero, podría conectarme fácilmente a 3.000 nodos para mantener casi todas las transacciones. Y para esto no es necesario mantener un gran superusuario: el mismo ataque funcionará si ejecuta 3.000 nodos separados con IP únicas, cada una de las cuales estará conectada a un solo par. Siempre que intercepte todos los datos transaccionales y los descargue en la base de datos maestra central, el ataque funcionará exactamente de la misma manera.
Entonces, ¿es posible salvar a Mimblewimble?
Poco claro En mi opinión, en la versión actual de Grin, no hay forma de proteger el gráfico de transacciones. Simplemente alargar el "diente de león" no es suficiente: será fácil derrotarlo con una gran cantidad de nodos, como describo en el
informe técnico .
Pero a pesar de la conectividad transaccional, Mimblewimble todavía tiene propiedades que diferencian el protocolo de otras criptomonedas. Es posible la agregación de extremo a extremo, que es una forma efectiva de reducir el tamaño de la cadena de bloques, y oculta efectivamente los montos de las transacciones. Si desea una gran privacidad, siempre puede combinar Mimblewimble con otro protocolo que oculte el gráfico de transacciones, por ejemplo, como en
Ethereum 9¾ (que combina Mimblewimble con un esquema de reinicio cero al estilo Zerocash).
Pero es obvio que Mimblewimble en sí no es lo suficientemente fuerte como para proporcionar una gran privacidad.
Bitcoin tiene ahora 11 años, pero las criptomonedas aún se encuentran en una etapa muy temprana de desarrollo. No hace mucho tiempo, se descubrieron serias vulnerabilidades tanto en
Zcash como en
Monero . Y esto es de esperar: la mayoría de las tecnologías interesantes aún están en la fase de investigación.
Pero así es como la ciencia siempre se desarrolla: constantemente presentamos nuevas hipótesis y las refutamos hasta que solo quedan las que han pasado la prueba del tiempo.
Gracias a Hasib Kireshi por la ayuda sustancial para compilar este informe e ilustrar los conjuntos de anonimato. Un agradecimiento adicional a Oleg Ostroumov, Elena Nadolinsky, Mohamed Fouda, Lucas Ryan y Nader Al-Naji por revisar los borradores de esta publicación. Y muchas gracias a Jake Stutzman (Protocolo NEAR) por las ilustraciones de diente de león y la agregación de bloques. Gracias Daria Smirnova por traducir el artículo.
Si le gustó el artículo, le recomiendo suscribirse a mi Twitter , donde van primero (en inglés).
Divulgación: Dragonfly Capital acuerda no negociar los activos enumerados en este informe durante 3 días a partir de la fecha de publicación.