My idea for a voting system is a redundant array of vote counting machines. A front-end system designed to have several black box voting system back-ends plugged into it, and which would be designed and sold by competing companies. The reasoning behind this is that any fraud that occurs in the back end would be immediately detectable from any conflicting results delivered by the companies involved, and creating a healthy system of competition among those companies. This is beneficial for many obvious reasons.
The overall design of the front end should be as simple as possible to help eliminate fraud at the polling place. It would be free-libre whatever form it took, possibly a Mask ROM to eliminate the possibility of tampering. The creation and certification of the front end I am about to describe would necessarily a civil project.
The possible permutations for a Modified Borda Count of a 10 candidate race is P(10, [1-10]) which is:
10! + 10!/9! + 10!/8! + 10!/7! + 10!/6! + 10!/5! + 10!/4! + 10!/3! + 10!/2! + 10!/1! + 10!/0! = 13,492,900
So using that election example as the extreme high end requirement (~13M vote permutations), I
assume that 32 bits (~2 billion states) should be more than enough to describe any possible vote for a single race. (ever in the universe and I stand firmly behind that figure
So the essential parts of the front end would be this:
- An interface to translate the voter choices into one of the 32 bit codes, which would of course need to be defined before hand by an election committee.
- Since you also need a mechanism in place to prevent someone from voting multiple times while they are in the booth, I envision a system using a punch card of some sort in between the front and back ends, and a method devised using a mechanical system to ensure that a vote will only register on a fresh card (or fresh subsection of the card for that vote). Also the cards could be separately audited and verified, and would also provide a paper trail.
- A de-muxer of sorts, which would translate a 32 bit input into several identical 32 bit outputs. And transmit to the black box backends.
And the essential parts of the back-end would be take a series of 32 bit inputs (one for each race), and given a definition of the vote codes, return a vote count. And if your count is screwy it is obvious.
I suppose you could make it so a company has to do nothing but provide an ssh key to their server which could be used to transfer the votes over a network, but I am wary of putting any software on the front end. A firmware ssh client may be a possible option. Perhaps a simple solution would be to put a simple unix on a ROM and attach a touchscreen.
With this system trust would be taken completely out of the hands of any corporations involved, and put it entirely in the citizens and their front end.