Presentamos a Boltzmann

“Nada es más práctico que una buena teoría.” —Ludwig Boltzmann
Hoy, estoy encantado de compartir Boltzmann , una herramienta que (espero) sea útil para todos los desarrolladores que trabajan en carteras y servicios de Bitcoin. Debería ayudarlos a cuantificar mejor el grado de privacidad asociado a las transacciones creadas por su servicio (especialmente para aquellos que implementan funciones amigables con la privacidad como CoinJoin o BIP126 ).
¿Qué es Boltzmann?
Boltzmann es un script de Python que calcula un conjunto de métricas para una transacción de Bitcoin:
- Entropía de la transacción: una métrica que mide cuántas asignaciones posibles de entradas a salidas son posibles dados los valores.
- Probabilidad de enlace entre una entrada y una salida: la probabilidad que una entrada ha enviado algunos fondos a una salida.
- Matriz de vinculabilidad de la transacción: una matriz que almacena las probabilidades de enlace entre entradas y salidas de la transacción.
La idea de construir una herramienta como Boltzmann surge de una discusión con Greg Maxwell sobre el famoso hilo " CoinJoin:privacidad de Bitcoin para el mundo real " y de trabajos anteriores realizados por Kristov Atlas con CoinJoin Sudoku . ¡Felicitaciones a los dos!
Boltzmann se implementó a principios de 2015 y desde entonces ha sido un componente de la plataforma OXT.

Como parte de los trabajos realizados para Open Bitcoin Privacy Project, también utilicé Boltzmann en 2015 para obtener una estimación de la cantidad de transacciones similares a CoinJoin (spoiler: 2–3 % de todas las transacciones). Esta cifra fue posteriormente confirmada por Bitfury Group.
¿Por qué necesitamos estas cosas de entropía y vinculabilidad? Ya tenemos análisis de contaminación.
El análisis de corrupción generalmente hace un "trabajo bastante bueno" en la industria financiera.
La razón principal es que funciona bien siempre que se trate de flujos deterministas (por ejemplo, una transacción se puede interpretar con un 100 % de certeza como que la entidad A envía dinero a la entidad B).
Si bien esta condición era casi cierta para Bitcoin durante sus primeros años (al menos en la práctica), la situación comenzó acambiar con la introducción de funciones que mejoran la privacidad como CoinJoin.
CoinJoin (y sus sucesores) permite que varias entidades fusionensus transacciones en una sola y agrega un "pequeño truco" a lareceta: varias salidas tienen la misma cantidad.

Este simple "pequeño truco" rompe la suposición de que siempre existe un vínculo determinista entre las entradas y las salidas de una transacción y se vuelve imposible asignar las salidas a las entradas con un 100% de certeza.
La verdadera belleza de CoinJoin es que revela un aspecto disruptivo de Bitcoin:
Intrínsecamente, el vínculo entre el remitente y el receptor de unpago de Bitcoin no es determinista sino probabilístico. Esto estágrabado en los mecanismos internos del protocolo. No puede tenerBitcoin y sus UTXO sin esta naturaleza probabilística.
Esta es la razón por la cual el análisis de corrupción aplicado a Bitcoin se volverá cada vez más obsoleto a medida que vemos una creciente adopción de funciones que mejoran la privacidad.
Como funciona ?
Comprobemos eso con esta transacción CoinJoin

Boltzmann devuelve los siguientes resultados

La entropía medida (1.585 bits) es típica de las transacciones básicas de CoinJoin con 2 participantes y corresponde a 3 interpretaciones posibles:
● Esta es una transacción real de CoinJoin con 2participantes. La entrada 1 está vinculada a las salidas 1 y2, …
[(Entrada1) => (Salida1, Salida2), (Entrada2) => (Salida3,Salida4)]
● Esta es una transacción real de CoinJoin con 2participantes. La entrada 1 está vinculada a las salidas 2 y3, etc.
[(Entrada1) => (Salida3, Salida2), (Entrada2) => (Salida1,Salida4)]
● Esta es una transacción CoinJoin "falsa" enviada por una sola entidad (humorística)... Todas las entradas están vinculadas a todas las salidas.
[(Entrada1, Entrada2) => (Salida1, Salida2, Salida3, Salida4)]
Ahora, si observa estas 3 interpretaciones, notará que Input1 siempre está asociado a Output2 (el mismo fenómeno con Input2 yOutput4). Boltzmann también detecta este punto y devuelve una probabilidad de enlace igual a 1 para estas entradas y salidas (es decir, un enlace determinista).
Significa que todos los enlaces no están ofuscados por esta transacción CoinJoin. En realidad, es una característica compartida por muchas implementaciones de CoinJoin: la salida de cambio permanece vinculada de forma determinista a las entradas.
Cómo usarlo ?
Fácil. Ve al repositorio de github . Todo se explica en el archivo «README.md».
Para obtener información adicional sobre las métricas, consulte estos elementos esenciales:
- Transacciones y privacidad de Bitcoin (parte 1)
- Transacciones y privacidad de Bitcoin (parte 2)
- Transacciones y privacidad de Bitcoin (parte 3)
Que sigue ?
Si usted es el desarrollador de una billetera bitcoin, lo animo a implementar BIP47 , BIP69 , BIP126 y otras características que mejoran la privacidad de sus usuarios. Y no olvides comprobar los resultados con Boltzmann u OXT.
Si es un desarrollador o un estudiante de informática interesado en estas métricas, lo animo a crear una mejor versión de este algoritmo. Estoy acostumbrado a llamar a Boltzmann "la peor implementación del mundo" porque implementa un método de fuerza bruta muy estúpido que limita sus capacidades y sé que hay espacio para mejoras (optimización, memorización de resultados intermedios, paralelización, reescritura en un más rápido lenguaje, forma generalizada de las métricas, etc.).
Si es un usuario de bitcoin, lo animo a presionar a los desarrolladores de su billetera favorita para que implementen funciones que mejoren la privacidad.
Por último, no olvides unirte al Open Bitcoin Privacy Project .
Mis 2 satoshis.