Preliminares

Para comprender CoinJoin, sería útil comprender las UTXO (salidas de transacciones no gastadas) y las transacciones de Bitcoin. Puede omitir esta sección si sabe lo suficiente sobre estos, pero puede ser valioso leerla de todos modos.

Transacciones de Bitcoin

En términos simples, una transacción de Bitcoin se compone de entradas y salidas (que contienen cantidades de bitcoins) y una firma o firmas digitales realizadas con una clave privada.

Una buena analogía es un cheque bancario, que contiene

De qué cuenta proviene el dinero Quién recibe pagadoLa cantidad y una firma

Aquí hay una transacción aleatoria de Bitcoin que copié de la cadena de bloques de Bitcoin utilizando el nodo de Bitcoin disponible públicamente https://mempool.space/ (¡Lo siento si esta transacción es suya!):

En la columna de la izquierda, se ingresaron cinco cantidades de bitcoins como entradas y se gastaron en dos salidas diferentes a la derecha (El total de las cantidades de la izquierda casi es igual a las cantidades de la derecha; la pequeña diferencia La diferencia es recolectada por el minero del bloque).

En la parte inferior izquierda, la tarifa de minería se calcula: 81,200 sats o 100 sats por byte (de interés, esta fue una tarifa escandalosamente alta e innecesaria para ofrecer dado que la lista de espera no era particularmente larga en ese momento).

Los detalles de la firma no se muestran, pero cada nodo verifica que las firmas sean válidas.

UTXO

“UTXO”es un nombre horrible, horrible. Si bien describe con precisión lo que es, y es comprensible para un Bitcoiner experimentado, es una tontería para alguien nuevo. Sería mejor si se llamara”Moneda recibida”o algo similar. Con solo señalar esto, es posible que ya comprenda lo que es.

Aunque los bitcoins son divisibles, piense en las cantidades de bitcoins no como un líquido divisible, sino en cantidades discretas, como monedas en un bolso. Me gusta usar al competidor de Bitcoin, el oro, como ejemplo:

Imagina que recibes una moneda de oro que pesa 1.2 onzas. Y ahora quieres pagarle 0,2 onzas a alguien. Tendría que derretir la moneda de 1.2 onzas y hacer dos monedas, una con un peso de 0.2 onzas para el pago y el resto como una moneda de 1.0 onza para que la conserve.

Bitcoin es similar. Cuando recibe 1.2 bitcoins en su billetera, tiene una “moneda recibida” discreta de 1.2 bitcoins o UTXO. Si quisiera gastar 0,2 de eso, no puede romper una parte y gastar solo eso; primero tienes que “derretir” la cantidad total de 1.2 bitcoins colocándola en una transacción. Con la transacción, puede dividirla como desee y enviarla a tantas direcciones diferentes como desee, incluso a una de sus propias direcciones.

Aquí es donde el concepto de”cambio”entra. Para gastar 0.2 bitcoins, usted toma el 1.2 bitcoin como entrada a la transacción y hace dos salidas; uno como pago (0.2 bitcoin) y otro (1.0 bitcoin) como cambio a usted (a una de sus propias direcciones). Se vería así:

Alice’s 1.2 bitcoin que se encuentra en una de las direcciones de sus billeteras se ha dividido en dos. La dirección de la billetera del distribuidor de Lambo ha recibido 0.2 bitcoins, y una dirección diferente en la billetera de Alice recibe 1.0 bitcoins.

Un último ejemplo: imagine que tiene los siguientes UTXO en su billetera y necesita pagar 0.6 bitcoins para alguien:

0.2 bitcoin0.5 bitcoin0.002 bitcoin

Su transacción tomaría los UTXO de 0.2 y 0.5 bitcoin y los pondría en una transacción (y dejaría el UTXO de 0.002 bitcoin solo). La transacción tendría dos salidas: 0,6 bitcoins como pago y 0,1 bitcoins como cambio. Después de la transacción, su billetera tendrá 0.002 bitcoin UTXO y 0.1 bitcoin UTXO. Dos”monedas”en total, con un saldo total de 0.102 bitcoins (ignorando las tarifas de minería para que sea más simple).

