Hello Aswan,
This is some great feedback, you've shown you really know your way around the protocol. It's great to get feedback, even if it's showing flaws in the system. I'll address these in the next release. But in the meantime, here's some thoughts:
Thanks! I followed darkcoin closely when it first came out and even tho I don't have a huge stack of DRK, I am more than willing to share my thoughts and ideas about how to improve DRKs features, especially the ones related to anonymity.
Problem #1:
Darksend makes the transaction fees in batches, which usually don't have enough fee inputs to get a user all the way through the process. So at some point during the process the chain usually be broken. However, the issue still remains and darksend needs a fee mixing phase. That should at least be very fast because all of the inputs are one size.
I have read the thread and there have been different suggestions on how to fix this fee problem. I kinda like the one with a miners fee being paid for each round, which then acts as a proof of payment to the masternode.
I imagine this proof proof of payment is a transaction ID which is signed with the address to proof ownership (if it wouldn't be signed everyone could claim it's his).
The problem I see here is that the masternode knows who paid the fee even though this information is not publicly available. A malicious masternode could therefore weaken the mixing process and in the case of it being the masternode of the last round of Darksend, if could even break the anonymizatio. This process is still better than the one with the fee included in the Tx, because it would prevent de-anonymization through blockchain analysis, but the masternode owner could still use the information the same way as in my described problem #1.
The other solution of doing a single round of fee mixing only provides exactly that. A single round of mixing and therefore a single masternode can break the anonymization. It's not an option here.
What I want to suggest is a modified version of my initial suggestion:
There could be an additional denomination size representing the fee. For conformities sake, this could be a 0.01000001 denomination, which is included into the darksend process as usual.
However, instead of it just being mixed, it can be used to pay the fee. So if you have 3 x 0.01000001 denominations, you'd only have 2 left after a round of dark send because the other one has been used as a fee.
As stated above, the chain will eventually have to be broken,but it does not have to happen within 8 rounds. there could be always at least 8x 0.01000001 denominations created when starting darksend. the only downside I see here is that for each transaction, it is known how many rounds are left because of the amount of 0.01000001 denominations. But this it only the combined rounds of all 3 participants and not an anonymity issue imo.
Still this could be prevented by always generating a random amount of 0.01000001 denominations between 8 and 15. That way, there is no way to know how many darksend rounds are to come.
Why up to 15? because then even the last round of darksend can have 7 of those denominations left (8 would overkill since there just was a darksend transaction using one fee, leaving potentially 7 more, which makes 8 and is the max. standard amount of darksend rounds users do).
This way, neither blockchain analysis nor a a malicious last masternode can break anonymity.
the downside would be that darksend transaction would increase in size, but the 0.01000001 denominations should be darksend compliant. One could argue about allowing up to 15 of them per participant or limiting them to 9 per participant (because then the next higher denomination would already be used).
What I can see being disastrous is the 1 day subscription idea with the signed proof of payment. This proof of payment can be just handed around. There could be a wallet which you can always mix for free with because "someone" paid the daily fee and the proof of payment gets distributed to all clients. Also this would enable attacks on the masternode network.
Liquidity providers mix random amounts each round already, so they will make good partners for stopping this type of tracking until #3 is done. E.g. they don't spend the whole previous round as the default client does.
I didn't know they did this but I think it's good practice to do so.
Problem #2:
I think the way it works is a pretty good mix of speed and lack of bloating. If we allowed inputs to be split up in the mixing phase like you say, you could split 100DRK into 10x10, or 10DRK into 10x1, that would cause a lot of bloating. I see this as being a problem with bootstrapping the currency. We just don't have enough active volume of Darksends to really speed up the process. There's really only a few mixes a day, it's went up recently, but it's still not very high. If we were doing hundreds a day, then it should just take an hour to complete.
In the future we actually shouldn't need liquidity providers. At that point we could increase the mixes to 4 or 5, which even makes the anonymity much more robust.
It's true that we probably don't need liquidity providers in the future. It was just a suggestion to get this whole thing started. Because of the few participants right now, a little bigger transactions wouldn't hurt and it would add liquidity.
It's a trade - chain size for liquidity. I just thought DRK could afford this right now and it would help a lot to get things rolling. It could be reverted later on when there is enough liquidity.
Anyway, it was just a thought about a feature, not a bug so no reason to jump on it like theres no alternative
Problem #3:
This is a great idea and I'll implement it in the next version. It should speed up mixing for everyone on the network. By using random amounts each time, we'll match with random denomination mixes, which will match with more users.
Well, it has to be made sure that all the coins are still sufficiently mixed. If one denomination is only mixed once while the others are mixed 5x+, that might be a problem.
Also, there would probably have to be more fees paid since there would be more mixing instances for every participant.
Thats why I said I haven't been able to wrap my head around the transaction fee thing in this case.
Aswan, The community would like to thank you. Got a donation address?
sure,
DRK: XnNazPB1fPS59P9CfEtZWtqcmDttFWNj7A
BTC: 1FGJjQHesURPnLWFEU1R5fZy8PdP7KBkEY
Thanks
+1
Thank you for that excellent analysis...
Thank you