I am reading about a voting protocol using public key encryption.
According to the notes, if A votes va, then A broadcasts Ra(Rb(Rc(Ea(Eb(Ec(va)))))). Here, Ra is a random encoding function which adds a random string to a message before encrypting it with A's public key and Ea is a public key encryption with A's public key.
So, if there are a group of voters, each voter engages in a process of signing and decrypting and rebroadcasting one level of every message/vote. By the end of the protocol, each voter has a complete signed audit trail and is ensured of the validity of the vote.
Then, you can do two rounds of processing. In the first round, voters can check that their vote has been counted by doing this:
In the second round, voters can discover the actual votes by doing this:
However, I am still quite confused about the entire mechanism. For example, why is there a need to use the random encoding function? How do you decode it when a random string has been added? Where is the vote counting happening? I would like to read up more on this, but I can't even find the corresponding terms to search for. If you could help to explain/point me to some relevant resources it would be very much appreciated!