Estado actual de la privacidad en Bitcoin
Un “coinjoin” significa una «unión de monedas». En un coinjoin, lo usuarios introducen sus monedas (UTXOs) como entradas para realizar una transacción colaborativa. Su origen se remonta a más de una década, y se concebió con el objetivo de romper con la heurística de la propiedad común de entradas, la cual supone que en una transacción de Bitcoin todas las entradas pertenecen al mismo propietario. El aporte de privacidad es un mero subproducto derivado del objetivo principal.
Las transacciones de Bitcoin son trazables. Aunque pueda parecer complicado, asociar transacciones que parecen no estar relacionadas entre sí es relativamente sencillo si se usan los métodos adecuados y si se tiene especial atención a las huellas y metadatos que dejan las wallets .
Hoy en día, muchas empresas de análisis de cadena intentan desanonimizar a los usuarios siguiendo heurísticas. Estas suposiciones y estadísticas muchas veces son erróneas, pero en otras ocasiones son claras incluso para un simple observador. Vamos a ver el porqué analizando brevemente dos de las heurísticas más comunes:
La primera es la heurística de detección del cambio. La mayoría de transacciones en la blockchain son de 1 entrada y 2 salidas, siendo fácil analizar cuál es la salida de pago y cuál es la de cambio. Este caso es especialmente fácil de analizar cuando el usuario hace un envío de una cantidad redonda –por ejemplo 0.01–, envía a otro tipo de dirección, o cuando cae en heurísticas que se escapan a su control, como la versión de la transacción y el nlocktime.
La segunda, otra de las heurísticas estrella, es la de propiedad de entradas. Esta asume que en una transacción multi-entrada todas las entradas pertenecen a un solo usuario. Sobre ello ya hablaba Satoshi en el whitepaper. Así que si tienes diferentes Utxos en tu wallet y ahora decides unirlos en una transacción, cualquier observador de cualquiera de las monedas podrá determinar que tú eres el propietario de todas esas entradas, y podrá ver qué haces con ese Utxo resultante tras la unión. La mayoría de usuarios transacciona de esta manera todo el tiempo, sin saber que están haciendo visibles gran parte de los fondos que atesoran.
Para evitar esto, existen herramientas específicas para tratar con heurísticas específicas:
1. Coinjoin y payjoin/stowaway para la heurística de la propiedad de entradas de una transacción. La combate introduciendo varias entradas de varios usuarios en una misma transacción.
2. Stonewall y StonewallX2 para las heurística del cambio relacionada con los montos. El resultado es una transacción de varias salidas, donde un par de salidas son de la misma denominación o cantidad.
Así es como funciona un coinjoin. Busca impedir la vigilancia para permitir a los usuarios transaccionar bitcoin con privacidad.
A nadie le gustaría que cualquier persona pudiera hacer un escrutinio de sus fondos. Muchos desconocen esta problemática, pero la mayoría está filtrando más información de la que cree. Lo vemos a muy a menudo en las formaciones que impartimos. Los alumnos quedan petrificados al saber cómo se pueden analizar las transacciones en la blockchain. Es en ese momento cuando se dan cuenta de la necesidad real de usar Bitcoin con privacidad.
La mayoría de usuarios no ve, a priori, la necesidad de esa privacidad. Es porque no conocen cómo realmente de transparentes y trazables son las transacciones. Cuando se dan cuenta, su mente cambia, no hay marcha atrás. Es un antes y un después.
De un tiempo para acá se han empezado a demonizar a los coinjoins. La narrativa es que son para “delincuentes y criminales”. Algunos exchanges penalizan a sus usuarios cuando reciben monedas procedentes de un coinjoin. Los penalizan incluso si un usuario gasta fondos procedentes de un exchange a posteriori, si no les gusta la forma en la que los gastó.
Ha llegado hasta tal punto que desarrolladores como el de Tornado Cash y los de Samourai wallet han sido detenidos por desarrollar este tipo de implementaciones de software.
A día de hoy, tanto Whirlpool como Wasabi han salido del mercado por esta problemática, quedando solo Joinmarket en la ecuación.
En los últimos días se está viendo movimiento por parte de desarrolladores para implementar coinjoins con coordinador descentralizado, sin coordinador, o incluso coinjoins manuales. Es maravilloso que haya un movimiento reactivo por las duras noticias de los últimos días, pero como se suele decir, el camino al infierno está empedrado de buenas intenciones.
Los protocolos de coinjoin desarrollados hasta hoy son el resultado de pruebas y errores, de años de investigación por parte de matemáticos y desarrolladores de aplicaciones. Solo hay que ver las propuestas de Greg Maxwell, los estudios sobre coinjoins sudokus de Kristov Atlas, o el desarrollo de todo un modelo matemático basado en la entropía y análisis de Boltzmann hecho por Laurent.
En fin, lo que pueda parecer nuevo ahora ya fue inventado, desarrollado y mejorado. Es importante apuntar que estos nuevos procedimientos que salen a la luz a causa de los recientes acontecimientos pueden estar dejando fuera puntos importantes sobre cómo debería ser un coinjoin para obtener una privacidad adecuada.
Whirlpool, que no era perfecto –ningún sistema es una bala de plata en Bitcoin–, tenía una buena funcionalidad y experiencia de usuario, y sentó altos estándares de cómo debería ser un coinjoin.
¿Qué puntos importantes debemos considerar para definir un buen coinjoin?
1. Todas las salidas (UTXOs) de una transacción coinjoin deben ser de la misma denominación/cantidad.
De esta manera no se podrá saber qué entrada fue a qué salida. Se rompe la trazabilidad y los Utxos obtenidos tras el coinjoin tendrán un historial nuevo sin un enlace con el pasado.
2. No deberían haber cambios en las salidas de un coinjoin.
En Joinmarket conviven tanto salidas mezcladas como salidas no mezcladas (Utxos tóxicos). Esto crea enlaces deterministas pudiendo asociar ese cambio tóxico con las entradas.
3. Necesidad de liquidez entrante para hacer nuevos coinjoins
Tanto Wasabi como Joinmarket no tienen este requerimiento. Por ello, existe una alta posibilidad de estar mezclando siempre con los mismos usuarios sin obtener un extra de privacidad. Lo ideal sería que para hacer un nuevo coinjoin se necesitase «sangre nueva» para seguir obteniendo privacidad.
4. Que el coordinador/implementación reproduzca siempre los mismos resultados (Mayor anon set)
Whirlpool se organizaba en pools de diferente denominación: 100K, 1M, 5M y 50M de sats.
Si se entraba por ejemplo en un pool de 1M, todos los paticipantes que pasaban por ese pool obtenían el mismo resultado. Más usuarios mezclando en ese pool, mayor set de anonimato.
5. Necesidad de remezcla.
Un ciclo de coinjoin por sí solo no es suficiente. Podrías relacionarte con usuarios para hacer un coinjoin y que éstos hicieran malas prácticas de privacidad en el gasto, pudiendo afectar a tu set de anonimato. Para ello es fundamental remezclar y obtener el mismo resultado cada vez, favorecido por la entrada de liquidez nueva.
6. Necesidad de herramientas de gasto.
Aunque el coinjoin es un paso importante para mantener privacidad en Bitcoin, la fase posterior de gasto es fundamental. Hay usuarios que consolidan todos los fondos tras un coinjoin perdiendo toda la privacidad obtenida.
Puede haber casos en que se necesita hacer alguna unión de monedas tras el coinjoin, para ello se crearon herramientas de gasto como stowaway (payjoin) y stonewall/stonewallx2.
En Wasabi y Joinmarket existe payjoin, pero es una herramienta muy poco usada.
7. Necesidad de cobrar una comisión de servicio o cualquier otra medida alternativa para evitar sybil attacks.
¿Por qué? ¿No sería mejor pagar solo la comisión de transacción para ahorrar costes?
Las comisiones por servicio son una buena manera de filtrar a espías. Si por hacer un coinjoin no hubiera coste, muchas entidades espías inundarían el sistema con fondos en diferentes wallets con el objetivo de poder desanonimizar a los usuarios. Esto se conoce como “sybil attacks”. Un buen coinjoin debería ser resistente a ello. Tanto Wasabi como Whirlpool se protegían con una fee por el servicio, y Joinmarket con un fianza de fondos bloqueada por un tiempo determinado.
8. Resiliencia ante ataques.
Tenemos como ejemplo a Whirlpool. Justo cuando daba sus primeros pasos hacia la descentralización de su coordinador, su despliegue se vio frustrado por la detención de sus dearrolladores y la captura de su servidor en Islandia.
Otro aspecto a tener en cuenta es la importancia de que los desarrolladores eviten ser figuras públicas para evitar ser perseguidos por las autoridades.
La privacidad en Bitcoin se ha visto dañada por los últimos acontecimientos, pero puede que sea un impulso para que usuarios y desarrolladores vean la gran importancia que ésta tiene en Bitcoin.
Creemos que la privacidad financiera es un requerimiento necesario para la dignidad humana. Queremos que lo mínimo que se le pide a una cuenta bancaria –que no se sepa cuanto saldo queda en ella después de hacer un pago o recibirlo–, también se le aplique a las operaciones en Bitcoin. Lamentablemente el protocolo no provee esa privacidad, y el usuario seguirá buscándola en la capa de aplicaciones.