-
Notifications
You must be signed in to change notification settings - Fork 14
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
When coinswapping, use coinjoin via Pay-to-EndPoint (P2EP) #52
Comments
This feels like a nice combination of ideas. As has been discussed here at length, amount correlation is a big fly in the ointment of a simple coinswap design. This would work against that part. I see a possible "attack", basically in that the two transactions would share a specific property: they'd both be intersections of wallet cluster "Alice" and wallet cluster "Carol" (to use the nomenclature of this repo), and that specific pattern wouldn't appear in any other transaction. That's very debatable though and you can work with it. It's already a big step up by making the amount correlation either impossible or highly ambiguous (generally I think the former). |
So probably almost all the Alices and Carols would end up in the same cluster. That could be used as an attack, because all coinswap participants would share one cluster. So that could be used to figure out whether a transaction is a coinswap or not (assuming nobody else uses P2EP). That could reduce the anonymity set a fair amount. Although it's definitely better than the previous situation where each Alice and Carol are in their own cluster. Another way to break clustering aside from coinjoin/p2ep is taking care to not reveal the change address (via a number of methods), or even not have a change address at all. |
It seems to me, that the protocol would require a different script, and would require more intercommunications. Suppose we restrict, such that Carol always requires P2EP coinjoin on TX0 creation, but Alice cannot propose to P2EP from Carol. Then the protocol (augmented with my proposals in #53 ) would proceed as follows:
Now, for the purpose of P2EP, Carol should keep two separate pools of UTXOs. The rule Carol follows, is that when selecting UTXOs for TX1, it should only get from one pool. Then it offers any UTXO from the other pool in the P2EP. When claiming TX0 (i.e. when Carol creates TX4) Carol should assign it to the same pool it got the P2EP input from, since those will be associated together due to the P2EP. |
One issue with coinswaps is that the common-input-ownership heuristic is not broken. So an adversary could cluster together all the addresses belonging to one coinswap server, which would obviously be bad (indeed one way of breaking traditional 2013-era mixers is to use walletexplorer.com and just see the money coming in and out).
Many people have thought about combining coinjoin with coinswap for this reason. But a downside is that coinjoins are usually quite obvious on the blockchain, especially in Joinmarket. That would heavily damage the deniability and fungibility property of coinswaps where coinswap transactions can look just like any other bitcoin transaction.
Instead of Joinmarket, Pay-to-EndPoint (https://blockstream.com/2018/08/08/improving-privacy-using-pay-to-endpoint.html) could be a very good fit for coinswap. The transactions are not obviously coinjoins, and there is already a client-server customer-merchant relationship that P2EP requires, and there is already lots of interaction so using P2EP doesn't make that much worse.
If every single coinswap use P2EP then that would also be bad because it would imply that transactions with only one input are definitely not coinswaps. So probably the best way of doing things would be that about 60% of coinswaps use P2EP while the other 40% don't.
The text was updated successfully, but these errors were encountered: