Git Product home page Git Product logo

buergerchain's Introduction

buergerchain

The buergerchain is a web-based voting platform. Its main focus is to provide a high level of security, in particual with regard to the authentication of voters, safe storage and anynomity. buergerchain supports authentication through the "buergerkarte" (see www.buergerkarte.at), Austria’s official method for citiziens to provide a proof of identity. Further authentication methods are planned for future development, in particular 2-factor-authentication using sms & e-mail or technologies similar to Austria’s buergerkarte.

One installation of project buergerchain is available at www.freiewahl.eu. If you are a developer and want to contribute, please read the developer's documentation and/or contact me.

Terminology

Voting

A voting consists of one or more questions that should be answered by the voters within a defined timeframe. Exactly one voting administrator is responsible for such a voting.

The voting administrator creates a voting and configures it according to her needs, providing a title and a description for the voting and defining a time frame when users may vote. The administrator may then invite voters to register for the voting. The voting administrator will create a set of questions that are part of the voting. All voters may answer those questions after a successful registration within the defined time frame.

Question

As mentioned above, a voting consists of one or more questions. A voter needs to answer all questions or may abstain from voting. Currently, three types of questions are supported:

  • Decision questions: The voter needs to select one out of a list of options.
  • Multiple choice: The voter may select one or more options out of a given list. A maximum number of selectable options can be defined.
  • Ordering questions: The voters may select one or more options out of a given list and define an order of these options. A maximum number of selectable options can be defined.

The voting administrator can create and edit questions. Once she is done with editing a question, the administrator may unlock a question in order to make it available for voters. Once unlocked, the question cannot be edited anymore in order to guarantee that all voters answer exactly the same question. Once the time frame for a voting is over, all questions in it are automatically locked and cannot be answered anymore. The administrator may also lock a question manually. Once a question is locked, its results are available to all voters and the voting administrator.

Registration

Each voter needs to register for a voting. The registration consists of four steps:

  1. The voting administrator invites voters to participate in a voting. The invited voters get an e-mail with a link pointing to the registration site for a specific voting.
  2. The voter visits the link that was sent to her in the invitation. The voter provides a proof of identity, e.g. using the Austrian buergerkarte. The voter chooses a password that will later be used when casting a vote.
  3. The administrator verifies that the voter is actually eligible to vote and either grants or denies the voter’s registration. When it is granted, a list of voting tokens that are required when casting a vote.
  4. The voter receives a unique link for the voting. She can only cast a vote with this unique link and the password chosen in step 2. This process may sound a bit complicated but is necessary to ensure a high level of security and the voter’s anonymity.

Voting administrator

The voting administrator is a person who is responsible for creating, editing and configuring a voting. The administrator may be considered as the sole “owner” of a voting. Each administrator must create a user account and can only access her votings after logging in. The administrator is responsible for creating and maintaining a list of questions, for inviting voters and supervising the registration and voting process. The administrator can obviously view the results of a voting.

Voter

A voter is a person eligible to partake in a voting. The voter is invited by the voting administrator (usually by mail), registers for the voting and answers the questions the voting consists of. Each voter can view the results of all questions they voted on and may also see what they voted for.

Voting tokens

When a voter registers for a voting and the registration is granted, a list of voting tokens is created. These tokens are unique, random character strings that are used when casting a vote. The voting tokens are used to make sure that only

Voting process

The voting process works as follows: A voting is created by the voting administrator. A list of 100 RSA key pairs are created in the main application. The key pairs have indices running from 0 to 99, each key pair corresponds to one question in the voting - for this reason, no more than 100 questions may be part of one voting. A voter is invited to a voting. The voter provides a proof of identity. When the voter registers for the voting, a unique registration id is created. This registration id is shared between the main application and the tokenstore. A list of 100 tokens and blinding factors is generated in the tokenstore and stored together with the registration id. Again, each of the 100 tokens may be used for one question in a specific voting. The blinding factors are applied to the tokens according to Chaum’s blinding scheme. The blinding factors are stored in the tokenstore, protected with the voter’s password. The voting administrator grants the registration. When doing so, the main application fetches the 100 blinded tokens and signs them using the corresponding private key from the key pairs created in step 1.

The tokenstore stores the blinded, signed tokens and sends a mail to the voter containing a link with a unique voter id. This voter id has nothing to do with the aforementioned registration id and is not shared between the tokenstore and the main application, since it would allow the main application to trace back the voter’s identity.

The voter casts a vote, she answers one question. When sending the answer(s) from the voter’s browser to the main application, the voter’s browser fetches the token corresponding to the question from the tokenstore. The tokenstore gets the blinded, signed token and unblinds it. The client’s browser then sends the unblinded, signed token and the unblinded, unsigned token together with the answer(s) selected by the voter to the main application. The main application verifies the token’s signature, checks its validity for the current question and accepts the vote together with the token and the signed token. Anyone can check if the token and signed token match using the public key created in step 1, the voter may even trace back that her vote was counted correctly.

buergerchain's People

Contributors

michivo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

buergerchain's Issues

Long waiting time after login

What did I do?
I logged in on the start page.

What happened?
The login form disappeared. First, nothing happened - after a few seconds, I was forwarded to the overview of my votings.

What did I expect?
I should be forwarded immediately. If that is not possible, I should at least be informed that something is happening...

No info when there is no open question for voting

What did I do?
I received the link to participate in a voting. There is no question I might answer. I entered my password.

What happened?
Nothing happened.

What did I expect?
I expected to be forwarded to a list of open questions. If there is no open question, I should be informed. As soon as there is an open question, it should be shown.

UM1 As a user, I want to create a user account

As a user, I want to create a user account so that I can easily manage the e-votings I am responsible for.

I want to enter a username (that needs to be unique), an e-mail address and a password. I should receive an email to verify that the email address is indeed mine.
The password should be at least 7 characters long and contain one or more of each of the following: lower case letter, upper case letter, number, punctuation mark.
The password should be stored safely and securely.

Support i18n

Currently all texts are hard coded german. We should go for resources instead.

Transaction-based storing of votes

Each vote should be stored within a transaction. The last "block signature" should be read and the new vote including the new block signature should be created within this transaction. The current implementation using a cache should be removed since the cache won't work if more than one instance is up & running.

Add "Verify votes" button

Add a button that verifies the block integrity of all votes and shows an overview over all votes that were cast (with timestamp info).

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.