Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs(coinjoins): write primer on bitcoin privacy and coinjoins #10

Draft
wants to merge 9 commits into
base: master
Choose a base branch
from

Conversation

johnsBeharry
Copy link
Member

No description provided.

coinjoins/README.md Outdated Show resolved Hide resolved
coinjoins/README.md Outdated Show resolved Hide resolved
coinjoins/README.md Outdated Show resolved Hide resolved

## Routing Transaction

- Should use Tor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

joinmarket, electrum personal server and wasabi support broadcasting by connecting to a random node over tor.

there are also well known broadcast services, such as blockstream.

more details on the section on tor broadcasting on the bitcoin wiki Privacy page

note that broadcasting with bitcoin core is potentially problematic for privacy, especially before the recent rebroadcast improvements.


- Should use Tor
- Research Dandelion
- If an attacker has enough nodes in the network it can determine the location of where the transaction was broadcasted.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

rebroadcast attacks also interact with dust attacks here, by dusting old addresses spy nodes that aggressively connect can increase likelyhood of broadcast being linkable via network level information.

Cc @amitiuttarwar - see twitter search for talks, PR reviews on rebroadcast work

and also block lists (e.g. AWS IP ranges etc), a number have circulated


##### Rounds

- Role of the coordinatior

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

JoinMarket doesn't have a coordinator (technically the taker does the same job as the coordinator, i.e. putting together a transaction, but the privacy model is different)

perhaps a better typology is centralized coinjoins, using blind signatures like Samourai and wasabi, and peer to peer as in JoinMarket. I'm not aware of other implementations being in use.

coinjoins/README.md Outdated Show resolved Hide resolved
Copy link

@nothingmuch nothingmuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments for README.md, will do process.md soon

Copy link

@nothingmuch nothingmuch left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coinjoins/process.md describes how WabiSabi based CoinJoins could work but that is not fully implemented yet and not a deployed system.

There are currently 3 deployed and operational systems for doing CoinJoins on Bitcoin to my knowledge:

  • JoinMarket
    • IRC based announcements, makers use ephemeral IDs to offer UTXOs for mixing
    • takers select makers and initiate a CoinJoin transaction, the taker determines the value of the outputs and all parties may produce change outputs as necessary
    • privacy best practice is to tumble as both taker and maker, and avoid consolidating to close to sum of input amounts especially for large amounts
    • variety of scripts for scheduling tumbling, and sending payments (as taker or maker), as well as running maker role
  • Chaumian CoinJoin
    • WhirlPool - RSA blind signatures, several separate fixed denomination pools with CoinJoins involving 2 fresh inputs (outputs of a tx0) and 3 mixed inputs (outputs of prior coinjoins) producing 5 mixed outputs with the same amount. Fees paid in preparatory tx0 and by slightly larger first generation inputs to CoinJoins. tx0 may produce change
    • Wasabi - Schnorr blind signatures, denomination slowly decreases, CoinJoins take arbitrary inputs and produce denomination and multiplier outputs as well change.

The two Chaumian systems are similar in their basic elements like using blind signatures as a DoS protection for anonymous output registration, and have a similar coordination structure (e.g. registration phases) but are very different in terms of how the interaction proceeds, as well as differences in the mechanism design (fees, incentives) and the resulting transaction graph.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants