3) Encrypted voting choices to be anonymously exchanged by voters (with signature checks of these voting choices to ensure their validity).
Okay - have had an idea about how to do this step (which I guess it perhaps quite similar to what bitcoin anonymizers do).
Lets say we have three voters (voter_1, voter_2 and voter_3). Each voter will send at least two votes - one of them is a real vote (from a privately issued address) and the other is a dummy vote (from another privately issued address). The order of sending these votes will be randomly chosen.
Later voters will likely have received votes before they are going to cast their own so to mix things up these voters randomly decide when sending votes out to either send their own (real or dummy) vote or forward the others.
The following is an illustration of what might occur:
voter_1 ==> sends encrypted vote (xxx) to voter_2
voter_1 ==> sends encrypted dummy vote to voter_3
voter_2 ==> sends encrypted dummy vote to voter_1
voter_2 ==> sends encrypted vote (yyy) to voter_3
voter_2 ==> sends encrypted vote (xxx) to voter_3
voter_3 ==> sends encrypted vote (yyy) to voter_1
voter_3 ==> sends encrypted vote (zzz) to voter_1
voter_3 ==> sends encrypted vote (xxx) to xxx
voter_3 ==> sends encrypted dummy vote to dummy
voter_1 ==> sends encrypted dummy vote to voter_3
voter_1 ==> sends encrypted vote (zzz) to voter_2
voter_1 ==> sends encrypted vote (yyy) to yyy
voter_2 ==> sends encrypted vote (zzz) to zzz
voter_3 ==> sends encrypted dummy vote to dummy
So finally votes for xxx, yyy and zzz arrive but knowing who actually sent them (hopefully unless I've screwed up) should be impossible.
Correct?
Cheers,
Ian.