Pages:
Author

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

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: 1722
Merit: 4711
**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: 1722
Merit: 4711
**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: 1722
Merit: 4711
**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.
Pages:
Jump to: