The best part of this proposal is the sheer simplicity. That alone makes it 10x as likely to get into the official client as any other mixing proposal - in my mind.
Simple ubiquitous mixing gets it out of the alleyways, and into the light of day - where no-one need fear participating.
Reducing the denominations to M^n is a great idea too. I would
almost suggest
initially reducing denominations to M^1 alone - to simplify the
initial protocol. Maybe that's going too far, and you'd find fewer participants. Or maybe it's good because it means participants would find partners that would otherwise have been holding-out for M^2, M^3, or M^4. Maybe it would be a good first step to shake things out. I've got in mind Gavin's recent Gist about lessons learned from BIP 16 (
https://gist.github.com/2355445), and how he wants to apply them in BIP 34 (
https://bitcointalksearch.org/topic/bip-34-block-height-in-the-coinbase-92558). Specifically: "Think about laying a solid foundation, and then rolling out changes in stages. Baby steps instead of change-it-all-at-once."
None of these things should occur to users who don't understand them or explicitly opt in to them. They could be briefly explained as benign side effects to a user who checks a checkbox to enhance his anonymity.
And maybe a checkbox to "support" the anonymity of others - by merely relaying these solicitations and transactions. There might be those who find mixing risky - especially while it's new. Those same people, though, might be more than happy to relay the required messages.
And then OP goes and replies to a valid concern:
One of the biggest issues is that once you make a transfer you combine coins from multiple addresses and as a result those can be identified as one wallet.
Reducing the swaps to specific granular amounts helps prevent this by making the units as indistinct as possible.
...
...Then, all of those chunks will be traded with others, one-for-one. By the time each chunk has been traded six or seven times, what's a recipient going to learn to know that for example three chunks of five were combined to make fifteen? Not much of use.
One could perform an analysis on those three chunks to see if they might happen to all share a common possible point of origin on the block chain (an intersection attack), which could identify the original origin. But that could be easily mitigated just by the client occasionally "mixing" same-sized chunks with itself, which is indistinguishable from mixing with others, and which would make the ancestry of each chunk look very "inbred" so to speak, and therefore poorly useful for confidently identifying distinct faraway ancestors.I love it. As Austonst puts it:
if the mixing has been done properly (like in Casascius' last post), there won't be any cases of "Oh, I see from tx1 that someone owns addresses A,B,C and I see from tx2 that someone owns C,D,E. Therefore, the same person owns all 5 addresses."
If fairly common (if not ubiquitous), it sounds like these mixes could start to render "traditional" blockchain analysis obsolete. The heritage of coins that have never participated in such mixing might start to become less clear.
And another thing - the simplicity of this proposal widens the pool of developers willing and able to implement it.
Kudos, Casascius.