What you need is 1 deck of playing cards, 2 plates (optional) and a few voters, perhaps with pen and paper ready.
Choose an issue to vote on, for instance whether you like tea better then coffee or not, something with 2 options. Give both options a different color, for instance if you like tea better, that's red (hearts and diamonds), and if not, that's black (clubs and spades).













That seems to be 4 black votes, and 1 red vote. Coffee
wins 4:1.





*) It helps exposing manipulations of individual votes. The attacked voter can see it, knows it, can complain about it and demand a revote; or depending on the scheme used, can prove his/her vote was altered using the optional per vote password, and get it changed (optional, to be decided on a per voter basis in the current sede implementation).
*) It helps exposing adding false votes. Depending on the scheme used: either there are too many voters though marginal additions might go unnoticed, or there must be actually false names in the "voted voters" list, but that only works if voters register with some identification to be published in a separate list, which is optional.
*) It helps exposing not counted votes. The attacked voter can see it.
*) It helps exposing a manipulative add-up of the votes, even if all votes are correctly published. All voters and non-voters can see this, and add up themselves, even using the same software (sede), downloaded for free.
Compared to traditional voting, the problems have moved from the area of results manipulation, to protecting the anonimity of the votes. Traditional voting has basically no protection on results (recent computer voting takes this to new extremes), but is very strong on anonymity. However, Sede is not a public-vote system at all, like standing on the city square and raising your hands. It is perfectly possible to register voters in an anonymous way, to even prohibit the "card shuffler" (vote administration) from knowing who voted what.
Just organize a traditional paper-ballot vote, but instead of voting for a person or on an issue, the voters give in a voter registration form containing the way they wish to be contacted and optional encryption keys for such communications (any password+file encryption tools can be used). If for instance a voter creates a secret e-mail address, and gives a password for encryption, then the vote administration doesn't know who this voter is while communicating with him/her, and the vote will get over the I'net relatively safely. The program does not have its own encryption tools, but interfaces with other encryption tools (as long as they can be used from the command line). If that voter has a complaint or problem, he/she can contact the vote-administration through paper-mail, identifying him/herself using a registration password. This might also be useful if a communication channel is cracked. Snailmail might be send towards the vote administration containing a registration password which is never in any form accesable from the I'net, and a new registration form.
SEDE provides all the above functionality, in a feature-rich, open source and gratis way, following the rules (I hope) for GNU/Unix programming.
Here the same analogy but closer to the operation of the program:




Tea-coffee question:
A) I like tea better then coffee.
B) I like coffee better then tea.
Vote Tea-coffee: ...
votercode #GmhsQrR1hrVf#
Comments: ...
vote-end
The role of the "playing card" as an identification for any particular vote has been taken over by a "vote code" or "vote key", in this case: "GmhsQrR1hrVf". It is just your identification tag for your vote, and can be configured to be any length. Like that you had been given the ace of clubs C1, and the 2 of hearts H2, which might make out a "vote code" of "C1H2" in numbers/letters. The above voter received "the playing card" "GmhsQrR1hrVf", which is not an encryption key of any kind, just a means to identify and find your vote without having to use your name or things like that.
Tea-coffee question:
A) I like tea better then coffee.
B) I like coffee better then tea.
Vote Tea-coffee: ... A
votercode #GmhsQrR1hrVf#
Comments: ...
vote-end
The role of the "vote red card" or "vote black card" has been taken on by the space between "Vote Tea-coffee:" and "votercode #", the dots. On those dots, you can place your vote. Using dots is just an example, you can configure these elements to your needs, using any language and/or characters you like. The vote can also be anything the voter likes, hence the voter has total freedom to vote whatever he/she wishes to vote, even if the vote administration has not given the option the voter wants to vote.
Example:
What is your favorite drink:
A) Tea
B) Coffee
C) Sweet drinks
D) Milk
E) Juice
Vote Tea-coffee: ...Water
votercode #GmhsQrR1hrVf#
Comments: ... Why can't I choose water ?!
vote-end
Well, you can ! And it will be counted too (see below).
Tea-coffee question:
A) I like tea better then coffee.
B) I like coffee better then tea.
Vote Tea-coffee: ... A
votercode #GmhsQrR1hrVf#
Comments: ..but coffee is nice too.
vote-end
Vote Tea-coffee: A...votercode #GmhsQrR1hrVf#Comments: ...can't stand coffee endofvote Vote Tea-coffee: ...Avotercode #Q08QP1pgSrUb#Comments: ... but coffee is nice too endofvote Vote Tea-coffee: ..B.votercode #8e6ipxLuCQw5#Comments: ... endofvote Vote Tea-coffee: ..Bvotercode #dAJgAkde131A#Comments: ... without coffee I'm dead endofvote Vote Tea-coffee: .B..votercode #yiXkjRu6kmzU#Comments: ... COFFEEEE! endofvote ----- + votes: 5At this point, there is only a tekst interface for voting. But even if a graphical front-end would be created, it would still operate behind the scenes in tekst mode, obviously. If you like to donate a working graphical interface, you are more then welcome.
The add-up: 3 B 2 A ----- + 5
Anonymous voter registration (example):

The "phrases" you see in blue are examples of registration
passwords. These
registration forms are perhaps a little simplified, voters might also
want to give encryption parameters, like what
encryption program and encryption key, perhaps even their preferences in
terms of
what kind of questions they want to be contacted about (Sede features
voter variable ballots).

Note that for the traditional paper vote - to harvest the ballot routing channels -, a name may be asked to register for that initiating process. This does not affect the anonymity later using Sede, because of the scrambling process going on during the paper vote (traditional paper voting is very strong on anonymity, and very weak on results validity).
The other method gives the vote administration the insight in who owns which routing channel. That is a drawback for voters in terms of anonymity, however in return a separate alphabetic list of voting voters can be created (optional). That way, voters can check that there are no false voters voting, without being able to tie any voter to any particular vote (unless there is only one vote). They can also see if voters who said they had voted, are in fact absent from the vote. Voting voters can even be contacted, and asked whether they agree with the presented results. With such a list in the end results, it becomes much harder to manipulate the outcome, but anonymity pays that price (the vote administration can know very easily who voted what).



Still, SEDE can tally different votes together when asked to. That way, votes like "B" and "coffee" can be tallied together, for instance. Both the raw tally of unique votes, and the compacted tally of different votes are published for inspection. So, a vote administration may decide on options A/B/C and D, and make a nice looking result out of it, such that votes like "tree" are excluded, or fall in a category "error" or something like that. Even then, a unique tally will still be made, tallying all votes "tree". When the vote administration decides to remove that result page, then there are still the raw votes, with use of this package it should be easy to generate results yourself (as a voter).
The interface for voters is text based, currently (encrypted) e-mail is best supported. The electronic ballots might also be communicated through SMS (if you have the technology to send files back and forth over such a network). Because ballots can be generated differently for voters, ballots for SMS can look completely different from for instance e-mail ballots, yet still all can be created in one go from the same sources (your programmed ballot template).
Not unimportant: you can debug ballots in a step-wise manner (in 4 different modes), inspecting exactly what is happening when ballots are being generated. Errors messages during ballot generation include the exact location where it occured, and you can then jump exactly to (or near) the problem area and watch what happens in real time. This type of user support also exists for encrypting attachments. That doesn't necessarily make writing complex ballots easy, but at least you can debug effectively.
A potential downside is, that it is perhaps not easy to use its full potential (?), but there are a lot of help commands, and if you start from one of the template-polls it can also be kept very simple. On the upside, only the vote administration has to understand some parts of the program. You can run a basic vote with very limited knowledge. I cannot estimate very well how difficult the program is for others, but there is a lot of documentation, off and online.
Sede consists of access to many different (modular) commands through a common shell-wrapper interface: sede COMMAND. But sede can also run in interactive mode and behave more or less like a shell, in which case the $PATH shell commands are still available. Sede commands can be added to the shell as if they were normal programs through a command (. sede set.path), and sede commands can be piped to sede (echo COMMANDS | sede), and they can be read from a script by sede. Did I forget anything ? ;-). Sede uses a ~/.sederc file for user configuration, with comments explaining each option. SEDE is mostly written in the Zshell (going to be rewritten in C, Sep 2006), but important aspects are written in plain C. SEDE acceses shell tools through configurable variables (/etc/sede), so even if your system has a tool that isn't compatible (things like sed, grep, ed, ls etc), you may point these variables to the working implementation of that tool. SEDE code uses long variable names, long argument names etc, to try to make the code maintainable and easy to update. I've tried to write in an as clear as possible way, thinking about others when writing it. SEDE tries to make it easy to communicate with other tools, and keeps its records in comma delimited lists "in house". SEDE does not use any weird or unusual programs (unless you'd call mutt weird, though you can program your own mail script using hooks available).
Sede is exclusively published under the GNU GPL License.