I want make to a untraceable voting system that would allow registered users to vote on some sensitive issue in a way, that would make it impossible to track votes back to users in a case of database compromise (including being "compromised" by overly curious DB admin).
Detailed setup:
- Every user is registered, there's no completely anonymous voting.
- Sockpuppets, fake accounts, and the like are out-of-scope of this question - this is responsibility of registration system.
- Every registred user can only cast one vote (which may be anything: simple yes/no or weight or whatever).
- User must be able to change/delete his vote until voting is closed.
- It is not necessary to let user view its own vote, though it can be done in same way that deleting/changing is done.
- Even if somebody have access to user auth database and voting database, they must not be able to track each vote back to user (in a sense that it must not be easier that bruteforce or otherwise hack entire user account's access).
- All parts of system except communications are open, so there can't be hidden keys. MitM attack is out-of-scope of question, but attacker have full access to sources, auth and voting database.
- Users are lazy. They will not want any other voting-specific key or password. System must not require user to provide or keep locally anything except the usual login/password/key whatever they already use to login.
- Tampering of votes and any security issues except program<->DB communication and untraceability are much wider issue and so are out-of-scope of this question too.
I have some solutions in mind which I post as my own answer after grace period.