Author

Topic: [FAQ] - Coinjoin - O que é e como funciona (Read 215 times)

hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
September 17, 2023, 05:43:52 PM
#29
    __electrum plugin: Integração com a carteira Electrum para maior comodidade.

Obrigado pelo o artigo, achei bem interessante.
Alias, fiquei interessado neste ponto. Só tenho que perceber como adicionar esse plugin.

Isso permitia fazer coinjoin, sem um "gestor" do projeto.

Agora, todos tinha de usar o mesmo endereço nostr, certo? Como isso se faria?

Não sei se percebi a pergunta e para ser sincero ainda não explorei o Coinjoin no nostr.
Sei que no nostr, criamos um par de chaves usando Shcnorr e esse par de chaves podemos usar me vários sites. Eu por exemplo estou a usar na rede social nostr através dos clientes Primal e Snort.
Mas durante esta semana, se tiver algum tempo, vou explorar mais um pouco!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
September 17, 2023, 05:38:10 AM
#28
    __electrum plugin: Integração com a carteira Electrum para maior comodidade.

Obrigado pelo o artigo, achei bem interessante.
Alias, fiquei interessado neste ponto. Só tenho que perceber como adicionar esse plugin.

Isso permitia fazer coinjoin, sem um "gestor" do projeto.

Agora, todos tinha de usar o mesmo endereço nostr, certo? Como isso se faria?
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
September 17, 2023, 04:13:58 AM
#27
Um post muito interessante que encontrei no Stacker.news sobre Coinjoin oner nostr. Decidi transcrever e traduzir para aqui, na íntegra:

O que é o Coinjoin?


O CoinJoin é uma técnica de reforço da privacidade utilizada nas criptomoedas, principalmente em Bitcoin, para aumentar o anonimato. Consegue-se combinando várias transacções numa única transação, tornando mais difícil rastrear a origem e o destino dos fundos envolvidos.


Diferença entre Joinstr e outras implementações CoinJoin

O Joinstr se diferencia de outras implementações do CoinJoin por meio de vários recursos principais:

  • Sem Coordenador Centralizado: Ao contrário de algumas implementações CoinJoin que dependem de um coordenador central, o Joinstr opera de forma descentralizada, aumentando a privacidade do usuário.
  • Melhor UI / UX: Joinstr prioriza a experiência do usuário, garantindo uma interface mais suave e intuitiva para os participantes.
  • Implementação simples: A implementação do Joinstr é simples, tornando-o acessível a uma vasta gama de utilizadores.
  • Sem títulos de fidelidade: O Joinstr não exige que os participantes mantenham títulos de fidelidade, oferecendo mais flexibilidade.
  • Fundador anónimo: O projeto mantém um compromisso com o anonimato, alinhando-se com os seus objectivos centrados na privacidade.



Como funciona?


O Joinstr funciona através da criação de uma transacção pós-mistura com um ID de evento. Aqui está uma visão geral simplificada de como funciona:
  • Calcule o postmix_val usando a fórmula: (input_sum - taxa) / 5.
  • Gerar um ID de evento para a ronda CoinJoin.
  • Os participantes fornecem os seus UTXOs como inputs, especificando o montante e o tipo.
  • A transação CoinJoin é criada utilizando estas entradas e o ID do evento.
  •   A transação resultante é transmitida para a cadeia de blocos.


Código e detalhes de implementação
O Joinstr está disponível através de várias interfaces:

    __cli: Interface de linha de comandos para utilizadores avançados.
    __web: Interface Web para uma experiência de fácil utilização.
    __mobile app: Uma aplicação móvel para transacções CoinJoin em movimento.
    __electrum plugin: Integração com a carteira Electrum para maior comodidade.

A base de código do Joinstr e os detalhes de implementação podem ser encontrados no seu repositório: Joinstr no GitLab.

Joinstr em Electrum


O Joinstr também se integra perfeitamente com a carteira Electrum, fornecendo uma maneira fácil de aceder à funcionalidade CoinJoin. Um exemplo de transacção usando Joinstr em Electrum pode ser encontrado aqui.

Demonstração


Assistir a uma demonstração de um Joinstr:
https://www.youtube.com/watch?v=O5qbexzO37c


E agora?

O Joinstr continua a evoluir e a equipa de desenvolvimento tem um roteiro empolgante pela frente. Alguns itens da lista de tarefas incluem:

  • Implementação de novos circuitos Tor para cada pedido para aumentar a privacidade.
  • Utilização do NIP 38/48 para canais encriptados.
  • Permitir denominações personalizadas para pools CoinJoin.
  • Restringir o registo de diferentes tipos de entradas para uma ronda.
  • Implementar o NIP 9 para eliminar eventos após a conclusão de uma ronda.


Utilizar políticas Multisig e Miniscript no CoinJoin

Para utilizadores mais avançados interessados em políticas multisig e Miniscript no CoinJoin, a Joinstr oferece dois projectos relacionados:


Exemplos de transacções para estes projectos podem ser encontrados aqui.
Coinjoin usando a bandeira Sighash ALL|ANYONECANPAY



Explore uma prova de conceito (PoC) para Coinjoin usando o sinalizador ALL|ANYONECANPAY Sighash aqui.

Agradecimentos
Agradecemos às seguintes pessoas e organizações pelo seu apoio e contribuições até à data:
  • @HRF - Human Rights Foundation
  • @quaintrellexbt
  • @jeremyrubin
  • @ecurrencyhodler
  • @fiatjaf
  • @jeff
  • @achow101


Mantenha-se atualizado sobre o progresso do Joinstr através do Nostr ou usando o seguinte endereço: npub1v6qjdzkwgaydgxjvlnq7vsqxlwf4h0p4j7pt8ktprajd28r82tvs54nzyr.
O Joinstr representa um passo importante no aumento da privacidade da criptomoeda, e o seu compromisso com um design de fácil utilização e descentralização torna-o uma adição notável ao mundo das implementações CoinJoin.
Projeto: Joinstr @ BOLT.FUN
Tags:  #brainstorm #bitcoin-design #nostr #activity #discussion
Artigo original publicado em BOLT🔩FUN
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
September 17, 2023, 03:45:34 AM
#26
Pronto... Podemos testar uma cena dessas. Eu ainda teria que ver exactamente com que é que tinha que lidar para perceber se depois em relação aos outputs, a cena de randomizar números para dar aleatoriedade aos outputs funcionaria!

Mas nesse cenário, é indiferente randomizar os outputs. Digo eu...

Qual seria o objetivo?

De um certo ponto de vista, tens razão. Se o coordenador não souber a quem pertencem os inputs, não interessa a ordem dos outputs, acho eu. Não sei se randomizar os outputs, adicionaria alguma espécie de, ainda que rudimentar, entropia à aleatoriedade dos outputs!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
Pronto... Podemos testar uma cena dessas. Eu ainda teria que ver exactamente com que é que tinha que lidar para perceber se depois em relação aos outputs, a cena de randomizar números para dar aleatoriedade aos outputs funcionaria!

Mas nesse cenário, é indiferente randomizar os outputs. Digo eu...

Qual seria o objetivo?
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
O que tenho em mente é algo como, para os inputs, arranjar forma de os enviarmos a todos para um local sem que nos identifiquemos. Parto também do princípio que o coordenador não vai andar a ver IPs e a comparar com os IPs de onde postamos aqui no forum, por exemplo, para descobrir a quem pertece cada IP. Eu pelo menos, de certeza que não me vou dar a esse trabalho.
Não sei se há possibilidade de se criar uma espécie de container online onde cada um dos participantes envia para lá os seus inputs, e depois o coordenador não tem forma directa de associar os inputs aos respectivos donos.
E quanto aos outputs, a idea era, por exemplo, se tivermos 10 outputs para gerar, com um script randomizava números de 1 a 10, e depois colocava os outputs por essa ordem aleatória, também sem andar a ver em que posição calhou cada output para o associar ao respectivo input. Não sei se insto faz sentido, só mesmo testando para perceber se realmente podia dar algum nível de privacidade aos otuputs!

Basta ter um ficheiro no Google Docs (é só um exemplo - não é para usar!), onde cada um ia lá e colava o seu inputs/outputs. Depois o coordenador, só tinha de pegar nisso e dar seguimento. Assim, ele não vai saber de quem é o que. Se não se colocar em investigações, que sinceramente, aqui entre nós acredito que não.

Pronto... Podemos testar uma cena dessas. Eu ainda teria que ver exactamente com que é que tinha que lidar para perceber se depois em relação aos outputs, a cena de randomizar números para dar aleatoriedade aos outputs funcionaria!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
O que tenho em mente é algo como, para os inputs, arranjar forma de os enviarmos a todos para um local sem que nos identifiquemos. Parto também do princípio que o coordenador não vai andar a ver IPs e a comparar com os IPs de onde postamos aqui no forum, por exemplo, para descobrir a quem pertece cada IP. Eu pelo menos, de certeza que não me vou dar a esse trabalho.
Não sei se há possibilidade de se criar uma espécie de container online onde cada um dos participantes envia para lá os seus inputs, e depois o coordenador não tem forma directa de associar os inputs aos respectivos donos.
E quanto aos outputs, a idea era, por exemplo, se tivermos 10 outputs para gerar, com um script randomizava números de 1 a 10, e depois colocava os outputs por essa ordem aleatória, também sem andar a ver em que posição calhou cada output para o associar ao respectivo input. Não sei se insto faz sentido, só mesmo testando para perceber se realmente podia dar algum nível de privacidade aos otuputs!

Basta ter um ficheiro no Google Docs (é só um exemplo - não é para usar!), onde cada um ia lá e colava o seu inputs/outputs. Depois o coordenador, só tinha de pegar nisso e dar seguimento. Assim, ele não vai saber de quem é o que. Se não se colocar em investigações, que sinceramente, aqui entre nós acredito que não.
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Gosto de exemplificar o Coinjoin de forma visual pensando em uma cesta onde 5 pessoas colocam 1 moeda de R$ 1 cada, balançam a cesta, e outras 5 pessoas pegam uma moeda cada. Ninguém sabe quem pagou quem, mas entraram 5 e saíram 5.

Um bom exemplo.

Já usou Coinjoin? Alias quem é que já usou Coinjoin?

Por acaso, gostava de fazer uns testes para ver (se der para fazer pelo Electrum).  Tongue

Se tentarmos fazer um Coijoin manual, quem ficar a coordenar o processo, fica a sabera quem pertece cada input e a quem pertence cada output. No entanto, eu acho que podemos randomizar um pouco o processo e pelo menos o coordenador ficar sem saber sobre os outputs, com apenas um pouco de boa vontade.

O que tenho em mente é algo como, para os inputs, arranjar forma de os enviarmos a todos para um local sem que nos identifiquemos. Parto também do princípio que o coordenador não vai andar a ver IPs e a comparar com os IPs de onde postamos aqui no forum, por exemplo, para descobrir a quem pertece cada IP. Eu pelo menos, de certeza que não me vou dar a esse trabalho.
Não sei se há possibilidade de se criar uma espécie de container online onde cada um dos participantes envia para lá os seus inputs, e depois o coordenador não tem forma directa de associar os inputs aos respectivos donos.
E quanto aos outputs, a idea era, por exemplo, se tivermos 10 outputs para gerar, com um script randomizava números de 1 a 10, e depois colocava os outputs por essa ordem aleatória, também sem andar a ver em que posição calhou cada output para o associar ao respectivo input. Não sei se insto faz sentido, só mesmo testando para perceber se realmente podia dar algum nível de privacidade aos otuputs!

Todos os participantes apenas precisam de um meio para assinar os seus inputs. Portanto, a Electrum será suficiente para o efeito.
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
Gosto de exemplificar o Coinjoin de forma visual pensando em uma cesta onde 5 pessoas colocam 1 moeda de R$ 1 cada, balançam a cesta, e outras 5 pessoas pegam uma moeda cada. Ninguém sabe quem pagou quem, mas entraram 5 e saíram 5.

Um bom exemplo.

Já usou Coinjoin? Alias quem é que já usou Coinjoin?

Por acaso, gostava de fazer uns testes para ver (se der para fazer pelo Electrum).  Tongue
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Tanto a Samurai como a Wasabi Wallet oferecem serviços de Coinjoin automatizados e usam a tecnologia Whirlpool e cobram cerca de 0.2% do total de Bitcoin de fees pelo serviço e fees de rede.
Cada wallet implementa o Coinjoin da forma que melhor entende.
Qual o motivo para a primeira frase desse paragrafo estar riscada?

Gosto de exemplificar o Coinjoin de forma visual pensando em uma cesta onde 5 pessoas colocam 1 moeda de R$ 1 cada, balançam a cesta, e outras 5 pessoas pegam uma moeda cada. Ninguém sabe quem pagou quem, mas entraram 5 e saíram 5.

Porque eu entendi mal o que era o "whirlpoool". Eu só conhecia "Whirlpool" como uma função hash criada nos anos 2000 e pensei que de alguma forma a Samurai e a Wasabi usassem essa hash function para o mix das moedas, mas pelo que depois percebi, este termo é apenas o nome que a Samurai deu à sua própria implementação do Coinjoin e com a semelhança que há entre juntar umas moedas e misturá-las como se as colocássemos dentro de uma máquina de lavar roupa! Esta terminologia no contexto de Coinjoin nada tem a ver com a tal hash function. Foi por isso que rasurei aquela parte da frase, porque na verdade "whirlpool" aqui não é uma tecnologia. É apenas um nome dado à implementação da Samurai que funciona à base de pools, para onde os participantes enviam os seus Bitcoins!
legendary
Activity: 2758
Merit: 6830
Tanto a Samurai como a Wasabi Wallet oferecem serviços de Coinjoin automatizados e usam a tecnologia Whirlpool e cobram cerca de 0.2% do total de Bitcoin de fees pelo serviço e fees de rede.
Cada wallet implementa o Coinjoin da forma que melhor entende.
Qual o motivo para a primeira frase desse paragrafo estar riscada?

Gosto de exemplificar o Coinjoin de forma visual pensando em uma cesta onde 5 pessoas colocam 1 moeda de R$ 1 cada, balançam a cesta, e outras 5 pessoas pegam uma moeda cada. Ninguém sabe quem pagou quem, mas entraram 5 e saíram 5.
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees

Ahh ok, nem me estava a lembrar.
Sim, mixers, por design, são custodiais. A implementação depende sempre de um "entidade central" em quem nós temos que confiar que não vai fugir com os nossos fundos e que vamos receber de volta o mesmo valor e sem qualquer ligação aos fundos que enviámos inicialmente.

No caso de Coinjoin, não é multi-sig, pelo menos por defeito. Provavelmente faz mais sentido que sejam PSBTs, já que cada input tem que ser assinado por cada participante e todas as assinaturas têm que ser juntas numa só transacção. Mas acho que também não é obrigatorio que seja PSBT. Os devs arranjam estratégias mirabulantes para fazer as coisas acontecerem!

Você está certo, coinjoin não é multi sig.

O que acontece é que acada usuário assina individualmente seu input. Na multisig são necessárias múltiplas assinaturas no mesmo input. É diferente.

Quote
The signatures, one per input, inside a transaction are completely independent of each other. This means that it's possible for Bitcoin users to agree on a set of inputs to spend, and a set of outputs to pay to, and then to individually and separately sign a transaction and later merge their signatures. The transaction is not valid and won't be accepted by the network until all signatures are provided, and no one will sign a transaction which is not to their liking.
https://en.bitcoin.it/wiki/CoinJoin

Sim, o post original é tradução de parte do texto desse link. Foi daí que tirei parte da informação. Mas na realidade eu ainda não encontrei informação que confirme ou desminta como é que tudo acontece, ao pormenor, under the hood, e por isso podemos apenas especular sobe o que aocntece. A não ser que alguém com conhecimentos suficientes, peque numa das implementações e perceba ao pormenor, através do source code, como é que as coisas acontecem naquela implementação específica!
legendary
Activity: 2352
Merit: 6089
bitcoindata.science

Ahh ok, nem me estava a lembrar.
Sim, mixers, por design, são custodiais. A implementação depende sempre de um "entidade central" em quem nós temos que confiar que não vai fugir com os nossos fundos e que vamos receber de volta o mesmo valor e sem qualquer ligação aos fundos que enviámos inicialmente.

No caso de Coinjoin, não é multi-sig, pelo menos por defeito. Provavelmente faz mais sentido que sejam PSBTs, já que cada input tem que ser assinado por cada participante e todas as assinaturas têm que ser juntas numa só transacção. Mas acho que também não é obrigatorio que seja PSBT. Os devs arranjam estratégias mirabulantes para fazer as coisas acontecerem!

Você está certo, coinjoin não é multi sig.

O que acontece é que acada usuário assina individualmente seu input. Na multisig são necessárias múltiplas assinaturas no mesmo input. É diferente.

Quote
The signatures, one per input, inside a transaction are completely independent of each other. This means that it's possible for Bitcoin users to agree on a set of inputs to spend, and a set of outputs to pay to, and then to individually and separately sign a transaction and later merge their signatures. The transaction is not valid and won't be accepted by the network until all signatures are provided, and no one will sign a transaction which is not to their liking.
https://en.bitcoin.it/wiki/CoinJoin
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees

Que mixers comuns te referes? Neste momento eu só conheço os serviços que mencionei no OP e todos eles (exepto o Joinmarket) usam um coordenador e esse coordenador não te conhecimento nem da origem de cada input nem do destino de cada output! Como isso é feito internamente, não sei, mas pelo que tenho lido, é completamente trustless!

Todos esses das nossas campanhas de assinaturas são mixers, não são coin join.
Sinbad, unijoin, mixtum... tem vários serviços que inclusive participam do fórum.

Você transfere o bitcoin pra eles, no endereço deles, e cada um usa a sua técnica para embaralhar. Em geral, te devolvem moedas de outras pessoas.

 

No CoinJoin o processo é muto mais automatizado e não envolve esse nivel de confiança.

Não precisa de confiar no operador da operação?

Então o CoinJoin acaba por ser mais seguro que o mix. Qual é o motivo para não ser mais utilizado e haver mais ferramentas nesse sentido?

Coinjoin funciona por multi assinaturas em uma mesma transacao. Inputs de múltiplos usuarios sao gastos juntos em uma multisig. São wallets mais complexas.

Não sei exatamente porque a adoção não é maior. Acho simplesmente que as pessoas não se importam com privacidade, e um mixer é mais conveniente muitas vezes.

Ahh ok, nem me estava a lembrar.
Sim, mixers, por design, são custodiais. A implementação depende sempre de um "entidade central" em quem nós temos que confiar que não vai fugir com os nossos fundos e que vamos receber de volta o mesmo valor e sem qualquer ligação aos fundos que enviámos inicialmente.

No caso de Coinjoin, não é multi-sig, pelo menos por defeito. Provavelmente faz mais sentido que sejam PSBTs, já que cada input tem que ser assinado por cada participante e todas as assinaturas têm que ser juntas numa só transacção. Mas acho que também não é obrigatorio que seja PSBT. Os devs arranjam estratégias mirabulantes para fazer as coisas acontecerem!
legendary
Activity: 2352
Merit: 6089
bitcoindata.science

Que mixers comuns te referes? Neste momento eu só conheço os serviços que mencionei no OP e todos eles (exepto o Joinmarket) usam um coordenador e esse coordenador não te conhecimento nem da origem de cada input nem do destino de cada output! Como isso é feito internamente, não sei, mas pelo que tenho lido, é completamente trustless!

Todos esses das nossas campanhas de assinaturas são mixers, não são coin join.
Sinbad, unijoin, mixtum... tem vários serviços que inclusive participam do fórum.

Você transfere o bitcoin pra eles, no endereço deles, e cada um usa a sua técnica para embaralhar. Em geral, te devolvem moedas de outras pessoas.

 

