secret genuine vote online
I believe it is technically possible. First idea that springs to mind would be the use of a separate server generating one-time credentials from non-falsifiable user data. The separate, tightly regulated server would take user data and return strong random one-time credentials, while storing both the user input data and the delivered credentials in separate, unlinkable databases. There are quite a few requirements for the credential-issuing (auth) server:
-the user data must be at least as strong as physical ID is. Passport number + physical adress + some other kind of verifiable but unrelated ID, like social insurance number or anything that the state would already know but virtually unguessable by a third party.*
-the issued credential must be very strong (100s of random characters will do the trick. Think strong-encryption key)
-the issued one-time credential ("key") MUST be independant from the user data (no "clever" hash allowed, just generate a strong pseudo-random key for each request and compare with the list of previously-issued keys until you get one that you didn't already issue).
-user ID and issued credentials must obviously be stored. (to avoid duplicate connections or duplicate keys)
-But they MUST be stored in separate databases and be ABSOLUTELY impossible to link to each other AND impossible to link to the actual voting process. For this, it is absolutely necessary that ONLY the user ID be stored in the user ID base, and ONLY the issued key be stored in the key base (forget IP, time of connection, ordered database indexes and all that crap). Both databases should be shuffled at random with each new entry, just to make sure**
-connections to and from the key-issuing server must be strongly secure. That problem needs to be discussed, but here is not the place.
-connectivity MUST be assured at all time.***
Requirements from the voting server:
-must have access to the "key" database on the "auth" server to verify the authenticity of the vote.
-must be denied access to anything else.
now for the actual voting process: connect to the "auth" server, enter your credentials, get a one-time key. Connect to the voting server using your key****, enter your choice, disconnect.
Simples
You read it here first, folks.
(come to think of it, if I was a whore I would patent that).
* That's probably the hardest nut to crack. It depends on what info your state already has that a felon can't guess. Of course you don't want to go all big-brothery but you need some kind of data integration to beat the crackers. Tough choice.
** just a half-arsed paranoid attempt. ANY type of possible cross-link between databases should be avoided, including the entry order. I'm no DBA, so that's mainly a wild guess.
*** Second in the "hardest nut" contest. Vote anonymity and verifiability means you won't have a second chance. In the physical space you won't be thrown out of the bureau halfway, on the internet you must not experience random disconnections.
**** The most secure way would probably be using the delivered key with SSL, but that might be out of the reach of non-tech punters. Copy-paste might be acceptable as long as all connections are kept secure. (yeah, I know, but let me believe!).