index
Project · Cryptographic systems research

E-Ring Voting

An open-source, publicly verifiable e-voting protocol built around One-time Traceable Ring Signatures (Scafuro & Zhang, 2021). The cryptography comes from the paper; the ledger, the election state machine, and the economic mechanism that holds the whole thing together are our own.

Type
Research prototype
Role
Co-designer · implementer
With
Niccolò Pagano
Primary reference
Scafuro & Zhang, 2021
Language
Python
License
Open source

Most deployed electronic voting systems — in Brazil, in parts of Europe, in countless private elections — ask the voter to trust a black box. The protocol operator sees the ballots; the voter does not see the tally. We think the trust direction should be reversed: the tally should be reconstructible by anyone, and the operator should see nothing they could leak. E-Ring Voting explores one way to get there.

The problem

An honest e-voting system has to satisfy two properties that pull in opposite directions:

Classical centralized systems achieve secrecy by hiding ballots and verifiability by operator fiat. We wanted both, unconditionally, with no trusted component in the loop.

Approach

The cryptographic core is an implementation of the one-time traceable ring signature scheme of Alessandra Scafuro and Bihan Zhang (2021), building on the ring-signature lineage initiated by Rivest, Shamir and Tauman (ASIACRYPT 2001). The scheme gives us exactly the two properties an e-vote needs:

What the paper gives us — and what it doesn't

Scafuro and Zhang specify a primitive. Building a real voting system around it forced us to design a lot of things they do not: how voters get into the ring in the first place, how an election is started and closed on-chain, how to stop a manager from spamming infinite elections, how results get counted, and how any citizen with a laptop can independently verify the outcome days later.

The prototype is therefore two layers:

The ledger & economic mechanism

We needed a public, append-only bulletin board no single party could rewrite. Rather than depend on an existing chain, we built a minimal proof-of-work ledger with its own unit of account — eVotes — used purely to price writes:

This separation between "fee to the miner" and "forfeit held by the protocol" is the piece we're most interested in extending: it turns election setup into an economic commitment rather than a trust assumption.

Protocol sketch (six phases)

I.

Registration

Eligible voters publish an EC public key, endorsed by a benefactor transaction paying the 1 eVote registration fee on their behalf.

II.

Private collection

Identity verification happens out-of-band; a proof-of-key-ownership is submitted on-chain, binding each ring member to a real person exactly once.

III.

Block reservation

An election manager reserves capacity for the ballot — 5 eVotes per data chunk as a fee, plus a forfeit held in escrow by the protocol.

IV.

Data chunks

Ballot parameters, candidate set, and metadata are pushed during the preparation window — no additional signatures required inside the reservation.

V.

Voting

Each voter emits a ring-signed ballot keyed by the transaction hash of the reservation. The traceability tag makes double-voting publicly detectable.

VI.

Result counting

Every node recomputes the count from public ledger state. Any client, with no special privilege, can reproduce the result bit-for-bit and audit it.

Threat model

Open questions (research direction)

Status: Early-stage research prototype — protocol specification is drafted and the Python reference implementation is under active development. Not production software. The value is the design space exploration, not deployment.

Selected references

Links

→ Source on GitHub