Aswan,
[Edit: This is not going to work as presented.... but maybe it will spark an idea with someone else that can improve it.]
Coming back with a second idea... (not "Jar Mix")
First I need to be clear that I understand this correctly:
There is some exposure from a single malicious masternode (as the system exists today) at the point of a private purchase if that specific masternode happens to be the one receiving the transaction. Is that right? What is the exposure? Is it just the IP address of the person making the transaction request? Is there any other identifying characteristics? (Of course I realize the blockchain in/out address, but the whole world is able to see that.)
Assuming above is correct, then the malicious masternode (using Jar Mix) is able to link 2 completely separate transactions because the user is asking to consolidate them to a single address. This lets a malicious masternode "know and remember" both that the two (output) addresses are linked and where the funds were directed to (input). Other masternodes on the network may see the result to the mix, but only that one MN knows exactly how things were shuffled.
OK, assuming I have no inaccuracies above, I am presenting a new idea here (new for me):
Unlike the "Jar Mix" idea, this one requires quite a bit of change in how the Masternodes operate. (That's a negative to this idea.)
Also, let's assume that DSD is "fixed" to use whole numbers.
- The key here is: All Masternodes only return whole number change on the first step. For example a purchase of 7.25 is made with a 10 DRK address. The buyer receives 2 DRK back in that same transaction while the seller receives the whole 7.25. (0.75 DRK stays with the Masternode for now.)
- (The 2.0 DRK change is perfectly safe for remixing by the user.)
- The 0.75 held by the Masternode goes into one(1) of five(5) addresses held by the Masternode. These addresses should rotate new ones in and abandon old ones.
- The Masternode waits 1, 2, or 3 blocks and then sends 0.75 from any of the 5 addresses to a user address (separate and unused address) through another masternode.
Of course this Masternode is aware of the complete transaction (Outputs and Inputs), but it is only a single transaction (not 2 linked together) and the rest of the network is not able to detect this as "returned change".
- I see a weakness here that exposes "strange change" (ie 0.12345 DRK). This would be easy to spot later in the blockchain.
- Could the MN break the change into pieces and send it from 2 separate addresses?
- A masternode would be able to shutdown and "keep the change", but it would always be less than 1 DRK that the user would lose. The user would get the bulk of the change (ie whole numbers) in the same transaction, so losses would not be too great. Would it be worthwhile for malicious nodes to startup, steal change, shut down, restart with new ID... etc?