Code Monkey home page Code Monkey logo

infoaed / pseudovote Goto Github PK

View Code? Open in Web Editor NEW
4.0 2.0 1.0 831 KB

Deliver pseudonyms to a list of e-mails and collect the votes on a public bulletin board

Home Page: https://pseudovote.net

License: GNU Affero General Public License v3.0

PLpgSQL 6.23% Python 47.45% JavaScript 31.21% CSS 2.04% HTML 12.84% Dockerfile 0.23%
electronic-voting internet-voting web-service keep-it-simple-stupid pseudonymisation bulletin-board voting-service

pseudovote's Introduction

Pseudovote

Simple voting machine providing privacy preserving yet auditable polls/elections on the Internet. Making use of e-mail, pseudonymity and public bulletin boards, voting takes place as a three step process:

  1. Deliver dedicated pseudonyms to a list of e-mails;
  2. Collect the votes on a public bulletin board;
  3. Count the result in a reasonably secret ballot.

The voter is provided immediate auditability of the ballot box by submitting a pseudonymous ballot on a public bulletin board registering/displaying incoming votes from other voters in real time. Ideally pseudonyms should be delivered to voters by a separate service, but for most practical cases and educational use you can trust the web service at Pseudovote.net to deliver them for you.

Pseudovote implements a variation of a "more sophisticated" protocol from "End-end-verifiability" by Benaloh et al (2015). Full source code of the service is disclosed according to its AGPL license and more details can be found on documentation pages.

Running your own

1. Download the source code

git clone https://github.com/infoaed/pseudovote.git
cd pseudovote
pip install -r requirements.txt

2. Set up the database

sudo apt install postgresql
sudo -u postgres psql < database.sql

3. Run the bulletin board

uvicorn pseudovote.service:app

The web service should be running at localhost:8000.

If you prefer running a container, you get the same result by executing docker compose up after downloading the source code.

Auditable polls on Internet

It gets complicated very quickly. Usually you just trust a service to run a poll for you, but not so much for citizens' assemblies, shareholder meetings etc. At a certain point people feel they need some proofs and transparency. Like we have using the paper ballots.

You will be told there is proof, but you have to know mathematics. After researching into options you end up choosing even more expensive service to trust, but still don't have much of a proof. For most of us the cryptography behind state of art voting systems is too complicated to understand.

Pseudovote helps to take the opposite route, building on e-mail and pseudonyms -- well known tools already from the early days of Internet. Collecting pseudonymous ballots on a public bulletin board is an addition you might still need to get used to. But it is probably closest you get to collecting pieces of paper in a transparent ballot box.

By providing only a core end-to-end auditable process, the voting commission has to work out trust assumptions specific to a particular vote.

Oldest and most experienced online communities tend to conduct their elections in a similar manner.

There is a write-up explaining the historical context of the project and slides from a 2020 presentation for a local computer security crowd.

In real life

Preliminary forms of Pseudovote have been used at:

Initial experiments have indeed resulted in an educational yet fully functional web service demonstrating the process conceived at Uduloor.

pseudovote's People

Contributors

alvarlaigna avatar boamaod avatar

Stargazers

 avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

alvarlaigna

pseudovote's Issues

Introduce some modularity to the code

Probably having the code as modular as possible from the beginning makes sense, so there can be different database backends, no database backends for example for single board computers, cryptography modules for different voting mechanisms, rate limit and/or attack resistance modules etc. Need to look up some best practice examples I suppose.

Create reasonably minimum amount of documentation

The minimal documentation should probably explain:

  • The basic rationale, scope and uses for the project;
  • Using the example web service (explain the configuration properties);
  • Cautions/instructions for running in practise (real elections, hacking contests etc);
  • Running your own instance and modifying the code.

This should be more than enough for the code release... Wiki, readme or something else?

Figure out the least restrictive license for the code

Presumptive choice of AGPL stemmed from the public nature of the project. This might be suitable for actually running systems for transparency reasons but not so much for experimenting with the code. Probably opting for Apache, MIT or similar makes more sense. Are there any middle grounds, (L)GPL or some of the less widespread licenses, that would allow separate licenses for actually running systems?

Toolkit to count the votes according to curated formats

Currently the ballots for poll types of multiple, ordered multiple and single are formatted like:

1) rumunculus335: 1. Charles De Goal, Mookie Blaylock; 2. 1) Mookie Blaylock, 2) Einar Stray Orchestra, 3) Charles De Goal; 3. Mookie Blaylock

Maybe there are improvements to the format, but there should be some basic tools to download the bulletin board in different formats (plain text, CSV, JSON) and count votes fitting the format requirements (although this doesn't need to be authoritative tally).

pilt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.