Coinjoin and coinshuffle creates an anonymous transaction. But how are they different? And which services implemented these features?
CoinJoin is the core idea underlying CoinShuffle (and other mixing techniques).
The idea behind CoinJoin: "When you want to make a payment, find someone else who also wants to make a payment and make a joint payment together". This leaves out two major details:
- How two (or more) participants who want to make a payment find each other?
- How is the joint transaction composed and submitted to the network?
This leaves much room for different approaches and implementations. There's more info about some of them here.
CoinShuffle only addresses the second question. When you think about this problem for a moment, the obvious solutions which come to mind involve a centralized entity to compose: either a 3rd party, or one of the participants. It isn't immediately clear how this can be done in a decentralized manner, which also protects their privacy.
CoinShuffle describes an elegant decentralized protocol for constructuring the joint transaction in such a way that no privacy is compromised: there is no "centralized coordinator", and even the participants cannot link inputs to outputs (except for their own input and output, of course, which they chose). Of course, this unlinkability feature only makes sense if there are more than two participants. The protocol is elegant and simple, and is described here.
Also, I don't think it is accurate to say they "create an anonymous transaction". It is more accurate to say they create a joint transaction in which it is either hard or impossible (depending on the method used and some implementation details) to link inputs to outputs, thus (among other things) improving users' unlinkability and making taint analysis harder.