METIS Italia METIS Italia

How we keep your vote secret

When you confirm your vote the system writes two different things, in two different tables, that share no field.

Voter register

  • First and last name
  • Email (encrypted)
  • Invitation date
  • "Voted": day only

Does not contain: your choices

≠

Ballot box

  • Random ballot key
  • The choices
  • The day
  • Receipt fingerprint

Does not contain: name, email, time, any reference to the voter

Blind signature: the link is impossible, not just "not stored"

  1. Your browser creates a random token and "masks" it with a number only it knows.
  2. First request, with your personal link: the server checks that you are entitled to vote, marks "voted" and signs the masked token without being able to see it.
  3. The browser removes the mask: it now holds a signed token the server has never seen in clear.
  4. Second request, a few seconds later and without any data identifying you: the browser submits the ballot with the signed token. The server accepts the ballot because the signature is valid, but cannot know whose it is.
  5. Each token is valid for one ballot only. The code that masks the token runs in your browser and is public (js/AN05_blind.js): anyone with technical skills can check it.

What we do not store

What you can check yourself

  1. Right after voting you see the two records just stored, read back from the database: no choices next to your name, no name on the ballot.
  2. With the receipt code you check, on the results page, that your ballot is in the box and was counted.
  3. When voting closes the ballot box is public (without names): you can recount every ballot with one click and compare with the results.
  4. The system compares the totals with the ballots and with an encrypted copy of the counters and flags any difference.

Limits, stated plainly

With the blind signature the link is impossible even for whoever runs the server, because the server never sees the token next to your name. Two indirect traces remain, reduced but not eliminated: the internet address the requests come from (we do not store it in our tables, but the hosting provider's technical logs keep it) and how close in time the two requests are, softened by the random wait before submission.

In elections without blind signature the separation between name and choices holds for the stored data: nobody, not even the organiser, can rebuild it afterwards. Whoever technically runs the server, watching the system live exactly while you vote, would in theory have more options.

For the same reason the ballot box is not published if there are fewer than 5 ballots: with very few voters the combinations of choices could reveal who voted for what.

Try it yourself

Vote in a practice election in less than 30 seconds, with no account, or check a receipt.

Try voting Check a receipt