6. CoinJoin
voltar ao índice
Gregory Maxwell apresenta uma solução alternativa para aumentar o nível de privacidade dos usuários de Bitcoin, chamada CoinJoin13, que é um desenvolvimento das ideias apresentadas anteriormente sobre Taint[/ i]14, CoinJoin é um mecanismo que combina várias transações semelhantes em uma transação que consiste em muitas entradas e saídas. O conceito CoinJoin foi então implementado em um aplicativo chamado CoinJoin15.
Transações com o CoinJoin13
A imagem acima explica como o CoinJoin funciona e como ele se compara às transações Bitcoin.
Na transação 1, um endereço 1FF que possui 50 BTC deseja enviar 0,5 BTC para outro endereço, 1A1, com endereço de retorno 1FF. Ao final da transação, o endereço 1FF terá 49,5 BTC bitcoin.
Na transação 2, existem muitos endereços de entrada e saída. Embora este esquema pareça uma transação comum de Bitcoin, ele pode ser usado para proteger a identidade do usuário associado à transação. Por exemplo, o proprietário do endereço 1A1 deseja enviar 0,8 BTC para 1E5 e não quer que mais ninguém saiba desta transação, então ele combina a transação com outra transação do mesmo tamanho, por exemplo, do endereço 1C3 para 1D4. Isso significa que, ao observar a transação, o observador não consegue determinar qual endereço recebe o endereço 1A1, pois o bitcoin pode ter se originado de 1D4 ou 1E5.
ATUALIZAÇÃO
Entre as aplicações pioneiras na implementação do conceito CoinJoin:
Parabéns aos desenvolvedores da Wasabi e JoinMarket! A JoinMarket foi pioneira em muitos estudos do CoinJoin (e, aliás, Belcher escreveu um excelente e abrangente
artigo wiki sobre privacidade), enquanto a Wasabi é a primeira carteira que implementa o CoinJoin de uma maneira
altamente utilizável e sólida. Como signatário e doador do fundo de recompensas do CoinJoin, estou emocionado com a existência desses dois softwares!
Para todos que desejam melhorar sua privacidade, recomendo fortemente dar uma olhada na Wasabi, especialmente em “mixers” centralizados. -snip-
Observação:
-snip- A Wasabi não é mais nossa amiga. Eles se juntaram ao barco do inimigo. Portanto, acho importante removê-los do OP ou adicionar uma observação muito importante sobre eles não oferecerem mais suporte à privacidade e ao anonimato, mas o contrário. Este é um movimento muito decepcionante do lado da Wasabi e me enoja, mas é o que é. -snip-
Veja também este link: https://blog.wasabiwallet.io/zksnacks-blacklisting-update/
> Eles ainda não explicaram como exatamente a zkSNACKs Ltd irá colocar na lista negra certas saídas de transações não gastas se não estiverem monitorando e coletando dados do usuário
Não explicamos, porque é trivial. Pela arquitetura, o coordenador Wasabi não pode violar a privacidade dos seus usuários. Isto não significa que o coordenador opte por não recolher dados, mas significa que não poderia recolher mesmo que quisesse. O coordenador só conhece os UTXOs que participam de coinjoins – o público também sabe – e isso não é um vazamento de privacidade.
Referências (em inglês):
13. gmaxwell, CoinJoin: Bitcoin privacy for the real world
14. gmaxwell, I taint rich! (Raw txn fun and disrupting 'taint' analysis; >51kBTC linked!)
15. P. Martin & A. Taaki. (2013, August 25, 2015) Anonymous Bitcoin Transactions.
- Dimaz A.W. & Oscar D., Blockchain dari Bitcoin untuk Dunia, pages 104-105, 2017: Jasakom
- Outras referências: veja esta postagem #1
7. CoinSwap
voltar ao índice
Gregory Maxwell16 no tópico a seguir apresentou o CoinSwap pela primeira vez:
https://bitcointalk.org/index.php?topic=321228.0
O CoinSwap protegerá as informações de transação entre o pagador e o destinatário. O CoinSwap permite que as partes envolvidas façam transações envolvendo uma garantia de que nenhuma parte possa roubar bitcoins de outras partes. No CoinSwap, um terceiro é necessário como elemento de ligação entre o pagador e o destinatário, e também algumas transações devem ser feitas no esquema CoinSwap. Alguns métodos de transação usados no CoinSwap incluem garantia (escrow) e transações bloqueadas por hash.
Protocolo CoinSwap:
Neste protocolo, todas as partes presumiam ter canais de comunicação privados.
O protocolo CoinSwap pode ser explicado da seguinte forma:
Alice atua como pagadora,
Bob como destinatário do pagamento,
e Carol como intermediária (escrow).
Este protocolo está dividido em 3 fases, nomeadamente fase 0, fase 1 e fase 2.
Fase 0. Configura os cauções e seus reembolsos de tempo limite.
Fase 1. Faz com que, se Bob for pago, não haja como Carol deixar de receber.
Fase 2. Apenas libera os depósitos diretamente porque todos estão felizes porque não existe possibilidade de trapacear.
Alice Carol Bob
=====================================================================================
0.Computes TX_0: 2of2{A,C} |Computes TX_1: 2of2{C,B} | \
1.Send TX_0 TXID ------------> | |
2. |Send TX_1 TXID ------------> |
3. |Computes TX_0 locked refund |Computes TX_1 locked refund|
4. <------------ Send TX_0_refund | | Phase 0
5. | <------------ Send TX_1_refund. |
6.Announces TX_0 to network |Announces TX_1 to network | |
7. | | |
8.****** Network confirms TX_0: Alice pays according to 2 of {Alice, Carol} ******|
9.****** Network confirms TX_1: Carol pays according to 2 of {Carol, Bob} ******/
A. | |Selects secret value X \
B. | |Computes HX = H(X) |
C. | <------------ Send HX |
D. <----------------------------------------- Send HX |
E.Computes TX_2: TX_0>Carol+X | | | Phase 1
F.Send TX_2 ------------> | |
G. | Computes TX_3: TX_1>Bob+X | |
H. | Send TX_3 ------------> |
I. | <------------ Send X /
J. | Computes TX_4: TX_1>Bob | \
K. | Send TX_4 ------------> |
L. | |Signs and announces TX_4 |
M.****** Network confirms TX_4: Carol pays Bob via 2 of {Carol, Bob} ******|
N.Computes TX_5: TX_0>Carol | | | Phase 3
O.Send TX_5 ------------> | |
P. |Signs and announces TX_5 | |
Q.****** Network confirms TX_5: Alice pays Carol via 2 of {Alice, Carol} ******/
=====================================================================================
Diagrama do Protocolo CoinSwap.16
Fase 0
Na fase 0, ocorre o processo de realização de uma transação de garantia entre os participantes. Alice faz uma transação de garantia TX_0, que é uma garantia 2 de 2 entre Alice e Carol usando o bitcoin de Alice. Esta transação pode ser lida como:
'Alice pagará uma certa quantia de bitcoin para Carol se Alice e Carol concordarem.'
Então, Carol também faz uma transação TX_1, que é um depósito 2 de 2 entre Carol e Bob usando o bitcoin de Carol. Esta transação pode ser lida como: 'Carol pagará uma certa quantia de bitcoin a Bob se Carol e Bob concordarem.'
Para garantir essa fase, Carol faz um reembolso de TX_0 com prazo específico, o que fará com que Alice receba de volta o bitcoin pago a Carol caso algo aconteça no futuro.
Assim como Alice, Carol também faz TX_1_reembolso, que fará com que Carol receba de volta o bitcoin pago a Bob caso algo aconteça no futuro. As transações TX_0_refund e TX_1_reembolso não são enviadas para a rede por Alice ou Carol. As transações enviadas para a rede bitcoin nesta fase são TX_0 e TX_1.
Fase 1
A Fase 1 prepara garantias de transação para todos os participantes envolvidos. Isso significa que se Bob receber moedas de Carol, Carol também poderá fazer pagamentos de Alice. Um esquema de transação bloqueado por hash suporta esse esquema.
Neste esquema, Bob escolhe a palavra-chave secreta X, depois calcula o valor HX, que é o valor hash de X com a fórmula HX=H(X) e envia HX para Alice e Carol. Alice cria uma nova transação TX_2 que receberá moedas de TX_0 usando a assinatura de Carol e o valor X e receberá no endereço de Carol. Assim como Alice, Carol faz uma nova transação com um esquema de transação bloqueado por hash TX_3 que receberá moedas de TX_1 usando a assinatura de Bob e o valor X e pagará a Bob.
Nesta fase, se Bob trapacear e receber moedas usando TX_3, Carol poderá receber pagamentos usando TX_2 porque o valor de X pode ser conhecido quando Bob usar TX_3 e publicá-lo na rede Bitcoin.
Fase 2
Se TX_2 e TX_3 não forem enviados para a rede Bitcoin, a fase 2 poderá continuar. Nesta fase, Bob informa a Carol o valor de X, e Carol faz uma nova transação TX_4 que retira moedas de TX_1 usando a assinatura de Bob. Bob pode usar a transação TX_4 para receber o pagamento. Simples assim, Alice fez uma transação TX_5 que pegaria moedas de TX_0 usando a assinatura de Carol e pagaria para Carol. Carol pode enviar transações TX_5 para a rede Bitcoin para receber o pagamento.
Se este protocolo estiver completo, apenas as transações TX_4 e TX_5 usando TX_0 e TX_1 serão enviadas para a rede Bitcoin, enquanto as demais transações serão excluídas e não serão enviadas para a rede Bitcoin.
CoinSwap é um exemplo do método de pagamento contingente de conhecimento zero17 que possui os seguintes recursos:
1. Transação bloqueada por hash
2. Transação com bloqueio de tempo
3. Transação com garantia 2-de-2
No CoinSwap, cada etapa do protocolo deve seguir a ordem correta para produzir uma transação segura e garantida sem uma parte confiável.
Referências (em inglês):
16. gmaxwell, CoinSwap: Transaction graph disjoint trustless trading
17. Bitcoin Wiki. (2011, September 28, 2015), Zero Knowledge Contingent Payment
- Dimaz A.W. & Oscar D., Blockchain dari Bitcoin untuk Dunia, pages 105-107, 2017: Jasakom
- Outras referências: veja a postagem #1