No CoinJoin o processo é muto mais automatizado e não envolve esse nivel de confiança.

Não precisa de confiar no operador da operação?

Então o CoinJoin acaba por ser mais seguro que o mix. Qual é o motivo para não ser mais utilizado e haver mais ferramentas nesse sentido?

Coinjoin funciona por multi assinaturas em uma mesma transacao. Inputs de múltiplos usuarios sao gastos juntos em uma multisig. São wallets mais complexas.

Não sei exatamente porque a adoção não é maior. Acho simplesmente que as pessoas não se importam com privacidade, e um mixer é mais conveniente muitas vezes.
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees

Sobre a thread, eu sugiro tirar do titulo esse [Thread Oficial]
Oficial é usado por representantes de serviços ou a propria pessoa que faz um serviço. Não é o caso...

eu sugiro colocar [FAQ] ou [GUIA] ou [TRADUCAO] algo do genero...

Done. Neste contexto concordo que faz mais sentido que não tenha [Thread Oficial] já que há provedores de serviços aqui pelo forum. Alteração feita no título do post original!

Que mixers comuns te referes? Neste momento eu só conheço os serviços que mencionei no OP e todos eles (exepto o Joinmarket) usam um coordenador e esse coordenador não te conhecimento nem da origem de cada input nem do destino de cada output! Como isso é feito internamente, não sei, mas pelo que tenho lido, é completamente trustless!

No CoinJoin o processo é muto mais automatizado e não envolve esse nivel de confiança.

Não precisa de confiar no operador da operação?

Então o CoinJoin acaba por ser mais seguro que o mix. Qual é o motivo para não ser mais utilizado e haver mais ferramentas nesse sentido?

Não. Em Coinjoin é tudo feito trustelessly e nunca chegas a ficar sem controlo dos teus fundos. Os mixers acabam por ter um 3rd party service provider que vai fazer o mixing e neste caso, em determinada altura, ficas sem acesso aos teus funds, sempre na expectativa de que o 3rd party service provider cumpra a parte dele e te envie fundos que não estejam ligados aos que tu enviaste de início!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
No CoinJoin o processo é muto mais automatizado e não envolve esse nivel de confiança.

Não precisa de confiar no operador da operação?

Então o CoinJoin acaba por ser mais seguro que o mix. Qual é o motivo para não ser mais utilizado e haver mais ferramentas nesse sentido?
legendary
Activity: 2352
Merit: 6089
bitcoindata.science
Aqui há uns tempos falou-se em Coinjoin e acho que eu fiquei em criar uma thread sobre o assunto. Então aqui fica ela.

O que é o Coinjoin?
Coinjoin é um procedimento para misturar moedas Bitcoin e aumentar o nível de privacidade e anonimato dos utilizadores dessas moedas de Bitcoin. Consiste em juntar vários inputs, gerar novas transacções onde esses inputs se misturam uns com os outros e finalmente, gerar outputs nos valores correctos para cada participante do Coinjoin.
A Blockchain é uma base de dados transparente e que pode ser consultada por qualquer pessoa e, como tal, pode ser usada para análises complexas e, dessa forma, conseguir associar addresses Bitcoin a pessoas inividuais ou empresas. Através da análise de padrões de utilização de addresses de Bitcoin, montantes transferidos, carteiras usadas, IPs de nodes e muitas outras informações disponíveis, empresas de análise de dados como a Chainanalysis e outras, conseguem reduzir em grande escala a privacidade e o anonimato dos utilizadores de Bitcoin e isso é um problema grave.

Muito bacana. Eu gostaria de enfatizar 2 coisas relacionadas ao coinjoin e a thread.

A primeira, é que o CoinJoin é uma excelente alternativa, principalmente pois existe muito menos confiança envolvida. Em um mixer comum, existe sim confiança no prestador de serviço.
Por exemplo, se voce manda as moedas por SinBad você confia que eles não vão sumir ocm seu dinheiro.

No CoinJoin o processo é muto mais automatizado e não envolve esse nivel de confiança.



Sobre a thread, eu sugiro tirar do titulo esse [Thread Oficial]
Oficial é usado por representantes de serviços ou a propria pessoa que faz um serviço. Não é o caso...

eu sugiro colocar [FAQ] ou [GUIA] ou [TRADUCAO] algo do genero...
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Segundo entendi do que li, o coordenador não sabe da origem nem do destino dos fundos. E mesmo que a gente faça isto de forma manual, acredito que nenhum dos participantes fique a saber a quem pertence cada output! Se assim não fosse, não fazia sentido o Coinjoin.

Olhando para o tutorial mencionado pelo sabotag3x, cada um de nós tinha de enviar os elementos da transação pretendida. Isso faz com que quem recebe essa informação, sabe de onde vem cada entrada e saída. Ou estarei enganado?

Estás enganado. Eu não conheço o procedimento ao pormenor, mas sei que "o coordenador" não sabe nem de onde vem nem para quem vão as UTXOs. Se assim não fosse, o Coinjoin não fazia sentido!
Estou a ler o artigo do Bitcoin Magazine para ver o que é necessário e como se processa. Pode ser que expliquem mais alguma coisa que ajude a esclarecer mais questões!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
Segundo entendi do que li, o coordenador não sabe da origem nem do destino dos fundos. E mesmo que a gente faça isto de forma manual, acredito que nenhum dos participantes fique a saber a quem pertence cada output! Se assim não fosse, não fazia sentido o Coinjoin.

