An open source voting system written in Rust. Unless a system is open it can never be truly secure. Obfuscation is useless as a security measure. This Open source repository will house all code and schematics so that many universities and companies can contribute code to the repository. The code will always be free. The hope is that worldwide, we can expect in future generations to have free, fair and legal elections.
Object diagrams, state diagrams and flow diagrams will be uploaded a separate documents.
The goal of any trusted voting system is five(5) fold.
- That the citizenry is assured that every legal voter can cast a ballot.
- That the citizenry is assured that only legal voters cast ballots.
- That the voter is assured that their ballot is always counted.
- That the voter is assured that their ballot is secret.
- That any ballot is only counted one time.
If these five(5) hold, the rest will take care of itself. *** A software system can only insure the final three. Therefore the goal of the VeriVote system is to
- Assure that each ballot is counted.
- Assure that each ballot is secret.
- Assure that each ballot is counted only once.
New Process IUIS: To do this, we will employ an additional new technology. IUIS is an individual unique identifier system. Each ballot will include an open space for a random hand drawing by the voter. It can be any shape, any consistency as long as it include no less than 85% whitespace, and is not the voter's signature. An imaging system will be located on top of every ballot collection box. Machine learning algorithms will be employed to render the shape into a score. Any two ballots that have equal scores will be flagged for hand examination to ensure that the same ballot was never run through a machine twice.
Embedded system
- Image each ballot and if absentee, the envelope separately,
- No timestamps are used but rather GUIDs so that video of voters cannot be tied to individual ballots or that envelopes can be linked to ballots directly,
- Record each ballot,
- Collect each vote cast,
- Uses an IUIS individual unique identifier system (non-signature)
- Prints a day end report
- Connects to central system uploads day end report only when vote system is closed.
- Uses the unique identifier system to verify each ballot was scanned only once
- Manages states for each stage of the vote day.
- Manages the terminus of ballots.
- Once attached to a ballot box, cannot be removed without error until EOD (End of Day) is complete.
Central System
- Tabulates all the collected votes
- Requires a user to enter the day end report that was printed with a unique identifier
- Uses ML to compare the unique identifiers across all ballots to verify that each ballot was counted only once.
- Allows recount entry and verification of unique identification system manually.
No incoming access to the ballot box system through TCP or Serial. The ballot box system can connect outboud to a central collection system through TCP after it has been moved to EOD (End of Day). After a successful transfer then it can be places back in BOD (Begin of Day) to start over.
BALLOT BOX STATE PROCESS
- Turning the System on will allow it to stay in the current mode or move to BEGIN_OF_DAY (BOD)
- Moving a system to BOD will clear all previous votes.
- In BOD, no TCP or Serial connection is possible.
- BOD, requires the precinct number, date and BOD Report to move to INITIALIZE_AND_TEST.
- INITIALIZE_AND_TEST (IAT) requires a program scan to be run on a configuration ballot which identifies each option.
- Sample ballots are run to test configuration.
- In IAT, no TCP or Serial connection is possible.
- In order to move forward, sample ballots must be run for each option so that every ballot option has at least one vote.
- After each ballot option has at least one vote, then a precinct worker will be required to enter an id, and approve that the ballots are in line with the configuration.
- Once IAT is approved, the system moves to OPERATIONAL (O_MODE).
- In O_MODE, no TCP or Serial connection is possible.
- In O_MODE, each ballot scanned is recorded as a incrementing number with a status of
- Full - A) all ballot options have one and only one selection and B) the unique mark is in place
- Partial - A) some ballot options are selected but no more than one selection for any option and B) the unique mark is in place
- Invalid - A) any number of ballot options has more than one selection or B) the unique mark is not in place or C) no options are selected
- Any scanned ballot that is Invalid will not be accepted into the ballot box.
- No timestamps on ballot scans only session ID
- Absentee ballot envelopes are scanned separately into the same box.
- Each Absentee envelop has a unique identifier.
- If Absentee envelopes != absentee ballots O_MODE changes to HAND
- If the ballot box is tampered with O_MODE changes to HAND
- If the same ballot is processed twice O_MODE changes to HAND
- If a configuration Ballot is processed O_MODE changes to HAND
- O_MODE can only move to EOD or HAND
- O_MODE moves to HAND
- HAND will no longer accept ballots
- HAND is an error condition requiring a hand count in that case that someone has illegally scanned a ballot and therefore destroyed the integrity of the ballot box.
- HAND can only move to BOD
- HAND will print a report
- HAND can make a TCP connection to the central collection server.
- HAND reports the error condition and the image of each ballot
- In the central system the totals of the ballot box must be entered by a certified user.
- HAND cannot move to BOD if it has not transfered the report to the central server.
- O_MODE moves to EOD
- Once a system is moved to EOD, no ballots can be collected.
- EOD will print a report of every vote cast.
- The EOD report must match the display on the top of the ballot collection box.
- A verification must be entered that the displaty and the report match with an id of the verifier for prosecutor identification.
- EOD can make a TCP connection to the central collection server.
- EOD transfers the vote totals and the image of each ballot
- In the central system the totals of the ballot box must be verified by a certified user.
- In the central system the envelope identifiers to cross reference with all requested absentee votes to verify only one per person and that only requested absentee ballots were received.
- EOD cannot move to BOD if it has not transfered the report to the central server.
Modules:
- Embedded Vote Collection - EVC
- Cloud Vote Verification - CVV
Services:
-
EVC::Imaging
-
EVC::UniqueID
-
EVC::Collection
-
EVC::Settings
-
EVC::Security
-
CVV::MachineLearning
-
CVV::Tabulation
-
CVV::Security
-
CVV::Settings