Tuesday, January 19, 2021

First Cut at Basic Design Docs

Just posting and updating this as I have time. These are spitballs not design docs at the moment. Just trying to get the ball moving.

For now I see a 2 or 3 tier system. 

 1. We need a front end voter machine that allows a voter to touch the screen and make choices. This would have it's own HD/Memory and it's own write once Flash log drive/drives. It's only point of contact would be a hard wired connection to the local base station.

2. These voter interface machines to be connected to a site base station that is more robust and is the single point of contact to the outside world for a voting station. These machines broadcast voting updates to the entire backbone network. Each update would be sent to the full list of backbone computers. I am not sure if each station should be part of the backbone network or not.

3. A statewide series of computers that form the backbone of the network. These computers would use a blockchain form of verification to verify vote total updates. We would use a trusted 3rd party auth system much like our credit card verification system.

Hardware:  The voting station would require something like a Raspberry Pi and a standard low end touch screen should more than cover what this will require. Retail price 14" touch screens look to be 40-70$ at first scan. Pi's are 30ish$. The Base Station/Backbone computers are not doing anything crazy computing wise. No graphics. Text manipulation and packet sending are low load uses. We could probably use 10 year old refurbished desktops headed for the recycle pile to form the backbone.

Infrastructure/OS Layer: Leaning towards something like OpenBSD for it's minimalist approach. Something like Kali or BlackArch are also interesting because they are built around pen testing and would be naturally difficult to attack and have built in networking protocols.

Networking: I am leaning toward TCP/IP right now. We use it for credit card purchases. 

Application Layer: Looking at writing the program in Python. If you create your variables and methods properly a non-CS person can read a well written Python program and understand what is happening on some level.

The Applications involved to count votes, take touch screen input, print a completed ballot, maintain a simple database, aggregate totals, take a picture etc. are just trivial.

Opening Post For the Open Source Voting System.

I am going to leave this here for people to post comments and discuss this idea. I have an idea about overall architecture but there are experts at every level that know more. 

 Core ideas:

1. Each Machine maintains an indestructible log of votes entered.

2. A new communication protocol will be developed enforcing transparency in communications between voting machines. Encryption will be built into the hardware so that the only communications sent with this protocol can be from machines with fixed IP's on a whitelist. If possible each Gateway will be whitelisted so the entire path can be forced and intrusions ignored.

3. A complete publicly searchable database will be kept for registered voters.

4. Each vote entered will be stored in a similarly searchable public database. 

5. Using public/private key encryption a voter will be able to go through a trusted private 3rd party to see who the state recorded their vote for.

More people is always better. Time to go to work. This starts here.