¿Qué es un CoinJoin?

Mucha gente no se da cuenta de que un Una sola transacción puede contener firmas digitales de más de una persona. Sin esta capacidad, CoinJoins no es posible.

Un CoinJoin es cuando dos o más personas combinan sus transacciones en una transacción, de tal manera que no está claro quién posee qué moneda después de la transacción. La ambigüedad se crea al hacer coincidir el tamaño de las entradas o las salidas, como se verá en el ejemplo a continuación.

Es posible que un extraño rastree las monedas a medida que se gastan, a una persona individual ( si se conoce o no la verdadera identidad de esa persona). Por ejemplo, una moneda se puede mover de la dirección A, a la dirección B, a la dirección C, y puede ser posible determinar que las monedas en la dirección C pertenecen a quien posea la Dirección A. Esta es la propiedad seudónima de Bitcoin. Sin embargo, debido a que los clientes de los intercambios se ven obligados a presentar documentos de identificación (leyes Conozca a su cliente, o”KYC”), debido a que las monedas retiradas del intercambio y enviadas a la dirección A tienen una identidad real asociada a ciertas empresas de vigilancia, por lo tanto conocer la identidad de quién es el propietario de la dirección C en el ejemplo anterior. Es importante apreciar que no hay identificación en la cadena de bloques; la verdadera información de identidad es externa a Bitcoin. Solo las personas con acceso a los datos KYC del intercambio pueden identificar correctamente quién posee una moneda. ¿Quienes son? Serían el intercambio, las empresas de vigilancia a las que se venden los datos, los gobiernos o los piratas informáticos.

CoinJoining rompe el enlace de identificación seudónimo de la dirección A a B a C, como mostraré. Como mencioné, esto se logra utilizando valores idénticos de UTXO. Por ejemplo, aquí hay un CoinJoin:

A la izquierda, hay dos entradas para esta transacción que pertenecen a dos personas diferentes, Alice y Bob. Solo las personas con acceso a los datos de KYC saben que son los de Alice y Bob. Para todos los demás, es la Persona A y la Persona B.

Se han creado dos UTXO de 1.0 bitcoin y no está claro cuál pertenece a Alice (Persona A) y cuál pertenece a Bob (Persona B). Cada uno tiene un 50% de posibilidades de pertenecer a Alice y un 50% de Bob. El propietario de las cantidades de 0.2 y 0.5 bitcoins se puede deducir con bastante facilidad con lógica matemática.

Centrándose en Alice, ha recibido 1.0 bitcoins en una de las direcciones de sus billeteras. No es completamente privado; para un observador externo, ese 1.0 bitcoin tiene un 50% de posibilidades de pertenecer a ella. Para aumentar su privacidad, esas monedas se pueden volver a mezclar, pero ella debe mezclarlas con otra persona, no con Bob.

¿Qué puede hacer CoinJoin por usted?

Ocultar su bitcoin a la ¿Gobierno? CoinJoining no oculta al gobierno el tamaño de su pila de bitcoins KYC (Conozca a su cliente). Si tiene monedas KYC, eso significa que envió su identificación a un intercambio y compró bitcoins con esa cuenta. Debe asumir que el intercambio divulgará todas sus transacciones y retiros al gobierno si así lo solicita.

Entonces, si compró 1 bitcoin y lo retiró a su propia billetera y luego se unió a CoinJoined, puede ser imposible para el gobierno para saber en qué dirección (s) se encuentra su bitcoin, pero aún saben que posee 1 bitcoin. Si lo vendió, presumiblemente es la ley informar la venta. Si alguna vez aprueban leyes para confiscar bitcoins o gravar las ganancias no realizadas, pueden saber exactamente cuánto tienes.

Accidente de navegación

Si afirmas no poseer bitcoins porque lo perdiste todo en un accidente de navegación, las monedas que se sabe que son suyas antes de su accidente tendrán que quedarse allí y nunca moverse. Una vez que gaste, su trágico accidente de navegación se revelará como un fraude. Para ser más completo, diré que haber mezclado sus monedas antes del accidente ayuda, pero no es algo que estoy defendiendo. Es una estrategia peligrosa.

Privacidad de gasto

