📜 ⬆️ ⬇️

Electronic voting protocol: my version

Observing elections in different countries, complicated by various scandals around frauds, makes you wonder: why does such an important event, the legitimacy of which is so necessary to protect, use the mechanisms of protection of many centuries ago? This is especially strange, given that the scheme for voting, even if far from ideal, but much better than the current one, can come up with even a person who understands cryptography at the initial level. It just so happened that I attributed myself to such people, so I thought: why not try?

A number of articles on electronic elections ( one , two , three ) have already been published on Habré, but I didn’t find a well-developed protocol that meets the basic requirements. So meet: my version of the protocol of electronic voting.

Disclaimer
The author is not a professional in cryptography and mathematics, so this scheme does not pretend to infallibility or deep elaboration.
The scheme turned out pretty simple, so it is very likely that I invented a bicycle.

System requirements


What do we want to get out? I formulated the following requirements:

  1. The possibility of independent control;
  2. Resistance to fraud by the electoral commission, voters and third parties
  3. Inability to find out how a particular voter voted

Tl; dr: a brief description of the protocol


  1. The voter registers with the electoral commission, providing his personal data, masked voting key and verification key. The Electoral Commission signs a masked voting key;
  2. The voter unmasks it and receives the signed voting key, creates an anonymous vote on its basis and publishes it;
  3. Each vote is selected verification of the number of voters. The owner of the voice sends his personal data to the verifier using his public key. The verifier checks that the voice matches the real person.

Detailed protocol description


In the protocol, I used only 2 cryptographic primitives: asymmetric encryption and a blind signature algorithm . Naturally, encryption and masking operations must be commutative relative to each other.
')
Note: a hash operation when signing will be omitted if required.

List of notation
e- encryption key;
d- decryption key;
m- masking factor;
Ek- encryption with key k;
Dk- decryption by key k;
Mm- masking factor m;
Nm- unmasking by the factor m;

i- information about the person;
c- choice;
K- the contract;
V- voice;
I- information for verification

0. Baseline


Voter:


epersonal- encryption key (closed) of the personal electronic signature of the voter;
evote, dvotes- encryption and decryption keys. Created by the voter for a specific vote;
m- masking factor. Created by the voter for a specific vote;
echeck, dcheck- a pair of keys for the verification phase. Created by the voter for a specific vote.

Public repository of personal data:


The following information is stored for each citizen:
i- information about the voter : name, year of birth, address registration, etc .; dpersonal- public key of personal EDS;
Ee LargeState(i+dpersonal))- state signature certifying the accuracy of the data.

Also stored in the repository:
dstate- public key of the state;
delectoralcommittee- the public key of the electoral commission.

State:


estate- private key of the state.

Electoral Commission:


eelectoralcommittee- private key electoral committee.

Note: I used the assumption that at the moment of the start of voting the information in the repository is correct: the EDS key corresponds to each person one-to-one, there are no “dead souls” there. I will not consider the mechanisms for verifying this information: it seems to me that they should be administrative rather than mathematical. Also, information is assumed to be unchanged during the entire voting.

1. Registration


Each voter presents his data to the electoral commission. He checks that the voter is not registered yet and has the right to vote. After verification, the commission together with the voter creates what I will further call a contract .

The contract contains the following data:
i- voter identification data
Mm(dvote)- the decryption key for voting disguised by a secret voter multiplier
Mm(echeck)- the encryption key disguised by the secret multiplier of the voter to verify
Ee LargeElectionCommission(Mm(dvote))- the decryption key for voting disguised by a secret voter multiplier, signed by the electoral commission

K1=i+Mm(dvoting)+Mm(echecking)+Ee  LargeElectoralCommission(Mm(dvoting))


This information is signed by both the electoral commission and the voter:

K=K1+Ee LargePrivate(K1)+Ee LargeElectionCommission(K1)

All contracts are published by the electoral commission.

At this stage, the following attacks are prevented:


2. Voting


The voter unmasks the signed voting key:

N_m (E_ {e_ {electoral commission}} (M_m (d_ {vote}))) = E_ {_ {{\ Large Electoral Commission}} (d_ {vote})



And it creates a voice not connected with his personality:

V=dvotes+Ee LargeElectoralCommission(dvotes)+echeck+s+Ee LargeVoting(c)


Where c- the choice of the candidate.

Voter anonymously sends a vote to the electoral commission. Election Commission publishes it in open access and returns as evidence of admission Ee LargeElectionCommission(V).

3. Verification


Unfortunately, at the last stage, the electoral commission could create as many votes as they did, not associated with real personalities, so checking every vote is necessary. Who is to entrust the check? I believe that it is best to refer to the principles of demarchy and entrust verification to a random voter. You can come up with an infinite number of distribution schemes for checking-verifying on a set of voices, but the following seems to me optimal: divide the set into pairs and designate them to check for each other. Thus, the verifier who divulges information can be held accountable by the verifier. Whichever scheme is used, the algorithm for its formation must be published before the start of registration, and depend on a key unknown before the end of registration. For example, a key can be generated from exchange rates, or publicly and jointly by candidates (for example, with the help of a lotto machine). If you ignore this condition, the electoral commission will be able to find and add to the list such a large number of fake voices that all or most of them will be checking for each other.

So, the key is generated and published. Now every voter must find his verifier, get his public verification key from the vote base. echeckgenerate verification information

I=V+Ee Largecheck verifier(i+m+Ee Largepersonal(i+m))


and anonymously send her to the electoral commission. Election Commission publishes it in the public domain and returns as evidence of admission. Ee LargeElectionCommission(I).

Inspector finds Ichecked in the database Vdecrypts Ee Largecheck(i+m+Ee Largepersonal(i+m))using your dcheck, via munmasks Mm(dvote)and Mm(echeck)and checks that:


The following attacks are prevented:


results


Protocol flaws:


It is also possible that the verification phase can be simplified and made more anonymous, using evidence with zero disclosure . Unfortunately, I do not know how to do it yet and whether it is possible.

If you know, write in the comments. Also write if you know how to improve the protocol, find an error or vulnerability, and other constructive criticism.

Source: https://habr.com/ru/post/335398/


All Articles