I got this idea for anonymously sending bitcoins. Let's say I am A1 and I want to send to B1. Normally the blockchain would show up: A1 --(1 BTC)--> B1. My idea is to have a service where you collect up say 1000 people and make a random permutation so A1 sends to B425 and A2 sends to B213 etc.. that way the only thing you can tell from the blockchain is that A1 sent 1BTC to one of B1,B2,.. 1000 people!
To make it happen might have every transaction go through a central address M, so all the As send 1BTC to M then the bot M randomly distributes the bitcoins (it could also split them into parts and rejoin them). The main thing is a protocol using public and private keys to let people prove if M cheated, call Ms public key KM and A1s public key K1 etc.
So all the Ai's send a encrypted message to M which they sign using Ai containing an address containing the key Ki and Bi.
M then signs using it's PGP key and encrypts using Ki every address Bi and publishes all these to its site in red.. each Ai is then required to send 1BTC as confirmation that M published the correct information and that they have saved it locally, which makes it go green. After they are all green it performs the mix. If some Bi didn't get the bitcoin they can decrypt and publish the message that M posted, proving that M cheated.