Sin embargo, lo que puede hacer es que cuando gasta bitcoins, el destinatario no tendrá un registro de dónde vino ese pago. Lo explicaré. Suponga que tiene 10 bitcoins en una dirección y lo usa para pagarle a alguien 0.001 bitcoins. El destinatario puede buscar la cadena de bloques y notar que proviene de una dirección que contiene 10 bitcoins. Sin embargo, si mezcló sus monedas, el pago vendrá de una dirección que contenga una cantidad mucho menor, y el historial de esa cantidad menor tampoco se puede conocer. Esto significa que todas sus otras monedas no serán reveladas, lo que equivale a privacidad.

¿Debería hacerlo?

Entonces, si comprende que puede’Para ocultar su total de bitcoins al gobierno, y no planea tener un accidente de navegación, y todo lo que quiere es gastar en privacidad, ¿debería CoinJoin?

Piense en esta pregunta mientras lee y , sepa que gastar usando Lightning Network será lo suficientemente privado para casi todos.

Dicho esto, si todos CoinJoining, o si CoinJoining fuera una implementación predeterminada en billeteras, la privacidad se mejora para todos, incluso si no lo intentan.

¿Está mal? ¿Es ilegal? ¿Cuáles son los riesgos?

Algunas personas preocupado de que algún día, los bitcoins mixtos se etiquetarán como”contaminados”y, por lo tanto, no se aceptarán en los intercambios. Eso podría ser cierto, pero también es un problema fácil de circunnavegar. Simplemente puede usar las monedas para abrir canales Lightning, y cualquiera que reciba transacciones Lightning no tiene forma de saber que el canal se abrió con monedas mixtas.

Además, puede mezclar una parte de sus monedas en lugar de todas de ellos, para cubrir sus apuestas.

¿Cómo CoinJoin? Opción 1-Servicios automatizados

Hay servicios disponibles en los que envía sus monedas a un grupo para mezclarlas. Por ejemplo, Samourai’s Whirlpool, Wasabi o JoinMarket. Cada uno tiene ventajas y desventajas.

Whirlpool y Wasabi

Tanto Samourai como Wasabi cobran una tarifa variable por ofrecer un servicio de mezcla automatizado. Dejas tu software en ejecución y el programa de coordinación central mezclará tus monedas con las de otros clientes de pago. El precio varía según la configuración de mezcla, pero cuesta aproximadamente el 0,2% de la cantidad que desea mezclar, incluida la tarifa de servicio y las tarifas de minería.

JoinMarket

JoinMarket es diferente. Todavía existe un servicio automatizado, sin embargo, las monedas de los usuarios ingresan a mezclas basadas en un mercado libre. Los usuarios pueden ofrecer sus monedas para mezclarlas (“creadores de mercado”) con otras y pueden ganar una tarifa. O los usuarios pueden pagar a estos fabricantes para que mezclen sus monedas con ellos (“receptores”).

Como fabricante, debe dejar sus monedas en una billetera activa en una computadora y esperar a que la gente acepte su oferta, compitiendo con otros fabricantes en precio y tamaño; no es seguro que sus monedas se mezclen, o cuándo. También existe el riesgo de guardar sus monedas en una billetera caliente en lugar de almacenarlas en frío. Usted es recompensado por este riesgo al recibir el pago de la tarifa que estableció (en bitcoins) si sus monedas se mezclan.

Como”tomador”, aunque paga una tarifa, su moneda entra en una combinación esencialmente de inmediato. El tiempo que lleva hacer una mezcla depende de cuándo un minero encuentre el siguiente bloque de Bitcoin. En general, el uso de JoinMarket parece interesante y divertido, sin embargo, es un desafío técnico lograrlo con éxito. No está listo para el mercado general. Aquellos con algo de experiencia en la línea de comandos de Linux al menos podrían abordar esto.

Como generalmente no recomiendo servicios de mezcla automatizados debido a la falta de control sobre los parámetros externos, no he hecho una guía. Sin embargo, una pequeña búsqueda en Internet debería ser fructífera.

¿Cómo CoinJoin? Opción 2-DIY CoinJoin

