Voters cast their ballots at polling locations, which consist of multiple devices connected on a local network. The types of devices and their functions can vary based on the details of the election system, but the ElectionGuard system relies on a voting process in which voters first create ballots that contain their preferences, and then can choose to cast or spoil those ballots.
To that end, we provide encrypter
s to
encrypt ballots, and coordinators
, which
track which ballots have been created, cast, and spoiled. In a system
with many ballot marking devices and a single ballot box, you can
think of the encrypters as running on the same machine as the ballot
marking devices, and the coordinator as running on the same machine as
the ballot box.
At the beginning of the election, each encrypter
must be initialized with the joint key
that was produced at the end of the key ceremony,
so that the ballots can be encrypted with it. In addition, each
encrypter
is initialized with a
unique identifier
that must be unique within a single
polling location.
The process for casting a ballot is:
encrypted ballot
, containing
all of the selection informationballot tracker
, which will be kept by
the voter and used to identify their vote in the list of
encrypted ballots that are included in the final tallyballot identifier
, which is used to
uniquely identify a ballot in a voting place for the duration of
its liveness. This identifier should not contain any information
about the voter; its purpose is to allow the physical piece of
paper used to cast or spoil a ballot to refer to a specific
ballot without having to encode all of the ballot’s contents[1] | Voting_Encrypter_encrypt_ballot() |
ballot tracker
ballot identifier
, perhaps
attached to the unencrypted contents of the voter’s ballot so
that they can review their choices before casting their ballot.
Ideally the \(ballot identifier <ballot_identifier>\) should be
encoded transparently to the voter so they can see that no
personal information is being associated with their ballot.encrypted ballot
along with
the ballot identifier is registered with the coordinator so that it
knows which ballot the identifier refers to. [2][2] | Voting_Coordinator_register_ballot() |
[3] | Voting_Coordinator_cast_ballot() |
[4] | Voting_Coordinator_spoil_ballot() |
After voting is over, the coordinator exports the voting record to be transported to the trustees and decrypted. [5]
[5] | Voting_Coordinator_export_ballots() |