Olhando para o tutorial mencionado pelo sabotag3x, cada um de nós tinha de enviar os elementos da transação pretendida. Isso faz com que quem recebe essa informação, sabe de onde vem cada entrada e saída. Ou estarei enganado?
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
O @Adriano tentou organizar um CoinJoin aqui no fórum, imagino que a leitura lhe interesse: https://bitcointalksearch.org/topic/experimento-coinjoin-2828501

Ele falou que "não estava com pressa", talvez ainda dê tempo de participar.. mas isso foi em 2018 Cheesy

Bem interessante. Era ver se ele ainda esta disponível para tratar do processo.
Mesmo assim, estão lá algumas informações de como tudo funciona a nível manual.

Mas, agora reparei numa coisa, a pessoa que vai executar o coinjoin ou gerir tudo, fica a saber de quem é cada endereço e o valor enviado?
Outra questão que me surgiu: o valor é dividido por todos igual, ou é possível indicar qual a quantidade que cada endereço recebe?

Segundo entendi do que li, o coordenador não sabe da origem nem do destino dos fundos. E mesmo que a gente faça isto de forma manual, acredito que nenhum dos participantes fique a saber a quem pertence cada output! Se assim não fosse, não fazia sentido o Coinjoin.

Quanto as valores, temos que partir do princípio, que pelo menos com a Samurai Whirlpool, os inputs têm que ser do mesmo valor, para que os outputs também possam ser todos iguais e dessa forma serem indistinguíveis uns dos outros. É assim que a Samurai Whirlpool funciona!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
O @Adriano tentou organizar um CoinJoin aqui no fórum, imagino que a leitura lhe interesse: https://bitcointalksearch.org/topic/experimento-coinjoin-2828501

Ele falou que "não estava com pressa", talvez ainda dê tempo de participar.. mas isso foi em 2018 Cheesy

Bem interessante. Era ver se ele ainda esta disponível para tratar do processo.
Mesmo assim, estão lá algumas informações de como tudo funciona a nível manual.

Mas, agora reparei numa coisa, a pessoa que vai executar o coinjoin ou gerir tudo, fica a saber de quem é cada endereço e o valor enviado?
Outra questão que me surgiu: o valor é dividido por todos igual, ou é possível indicar qual a quantidade que cada endereço recebe?
legendary
Activity: 2688
Merit: 2297
Ainda não fiz nem sabia que se podia fazer. Mas estou muito interessado nisso. Ainda não li essa parte do tutorial mas será uma leitura para muito breve para ser se é assim tão mais difícil. Mas quero tentar fazer nem que seja só por uma vez.
É começar a pensar em interessados para nos juntarmos e fazermos um Coinjoin todos!

O @Adriano tentou organizar um CoinJoin aqui no fórum, imagino que a leitura lhe interesse: https://bitcointalksearch.org/topic/experimento-coinjoin-2828501

Ele falou que "não estava com pressa", talvez ainda dê tempo de participar.. mas isso foi em 2018 Cheesy
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Antes de mais, vou precisar de fazer umas correcções ao post inicial. Não sei se deva rasurar o que quero emendar ou simplesmente apagar! Acontece que quando falei em tecnologias usadas para fazer o mixing das coins, assumi que o Whirlpool era uma hash function e afinal não é. Aliás, é. Mas neste contexto não é! Whirpool neste contexto é o nome que a Samurai wallet deu à sua própria implementação do Coinjoin! A Whirlpool como eu a conheço, é uma antiga hash function e pelos vistos já nem usada é - se é ue alguma vez foi!

Pelo pouco que percebo ainda sobre Coinjoin, cada wallet implementa o procedimento com características próprias, ou seja, o conceito é o mesmo, mas os procedimentos podem divergir de implementação para implementação. É como quando nos referimos à LN. Temos o mesmo conceito mas várias implementações, como LND, Eclair, Core Lightning, etc. Cada uma ligeiramente diferente da outra, mas o conceito é o mesmo!

Pois, seria interessante carteiras como a Electrum implementar esse tipo de funcionalidade.
Mas, para isso, não será necessário todos os que querem usar, estarem ligados ao mesmo(s) node(s)?

Noutro dia também já tentei saber mais sobre o tema, mas não aprofundei muito.

Com excepção do Joinmarket, as outras implementações têm um coordenador, onde os utilizadores colocam o Bitcoin deles e se registam para o mix.
A Samurai Whirlpool usa os servers da Samurai e a Wasabi usa uma implementação light do protocolo Bitcoin. Nós, como users, só precisamos mesmo da wallet e ligação à net!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
Pois, seria interessante carteiras como a Electrum implementar esse tipo de funcionalidade.
Mas, para isso, não será necessário todos os que querem usar, estarem ligados ao mesmo(s) node(s)?

