Anyone can check the count

This demo follows one polling-station result from the paper sheet to your screen. It shows how every phone in the room can catch a figure changed on the way.

The problem

On election night, a result can change after the count. A figure is typed again, a database is edited, a file is replaced. Today, nobody can prove it. The party sees one number, the published page shows another, and it is one word against another.

The story of one result

Awa is a polling agent at Serekunda 12. The candidates A, B and C are fictional.

  1. Count

    Awa and the observers count the ballots: A 312, B 241, C 19. She signs the paper result sheet.

  2. Seal

    She types the three figures in the agent app and takes a photo of the sheet. Her phone seals the figures and the photo with its own key. No network is needed. In a real deployment, that key is locked in the phone's secure chip; in this demo, the agent app is a web page.

    The agent app with the network off: the sheet A 312, B 241, C 19 is sealed and waits for the network.
  3. Send

    When the network comes back, the phone sends the sealed sheet. If anyone changes a figure on the way, the seal no longer matches.

  4. Confirm

    A second agent at the same station sends the same figures. Two sheets agree, so the station result is confirmed.

  5. Publish

    The results page shows Serekunda 12 with 312, 241 and 19, and the photo of the sheet. Every sealed sheet also goes into a public log, a record that can only grow.

    The results page during the count: national totals and the regions.
  6. Check

    Every phone in the room opens the verifier. It downloads the sealed sheets and adds them up again, on the phone itself. It does not ask the server for the total. When its figures match the sealed sheets, it turns green.

    The verifier in green: these figures match the signed sheets, with Serekunda 12 at 312, 241 and 19.

The path of one result

Diagram: the paper sheet goes to Awa's phone, which seals it; the sealed sheet goes into the public log; an independent witness checks and signs each new state of the log; two time-stamp authorities record when each signed state existed; your phone reads it all and adds up the sheets again.
Each step adds a proof the next one can check. Your phone checks them all.

What if someone cheats?

The demo plays two attacks live, the way an insider could.

Attack 1: someone edits the results database

We change B at Serekunda 12 from 241 to 290 in the database behind the results page. The page now shows 290. At its next check, every verifier turns red and names the station: Serekunda 12. The sealed sheet still says 241.

The verifier in red after attack 1: Serekunda 12, the results page differs from the signed sheets.

Attack 2: someone rewrites the history

Next, we rewrite the public log itself so that it says 290. Each new state of the log needs the signature of an independent witness, a second server that keeps a copy of everything it signed. The witness sees that the history changed and refuses. Without its signature, every verifier turns red.

At the end, the evidence page puts the two side by side: the sheet Awa sealed, with 241, and the forged entry, with 290.

The attack console: the witness refused the rewritten history.
The verifier in red after attack 2: the checkpoint lacks the independent witness's signature.
The evidence page: the sheet Awa sealed with 241 beside the forged entry with 290.

These are the addresses in use during the call.

What this demo is and is not

A demo is honest about its limits. These are the ones an expert can name.