FWIW I'll try implementing a "coin dust" collector this weekend that just does makes SIGHASH_NONE|ANYONECANPAY signatures for the dust in your wallet and sends them to a central collection point.
That basically sends the dust to anyone who wants it? How does that help?
People appear to have been sending very large numbers of addresses dust as a way to break anonymity. Granted, they also may have been doing it as a way to get signatures from scriptPubKeys due to the 'R' re-use issue, but the script would use bitcoind to spend the dust which is known to not be vulnerable.
Also there's lots of pretty much unspendable dust out there from Satoshidice and others, and again such a script can help.
3) Add mix protocol
2.1) Define "I want these txouts" and "I'll sign for these txouts" messages.
Since everyone has to pay for the service, if it fails, everyone loses. However, the DOS attacker loses faster?
The "currency" for paying for message relay is effectively coin-age?
No, it's fees paid by previous transactions.
Now that does raise the question of where do those fees come from if you haven't made a transaction in awhile? One decent option is in fact to spend coin-age by signing to a txout that you don't actually intend to spend, however that's open to DoS attack by entities that simply have a lot of Bitcoins. Fidelity bonds are another option.
As an aside, the actual process of spending credit should include a field for the current balance of credit prior to that spend, and the hash of the previous time this credit was used to make double-spending credit not possible. This is particularly important with the coin-age or fidelity bond version, because there it's quite possible for nodes to securely give their peers the current status of the credit balance based on smallest balance left.
The transaction would be flooded in stages, everyone gets version 1 then version 2 then version 3 and so on.
Eventually someone signs and that ends the mixing.
Signing the transaction early also acts as a DOS attack.
I'm actually thinking that mixes should have a small number of participants, usually two or three. Remember that we want the process of creating a tx to be as fast as possible, and multiple rounds of mixes wind up with just as much anonymity as fewer rounds with more participants in each round.
The economics of the DoS attack are such that the attacker wastes only a small integer multiple less fees than the target(s), and the targets are already spending the fees anyway. IE the defenders already have the resource, fee paying transactions, that the attacker has to buy specifically to launch the attack.
There would also be a requirement that "cleaned" coins have standard sizes. You pay for something and you get 2 change payments, a cleaned standard value coin and the remainder.
Standard sizes do not have to be a requirement actually. Suppose Alice has 2BTC and wants to send 1.5BTC to Bob: she can announce that she wants a 1.5BTC txout with Bob's scriptPubKey, and a 0.5BTC txout to a change address and broadcast that. Now suppose Charlie has 0.75BTC and simply wants to mix some of it, but doesn't really care how much. He can note that Alice has a 0.5BTC txout, and broadcast a request to make a transaction with her txouts, as well as a 0.5BTC txout to one of his addresses, and a 0.25BTC txout to a change address of his.
When the final transaction gets mined there are two 0.5BTC txouts - but who's are they?
Even in the general case where you have an Alice and a Bob who both want to send money it's often hard to figure out whose inputs and outputs are whose. Do the txouts belong to the same person, and they were just paying multiple people? Which of the multiple txins was actually owned by who?
It's easy to make the task of following the transaction graph very difficult without trying provided a lot of people are combining their transactions.