Lets break this down to improve clarity:
A wants to send 2 coins to E
B wants to send 3 coins to F
A sends the masternode 10 coins, and address C (C is the change address)
B sends the masternode 10 coins, and address D (D is the change address)
The masternode will mix the coins and output:
2 coins to E
8 coins to C
3 coins to F
7 coins to D
It will be impossible to tell whether A sent coins to E&C or F&D. It is possible however to say that whoever holds address C sent 2 coins to E. Now if user A wants to buy something on amazon with DRK, and uses the coins at address C, amazon (or anyone who has compromised amazon's servers) can determine with 100% certainty that user A sent 2 coins to E in the earlier darksend transaction. If the coins are darksent to amazon then there wouldn't be a problem I guess. Really the coins at address C should be automatically washed after the transaction to maintain anonymity in case the user non-darksends them later on.
Still not seeing any provable link between amount of change received by C and initial transaction between A and E. At least not without full access to the wallet that holds A and C, at which point all else is moot. Must be going blonde...
2+8=10 This proves that whoever holds coins at C darksent 2 coins to E.
No, 2+8=10 proves 2+8=10. Doesn't prove anything else at all.
You guys are giving him too much information and confusazing him... try it like this..
From the blockchain, you see this
A put in 10 drk
B put in 10 drk
C took out 8 drk
D took out 7 drk
E took out 2 drk
F took out 3 drk
At this point, you know that A and B both sent either 2, 3, 7 or 8 to C, D, E, or F. There's not enough information.
Later on, A sends out 500 coins, which the client sends 492 coins from wallet A and 8 coins from wallet C.
Someone now sees that wallet A and C belong to the same person. So going back the original transaction, they can see A put in 10, but received 8 back, then that means A sent 2 coins to B.
Futher, this reveals B send either 3 dark to F or 7 drk to D.
Presuming nothing is changed, it's easy to write up an algorithm that can go through and reveal all transactions given enough transactions.
However, there are ways to stop this.
1. The more transactions that are the same, the better. So if it was limited to integers, then that'd be easy. If in the original equation, X also send 2 to Y. Then tying C to A would still not tie A to E just yet. There would be one more level of obfuscation. On the other hand, sending in very precise units (3.14159265359) would be bad for trivial reasons.
2. Masternodes could broadcast a certain of transactions along with other fake transactions. Then anonhelper nodes could then send themselves transactions of the same amount to help obfuscate the real transactions and add more fake transactions.
Basically, more precise transactions and less transactions means it will be easier to reveal. Less precise transactions and same payment transactions bundled together mean plausible deniability is maintained.