Noutro dia também já tentei saber mais sobre o tema, mas não aprofundei muito.
legendary
Activity: 2352
Merit: 1121
☢️ alegotardo™️
Pode-se dizer seguramente que todo mixer se utiliza de Coinjoin em suas operações? Ou não devido às particularidade e/ou forma como eles embaralham as moedas serem diferentes do termo aqui discutido?

Acredito que toda moeda não anônima já deveria ter implementado ferramentas que permitam realizar nativamente o coinjoin sem dependerem de um serviço centralizado para isso, atualmente o governo está cada vez mais de olho em quem transaciona criptos, principalmente bitcoin, e isso ferre o princípio de anonimidade defendido por Satoshi. Assim como criaram a Lighting Network para o Bitcoin, não seria possível desenvolverem também um para o Coinjoin?

Pesquisando aqui, existem vários serviços que se propoem à fazer coinjoin para diferentes blockchains, mas a maioria deles não me parecem serem descentralizados.
hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Obrigado pela explicação.

Achei interessante o facto que se pode fazer isso sem recorrer a terceiros. Tenho de analisar isso.
Já fizeste coinjoin "manual"?



Ainda não fiz nem sabia que se podia fazer. Mas estou muito interessado nisso. Ainda não li essa parte do tutorial mas será uma leitura para muito breve para ser se é assim tão mais difícil. Mas quero tentar fazer nem que seja só por uma vez.
É começar a pensar em interessados para nos juntarmos e fazermos um Coinjoin todos!
legendary
Activity: 1862
Merit: 5154
**In BTC since 2013**
Obrigado pela explicação.

Achei interessante o facto que se pode fazer isso sem recorrer a terceiros. Tenho de analisar isso.
Já fizeste coinjoin "manual"?

hero member
Activity: 1274
Merit: 681
I rather die on my feet than to live on my knees
Aqui há uns tempos falou-se em Coinjoin e acho que eu fiquei em criar uma thread sobre o assunto. Então aqui fica ela.

O que é o Coinjoin?
Coinjoin é um procedimento para misturar moedas Bitcoin e aumentar o nível de privacidade e anonimato dos utilizadores dessas moedas de Bitcoin. Consiste em juntar vários inputs, gerar novas transacções onde esses inputs se misturam uns com os outros e finalmente, gerar outputs nos valores correctos para cada participante do Coinjoin.
A Blockchain é uma base de dados transparente e que pode ser consultada por qualquer pessoa e, como tal, pode ser usada para análises complexas e, dessa forma, conseguir associar addresses Bitcoin a pessoas inividuais ou empresas. Através da análise de padrões de utilização de addresses de Bitcoin, montantes transferidos, carteiras usadas, IPs de nodes e muitas outras informações disponíveis, empresas de análise de dados como a Chainanalysis e outras, conseguem reduzir em grande escala a privacidade e o anonimato dos utilizadores de Bitcoin e isso é um problema grave.

Quando foi criado o Coinjoin?
O Coinjoin foi apresentado a 22 de Agosto de 2013 pelo developer gmaxwell numa thread aqui no bitcointalk.org. Nesta thread está detalhado o modo de funcionamento.

Como funciona um Coinjoin?
Um Coinjoin consiste em que vários utilizadores concordem em usar este serviço e quantos mais utilizadores participarem no mesmo Coinjoin, maior será o nível de privacidade e anonimato para cada utilizador no final!
De referir que, quando vários utilizadores concordam em misturar os seus Bitcoins, não perdem, em momento algum, o controlo deles. Pelo contrário. Nas transações CoinJoin de Bitcoin as assinaturas de cada transacção permanecem independentes entre si, e apenas quando TODOS os participantes providenciarem cada uma das suas assinaturas é que o Coinjoin poderá ser iniciado e terminado. Após cada uma das transacções ser assinada por cada participante, elas serão agrupadas numa só transacção Coinjoin, será feito o broadcast e eventualmente aceite por um miner e incluída num bloco. Na Blockchain aparecerá apenas uma transacção e será extremamente difícil conseguir perceber, mesmo para os participantes do Coinjoin, de onde vieram os Bitcoins para cada um!


