Check ballot secrecy yourself | METIS Italia Skip to content

Voting security

Check it yourself

We do not ask you to trust us. Here is what you can check yourself, or have a technician check, to be sure the system does not and cannot know how you voted.

The voting core

Ballot secrecy depends on 5 files only. Their fingerprints (SHA-256) are calculated now, on the files the server is using. If even one character changes, the fingerprint changes completely.

Version 1.1 of 09/11/2026 Independent assessment in progress: the version is published but not yet verified by an outside party. Voter first and last name encrypted with the election key: the "About you" box decrypts them before showing them. Blind signature, ballot box and receipt unchanged.
FileSHA-256 fingerprint
js/AN05_blind.js8ecfe8d8b1d51c1aaba7b1021baa9a360bda79e4c8df58161d82e648318dab26
js/AN05_voto.jsbe40074f8abe90e0fe86334a5a5a77fd0dbd4b0527f8bc45f9d52cd65016b370
AN05_voto_firma.php7ff0bd7c0bba21594360530605e40906b8c0cc3f633e8b675f449ffd30ae2650
AN05_voto_urna.phpa4e98db625c2aa44c78b3f8dae273ec08e96ecaa635a419fe78c3ddedc876531
includes/AN05_blind.phpf8350ed80e3e1f10017c7f027235dabb79681ff14f02d4c7893c54c10dc04679
Core fingerprint2c002f34578595611a3fa2339eed4dc61fe71b369307630917c5bd8f7b077c51

Obtained with: sha256sum js/AN05_blind.js js/AN05_voto.js AN05_voto_firma.php AN05_voto_urna.php includes/AN05_blind.php | sha256sum

Public register of versions (outside our site)

A website can lie about its own fingerprints: that is why the same list is also published in an external archive and in the assessment. Compare the fingerprints above with the register.

https://github.com/marcoterzolo/metisitalia-nucleo-voto

The file in your browser

The work that protects secrecy (putting the "mask" on your vote) is done by your browser, with two files you can download and check.

  1. Open these two addresses and save the files (right click, "Save as"): https://www.metisitalia.it/js/AN05_blind.js and https://www.metisitalia.it/js/AN05_voto.js.
  2. Calculate the fingerprint of each file. Windows: open Command Prompt and type certutil -hashfile AN05_blind.js SHA256 . Mac: Terminal, shasum -a 256 AN05_blind.js . Linux: sha256sum AN05_blind.js .
  3. Compare the result with the fingerprint on the same row above and with the public register. They must be identical.
  4. While voting you can do it again from the ballot: developer tools (F12), "Sources" or "Network" tab, the same two files.

What leaves your browser

Open the ballot, press F12, choose the "Network" tab and vote. You will see two requests to the server, a few seconds apart.

1. AN05_voto_firma.php

It contains your personal link and a long unreadable number (the sealed envelope). Your choices are NOT there. The server signs the number without being able to read it.

2. AN05_voto_urna.php

It contains the choices, the token and the signature. It does NOT contain your link or cookies (check the "Cookie" header: it is missing). It leaves after a random 5-20 second wait, so it cannot be matched with the first one.

There is nothing in common between the two requests that the server could link: the number in the first one is "masked" with a value that stays only in your browser.

How the ballot box is built

These are the real columns of the two tables where ballots end up, read now from the database (structure only, no data). There is no column with name, email, link, time or IP address.

op11_schede
ColumnTypeWhat it is for
op11_idchar(32)random key of the ballot (not a sequence number: the order reveals nothing)
op11_an05_idbigintelection
op11_ricevuta_hashchar(64)fingerprint of the receipt code (for verification)
op11_sceltevarchar(500)the choices
op11_datadateonly the day, no time
op12_gettoni_spesi
ColumnTypeWhat it is for
op12_hashchar(64)fingerprint of the used token (prevents voting twice)
op12_an05_idintelection

The same key for everyone

A possible trick would be to give each voter a different key, to recognise them from the signature. To rule it out, with the receipt your browser calculates the fingerprint of the key it really used. The same fingerprint is printed on the results page and in the report: if everyone sees the same one, nobody received a "personal" key.

What we cannot prove

  • The web server (Aruba) records the IP address and time of every request, like every website. The random wait and the anonymous request make it very hard to link the two requests, but with very few voters and access to those logs it is not impossible in theory.
  • The fingerprints of the PHP files can only be checked by someone with access to the server: that is why the external register and the independent assessment are needed.
  • Elections created before the blind signature still use the old voting system: this page applies to those with the blind signature (all new ones).

Full explanation of the blind signature

For assessors

If you need to certify the system for a client, we can give you: the core code (also in the public register), the protocol description, the list of tests already done and how to repeat them, a test environment and the full database structure (without data). Write to us from the Contact page.

Contact us