Mike Frank wrote:
Hello, Thank you for the detailed and thoughtful critique.
On Tue, Oct 7, 2008 at 9:16 AM, Kristofer Munsterhjelm
<[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> wrote:
How would this system work? I guess you could use blind signatures
to submit the actual votes, but how would it ensure the voters that
their votes are counted?
This can done using cryptographic hash functions, for example by adding
votes together in a tree structure, where each node in the tree includes
a hash of the data at the child nodes. The hash guarantees that the
given results could only have been generated by that specific tree of
ballots (in the sense that finding an alternative tree that yields the
same hash is computationally intractable). The root hash in the tree
(summarizing the overall election results) is publicly viewable, and it
is sufficient for a given voter's certificate to concisely show just the
roots of the subtrees that were combined with that specific voter's
ballot data to produce the final result. The specific hashes and
vote-aggregation operations (e.g. addition of tallies) shown in a given
certificate can be checked easily, and if a substantial amount of
miscounting occurs, then many different voters' certificates will reveal
it, so it will be likely to be caught.
I'm not completely sure how that would work. Say that you're a voter x
whose ballot is A > B > C. Now, if you're the only one with the ballot A
> B > C, then you can check that the A > tree has at least one A > B
part. So say that you're not, that there's another voter y who also
voted A > B > C. Even if your (x's) ballot is miscounted, there'll be an
entry for A > B > C. How do you know that your ballot was or wasn't
counted? You don't know about y, so if you see "one person voted A > B >
C", you could easily think that that person was you.
There are two ways to solve this that I can see. Either you could have
an unique ID, or somehow the existence of y will be known to you before
you vote. In the former case, the days of the secret ballot would be
over. In the latter case, I can't quite see how that would work either,
but there might be some cryptographic magic that allows for it. I don't
pretend to understand the AACS subset difference algorithm, for
instance. The cryptographic magic would in any case be limited, since if
y submits his ballot after yours, you can't know about y.
There may be another option, also: have the record of the ballots
themselves be hashes. The idea would be that if you vote A > B > C and
know this (and your ID), then you could look up your {ID, hash} pair and
check against "A > B > C". But so can any other party if there are
sufficiently few candidates, and in any event, you don't know if they're
"using two books" -- calculating the result from a subset of the
ballots, for example.
If you don't care about the secret ballot, you could make all the
ballots public. The election service would be replaced with numerous
"services", checking each other's results. But the secret ballot is
secret for a reason.
I know of some systems to produce proofs for Plurality, but I'm not
sure how they could be turned into proofs for, say, Schulze.
In my system, the proofs are of a very generic nature; they only require
the ability to run a cryptographic hash function on input strings which
contain the aggregated summaries of two disjoint subsets of ballots.
This is most convenient to do if the aggregate results can be concisely
summarized.
Like Condorcet, but not IRV, I assume.
If the system permits ranked or rated votes, you'll also have to
deal with the "fingerprint attack", where a vote-seller asks the
voter to vote in a particular manner, using a rank that with high
probability will be unique.
Well, my system does not itself prevent vote-selling, which can perhaps
be kept under control sufficiently well by ordinary enforcement methods,
since some fraction of parties who are approached for buying or selling
of votes may report the other party to the local law enforcement or
media (or to international election observers). And anyway, politicians
effectively "buy votes" all the time already, whenever they promise
certain classes of voters goodies such as tax rebates and the like, and
the wealthy can already heavily influence the voting anyway, by funding
misleading ad campaigns, e.g., "swift boating."
In some sense, that's true, but I would say that direct vote buying is
much more powerful than indirect vote buying (through advertising,
patronage, etc.). One of the reasons for why that is the case is that
direct vote buying is completely certain: the vote-seller knows if you
did what he wanted, whereas you may resist advertising or cynically
think it's just politician-speak anyway, without any repercussions.
Other possible attacks from the outside could involve coercion (vote
my way while I watch) or bribery (same as above, but with a payment
if you do what I say), and identity confusion (where the person's
computer is zombified so that the ballot cast differs from what the
voter intended).
With my system, if the system corrupts the ballot data, this will become
evident to the voter later, when he checks his certificate, since the
hash for his ballot won't match up with how he knows he voted. If a
voter is uncertain whether he can trust the software that checks the
certificate, he can have it checked by many independent services.
Those whose computers are often infected by malicious software are
probably less likely to check their ballots than people in general.
Also, let's say that a person votes "A > B > C". His computer has been
compromised, so the hacker (or his bot) replaces the vote with "B > A >
C". Time passes, and after the election, the voter checks his
certificate and finds that it's wrong. Now what? How can he prove that
he voted A > B > C? The voting site recorded him as voting B > A > C,
because the compromise was local to his computer. He might have taken a
screenshot, but then he would have needed to know in advance that his
vote might be stolen later. If your method is designed to inform about
fraud rather than prevent it, it might be possible to capture the
modifier software and determine who wrote it, but that's still improbable.
If you want to be sophisticated, you could have a vote retraction
signal (a number or similar) which would nullify your vote if you
send it before the election, and an external device to confirm the
ballot just before you submit it (so that you can see it's what you
actually wanted).
In my system, the second type of device is not needed, since you can go
back and check your ballot later. The idea of vote retraction or more
generally modifying your vote after you've submitted it is an
interesting concept, but it won't work in my system since the
certificate (issued after the election) is based on your final choice,
and so it still could be used to prove to a vote-buyer that you did what
was requested.
Smith and Rivest appear to have an interesting method for preventing
vote-buying, although it may need some additional assurances against
fraud. Right now I am thinking about how to combine it with my system
to get the best of both worlds.
Perhaps this would work: each voter has three voter IDs, one for each
ballot, so that the first is 0 mod 3, the second 1 mod 3, and the third
2 mod 3. The software (or device) turns the voter's choice into one
ballot and two cancelling ballots (that together have no effect), and
they're submitted, encrypted in a way that it's impossible to have the
two other votes not cancel each other out.
After the election, some authority rolls a tetrahedral dice. Call the
result number x. Then all ballots with IDs congruent to x modulo 3 are
published. Voters can now check if their ballots were tampered with, but
there's only 1/3 chance that a vote-buying effort would work.
It's very important that the dice is truly random, so that a potential
fraudster can't just mess with all ballots that don't have ID congruent
to y mod 3, where y is what the dice will turn out later. If you need
security, perhaps a bit commitment scheme could be used to ensure
randomness.
1/3 may still be too high a chance of vote-buying or fraud working. To
decrease the chance of fraud, one could change mod 3 to mod 3 when XORed
with some value that doesn't get revealed until after the election. That
wouldn't reduce the probability of after-the-fact vote buying; for that,
you'd need to make the ballot n-ballot instead of ThreeBallot.
As for that setup, I think that it would be fine for small or
informal elections. For larger scale elections, the security doesn't
suffice unless you find a way of dealing with the attacks from
without (coercion, vote-selling, and impersonation). Even if you
limit access to the site to polling place computers, you get the
problem that the voters may not trust the machines or not know or
care to verify their signatures.
My system doesn't require signatures per se, but it rather uses
standard, publicly-known cryptographic hash functions; any of a number
of independent services can check these. If the voter doesn't trust
the voting machines or central website, he can turn for assurance to
whatever party he trusts the most that is knowledgeable enough to verify
the certificates.
By impersonation, do you mean impersonation of a voter by another party,
or impersonation of the official website by another site?
By impersonation I mean a man-in-the-middle attack between the voter and
the website. The voter provides his information and votes, but another
vote is registered. Similarly, unless the certificate is signed, the man
in the middle also provides a fake certificate to the voter (if the
voter gets those from the same website).
The former can be noticed by the voter by checking of certificates. The
latter requires individual voters to just be careful typing the URL, but
if they catch their mistake before the election is over, they can always
go back and do it over.
How do you deal with a combination of the two?
----
Election-Methods mailing list - see http://electorama.com/em for list info