O conceito pode ser explicado recorrendo à seguinte imagem:
(nota: este excerto foi traduzido de: https://en.bitcoin.it/wiki/CoinJoin, sem recurso a AIs)



Uma transacção Bitcoin consome um ou mais inputs e cria um ou mais outputs.
Cada input é um output de uma transacção anterior. Por cada input é criada uma assinatura (scriptsig) distinta, de acordo com as regras especificadas no output da transacção anterior que está a ser consumida (scriptpubkey).

A rede Bitcoin é a responsável por certificar que as assinaturas estão correctas, que os inputs existem e estão elegíveis para serem gastos, e que a soma dos outputs é menor ou igual à soma dos inputs (qualquer remanescente será considerado fees para os miners por terem incluído a transacção naquele bloco).

É normal que uma transacção gaste muitos inputs para conseguir perfazer o valor a ser pago, criando eventualmente uma transacção adicional para efeitos de "troco" para receber de volta Bitcoin não gasto que não sejam fees/taxas.

Não há qualquer obrigatoriedade que as scriptpubkeys dos inputs usados sejam as mesmas, ou seja, não é obrigatório que sejam pagamentos para a mesma address. E na realidade, quando Bitcoin é usado correctamnete com uma address por transacção, nenhuma das addresses será a mesma.

Quando consideramos a história da posse/propriedade de Bitcoin, podiamos olhar para transacções que gastam de várias scriptpubkeys distintas como uma co-união de propriedade e partir de um princípio: Como, de outra forma, podia uma transacção gastar de várias addresses a não ser que uma parte comum controlasse esses endereços?

Na imagem a cima, a "transacção 2" gasta moedas que foram assiandas por 1A1 e 1C3. Portanto, 1A1 e 1C3 serão necessariamente as mesmas pessoas?
Partir deste princípio é incorrecto. A utilização de uma transacção única não prova controlo em comum (embora assim o pareça), e isto é o que torna o Coinjoin possível:

As assinaturas, uma por input, numa transacção são completamente independentes umas das outras. Isto significa que é possível aos utilizadores de Bitcoin em concordarem num conjunto de inputs para serem gastos, e num conjunto de outputs para serem pagos, e por fim, individualmente e separadamente, assinarem uma transacção e mais tarde juntar todas as assinaturas. A transacção não será válida nem será aceites pela rede até que todas as assinaturas sejam "apresentadas" e ninguém vai assinar transacções que não estejam correctas para cada um.

Para aumentar a privacidade, os N utilizadores acordariam quantiade de output uniforme e forneceriam inpus que correspondessem pelo menos a essa quantidade. A transacção teria N outputs dessa quantidade e, potencialmente, mais N outputs de "troco" se alguns dos utilizadores fornecessem inputs que excedessem o valor total. Todos assinariam a transacção e esta poderia então ser transmitida. Não há risco de roubo em momento algum.

Na figura a cima, a "transacção 2" tem entradas de 1A1 e 1C3. Digamos que 1A1 é um address usado para Alice e 1C3 é um address usado para Charlie. A que Alice e a Charlie pertencem quais das outputs 1D e 1E?
(*fim de excerto)

Uma outra nota que convém referir é que Coinjoin não garante 100% de anonimato. Mesmo com Coinjoin continua a haver possibilidade de rastrear Bitcoins e levar a identificar pessoas ou empresas. No entanto, torna-se extremamente mais difícil conseguir tal proeza. Cabe a cada um de nós medir os pros e contras e perceber se compensa ou não.
Ainda convém também referir mais dois pontos que me parecem pertinentes que é o facto de ao aceitarmos fazer Coinjoin com outras pessoas, podemos estar a misturar os nossos Bitcoins com Bitcoins usados em crimes e essa pode ser uma desvantagem pois podemos acabar com Bitcoins marcados ("tainted") mesmo após o Coinjoin! É que o facto de termos Bitcoins "tainted" estamos a diminuir a fungibilidade desses Bitcoins.


Onde podemos fazer Coinjoin?
Há várias implementações desta feature e algumas das mais comuns são as wallets que as têm incorporadas.
Exemplos:

Samurai Wallet
https://samouraiwallet.com/

Wasabi Wallet
https://wasabiwallet.io/

JoinMarket
https://github.com/JoinMarket-Org/joinmarket-clientserver

DIY Coinjoin
Método manual qua usa os nossos nodes e requer comunicação com outros users com o mesmo interesse.
Deixo um link no final com um guide sobre Coinjoin da Bitcoin Magazine e um tutorial para esta opção manual de Coijoin.

Tanto a Samurai como a Wasabi Wallet oferecem serviços de Coinjoin automatizados e usam a tecnologia Whirlpool e cobram cerca de 0.2% do total de Bitcoin de fees pelo serviço e fees de rede.
Cada wallet implementa o Coinjoin da forma que melhor entende. A Samurai chamou à sua implementação "Whirlpool" e parte do princípio que os valores dos inputs são iguais e usa pools para cada valor. 0.1BTC, 0.2BTC, etc (são apenas exmeplos). Os outputs serão também todos iguais por forma a torná-los indiferenciáveis.
Já a Wasabi wallet implementa o Coijoin de forma mais complexa e permite inputs de valores distintos, sendo que no final, vão aparecer vários outputs iguais entre si, ou seja, vários outputs de 0.2BTC, vários de 0.3BTC, vários de outros valores, por forma a que o total dos outputs iguale o total dos inputs e que cada participante receba outputs iguais até perfazero valor com que entrou. Ou seja, se eu entrei com 1.5BTC, eu posso receber 4x 0.2BTC + 2x 0.1BTC + 1x 0.5BTC, por exemplo.

Guide e Tutorial da revista Bitcoin Magazine sobre Coinjoin e DIY Coinjoin
https://bitcoinmagazine.com/technical/a-comprehensive-bitcoin-coinjoin-guide


Como nota final, eu não sou nem fiquei expert em Coijoin com a criação desta thread e portanto, se forem necessárias correcções, estarei disponível para as fazer.
Jump to: