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.

2 comments:

  1. Speaking as a computer software engineer, there's an old, but true, saying that if you want to really eff things up, use a computer. I'd like us to go back to paper, mark-sense ballots, voted with a marker pen, deposited into a tamper-proof ballot box subject to dual control at the tally center, with counted ballots again locked so that they can't be counted twice. That's a simple, cheap, fool- and tamper-proof voting system.

    ReplyDelete