Generar sus propias transacciones CoinJoin tiene la ventaja de un control total y ahorra costos; sin embargo, requiere que coordine transacciones con otras personas, lo que potencialmente limita el volumen de CoinJoins que puede realizar. También requiere cierto conocimiento sobre la generación de transacciones CoinJoin y el control total de las transacciones en general.

Además, es útil tener una buena comprensión de la privacidad de las transacciones; de lo contrario, podría cometer un error inadvertidamente y deshacer todo su esfuerzo.

La mayor ventaja que encuentro es explorar las fascinantes posibilidades. Explicaré cómo hacer esto, pero un requisito previo es saber cómo usar Electrum Desktop Wallet. Puede obtener información aquí.

Paso 1: Ejecutar un nodo

Es importante ejecutar su propio nodo. Si no lo hace, las monedas que mezcla y envía a su billetera ya no son privadas. Esto es cierto tanto si utiliza un servicio de mezcla automatizado como si no. ¿Por qué? Porque sin un nodo, su billetera proporciona sus direcciones y dirección IP a un nodo aleatorio que podría ser una empresa de vigilancia.

Hay muchas buenas razones para ejecutar un nodo (aquí explico seis razones). Recomiendo ejecutar el paquete MyNode para principiantes ( ver mi guía MyNode ). Alternativamente, si tiene algo de experiencia, RaspiBlitz de código abierto es excelente ( my RaspiBlitz Gguide ).

Paso 2: Cree una billetera privada

Es posible que ya tenga una billetera, pero como mencioné, si alguna vez se ha conectado a un nodo público, las direcciones en esa billetera no son privadas (incluso las vacías sin usar), por lo que enviar monedas privadas allí daña la privacidad.

Si crea una nueva clave privada usando una billetera de hardware, asegúrese de que nunca se conecte a la billetera de hardware software/nodo. Para el libro mayor de uso común, esto es casi imposible. Debe crear una semilla ANTES de conectarse a Ledger Live. Una vez que se conecta, Ledger Live registra potencialmente todas sus direcciones y su dirección IP. Pero no se preocupe, una vez que haga eso, puede crear una nueva billetera usando la misma semilla: simplemente agregue una frase de contraseña y esa billetera en particular será privada. La billetera sin la frase de contraseña puede descartarse o no usarse nunca. (Proporciono muchos más detalles sobre el uso correcto de la billetera de hardware aquí).

Para la billetera de hardware de Coldcard, esto no es un problema, ya que nunca requiere que te conectes a su software.

Si quieres ser un purista, crea tu propia semilla usando dados o lanzando monedas y calcula la semilla utilizando una computadora con espacio de aire . Es muy divertido y puedes aprender mucho sobre la seguridad de Bitcoin.

Paso 3: Encuentra a alguien que quiera unirse a ti

Esto puede ser complicado. Contáctame, siempre estoy listo para un CoinJoin. A medida que su círculo de amigos de Bitcoin se amplíe y sus habilidades mejoren (y las de ellos), se presentarán más oportunidades.

Paso 4: Construya un plan CoinJoin

Decida:

Qué UTXO usará A qué dirección irá El tamaño de la moneda mixta Habrá algún cambio A dónde irá el cambio Qué tarifa minera pagar

Por ejemplo, tomaré un UTXO de 0.01724084 bitcoin, y gastarlo como dos monedas; uno como una moneda mixta de 0.01 bitcoin, y el otro como el cambio de 0.00724084 bitcoin (el cambio en realidad será un poco menor para pagar la tarifa de minería también).

Entonces tendré que planificar para que mi socio de CoinJoin gaste un UTXO y cree una salida mixta idéntica de 0.01 bitcoins. No hay nada especial en esta salida por sí sola. La única razón por la que se mezcla es porque es idéntico en tamaño a mi salida de bitcoin 0.01.

Mi transacción:

Transacción del socio:

Transacción combinada:

Paso 5: Genere su transacción y guárdela

En Electrum, seleccione el UTXO que desea mezclar. Encuéntrelo en la pestaña de direcciones o monedas, haga clic con el botón derecho y elija :

Luego diríjase a la pestaña y pegue la dirección a la que desea enviar la moneda mixta a:

Haga clic en y luego en

Elija su tarifa de minería, luego haga clic en .

Ignore la advertencia de tasa alta: Electrum se está confundiendo porque la transferencia es interna. Cree que el pago es mínimo debido a un descuido de codificación por parte del desarrollador.

El botón cambia a ; haga clic en él y guarde la transacción en un archivo. Si está utilizando una billetera de hardware, normalmente deberá seleccionar una opción específicamente para las billeteras de hardware:

Observe que en la imagen de arriba dice”incluir xpubs”. Dado que vamos a compartir esta transacción sin firmar con otra persona en la que no necesariamente confiamos completamente, no queremos brindar esa información. Un xpub no les permite robar monedas, pero les permitiría ver su billetera completa. Hay una forma de evitar esto, pero necesito llevarte a través de un desvío para demostrarlo.

Desvío

El propósito de este desvío de”Cómo hacer CoinJoins”es explicar cómo omitir el requisito de incluir xpubs en la transacción guardada. O bien firmará transacciones de CoinJoin con una billetera de hardware o con una billetera de software en una computadora de escritorio que contenga su clave privada.

Billetera de hardware de Coldcard

La tarjeta fría verifica por defecto que las direcciones desde las que se gastan las monedas pertenecen a la clave privada que contiene. Pero recuerde, una transacción CoinJoin también contiene entradas UTXO de las billeteras de otras personas.

La forma en que verifica es requiriendo que los xpubs sean parte de la transacción que le importa, y luego puede reconocer si el Las direcciones contenidas en la transacción se pertenecen a sí misma o no.

Necesitamos cambiar este comportamiento predeterminado para hacer CoinJoins.

Después de iniciar sesión, vaya al menú , luego , luego <¿confiar en PSBT?>. Seleccione”Aceptar”después de leer el mensaje y seleccione . Ahora puede firmar transacciones CoinJoined incluso si no se suministraron los xpubs para los socios de CoinJoin, al igual que una billetera de software normal.

Otras billeteras de hardware

I Probé la billetera de hardware BitBox02 y no pude ver una opción similar para”confiar en PSBT”. También probé un CoinJoin y se negó a firmar debido a una entrada no reconocida, es decir, notó que la dirección de entrada del socio de CoinJoin no le pertenecía. Por lo tanto, no veo una forma de usar BitBox02 para CoinJoining.

Todavía no he probado otras carteras de hardware; es posible que desee hacerlo usted mismo.

Software Wallet Hop

Una alternativa es crear una billetera de software temporal, y cualquier UTXO destinado a CoinJoin puede primero enviarse desde la billetera de hardware a la billetera de software. Luego, usa la billetera de software para construir CoinJoin. De esta manera, minimiza la cantidad de bitcoins fuera del almacenamiento en frío, pero agrega un costo de transacción adicional.

Billetera de software con espacio aéreo

Mi La forma favorita es crear su propia billetera de hardware con una Raspberry Pi Zero con espacio de aire que ejecute Electrum, que puede construya usted mismo a un precio bastante bajo siguiendo mis instrucciones vinculadas. Y luego estas instrucciones le enseñarán cómo realizar gastos con espacios vacíos utilizando códigos QR. Así es como crearía una clave privada desde cero usando el dispositivo, en lugar de usar una clave creada por una billetera de hardware. No es necesario que use un Pi Zero; puede construir una computadora de escritorio con espacio de aire parte por parte, asegurándose de que no haya componentes de Wi-Fi o Bluetooth. Es mucho más placentero de usar y más rápido, pero también más caro.

Devolución de desvío de”¿Cómo CoinJoin? Opción 2-DIY CoinJoin ”

Continuación… Paso 5: Genere su transacción y guárdela

Ahora sabe cómo evitar la necesidad de guardar xpubs en su transacción exportada. En su lugar, puede guardar una transacción de esta manera:

Paso 6: CoinJoin Parter también sigue el paso 5 y le envía su transacción SIN FIRMAR

Después de que su socio CoinJoin guarda su transacción en un archivo, debe enviarse a quien esté coordinando el CoinJoin. Dado que la transacción se publicará en la cadena de bloques pública, la información que se envía no es particularmente sensible. Sin embargo, es deseable no divulgar sus acciones a nadie que realice vigilancia en Internet.

Una forma fácil de comunicarse es mediante ProtonMail. Si tanto el remitente como el destinatario utilizan el servicio, los mensajes se cifran de forma predeterminada. Si un usuario no está usando ProtonMail, entonces el mensaje no está encriptado.

Una forma más engorrosa, pero mucho más interesante (que le animo de todo corazón a que aprenda) es usar criptografía de clave pública/privada para encriptar el datos usted mismo y envíelos a través de cualquier medio de transmisión inseguro, como Gmail. Aquí hay una guía que escribí sobre esto.

Paso 7: Fusionar transacciones En una transacción de CoinJoin con Electrum

Una vez que reciba todas las transacciones sin firmar de uno o más de los socios de CoinJoin, debe guardarlas en su computadora y comenzar por abrir su transacción en Electrum como esto:

Luego, cerca de la parte inferior derecha lado de la ventana de transacción, verá un botón . Haga clic en eso y luego en .

Hay varias formas de ingresar los datos de la transacción en Electrum, pero lo más fácil es hacer clic en el ícono de la carpeta para darle un archivo.

Después de , verá la transacción combinada:

Vale la pena señalar algunos aspectos de esta transacción. Las direcciones resaltadas indican que Electrum reconoce las direcciones como pertenecientes a sí mismo. Los verdes son direcciones de recepción, los amarillos son direcciones de cambio.

La transacción tiene dos entradas, una de ellas reconocida como propia (verde) y cuatro salidas, una de las cuales es para una dirección de recepción (auto) verde, y otro un cambio de dirección amarillo. Hay una entrada sin resaltar que pertenece al socio CoinJoin. Hay dos salidas no resaltadas que también pertenecen al socio CoinJoin, una de ellas es su CoinJoin UTXO y la otra es cambio.

Observe que en la ventana de salida hay dos cantidades idénticas de 0.01 bitcoin. Uno se destaca como el nuestro, pero cuando se ve en la cadena de bloques, nadie sabrá cuál de los dos pertenece a esta billetera.

Paso 8: Firma

Hasta ahora todo va bien, pero no hemos terminado.

La transacción ahora debe ser firmada por cada socio de CoinJoin. Solo cuando todas las partes han firmado, la transacción es válida y se puede transmitir. Quien sea el firmante final tiene una cierta cantidad de”poder”, ya que puede retrasar la transacción. Pueden decidir entre ustedes quién será el último en firmar y transmitir.

Digamos que será el último en firmar. Luego, exportaría esta transacción combinada a un archivo y se la enviaría al socio de CoinJoin. Necesitan cargar la transacción:

Luego sign:

Después de firmar, exportar al archivo y enviarte de vuelta. Si hay muchos socios de CoinJoin, entonces cada persona debe firmar y enviarlo a la siguiente persona para que lo firme.

Cuando regrese a usted, cargue la transacción, fírmela y luego haga clic en botón que está a la derecha del botón .

¡Felicitaciones!

¡Bien hecho! ¿Qué tan genial fue eso? Ahora hazlo de nuevo.

¿Y ahora qué?

Si tienes una cantidad suficiente de UTXO mixtas, es importante saber qué hacer con ellas:

# 1 Nunca venda por dinero fiduciario, obviamente.

# 2 Nunca los combine con una moneda KYC ya que eso deshace la privacidad de la moneda mixta.

# 3 Evite combinar diferentes monedas mezcladas juntos si pueden evitarlo.

# 4 Tenga en cuenta que los UTXO de cambio no son privados y siguen siendo monedas KYC.

# 5 Las monedas mixtas son las monedas que puede gastar en privado. Asegúrese de comprender exactamente qué monedas está gastando y no introduzca accidentalmente monedas KYC en la entrada (que las fusiona). Aprender a usar una billetera Bitcoin poderosa, como Electrum, ayuda.

Esta es una publicación invitada de Arman the Parman. Las opiniones expresadas son totalmente propias y no reflejan necesariamente las de BTC Inc o Bitcoin Magazine.

Categories: IT Info