-
Notifications
You must be signed in to change notification settings - Fork 7
Updates documentation #160
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 5 commits
59f505e
373b08b
24b2b58
659077d
909c87f
14e301e
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
@@ -61,21 +61,297 @@ | |||||||||||||||||||||
| # D-Voting | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **D-Voting** is an e-voting platform based on the | ||||||||||||||||||||||
| [Dela](https://github.com/dedis/dela) blockchain. In short: | ||||||||||||||||||||||
| [Dela](https://github.com/dedis/dela) blockchain. It uses state-of-the-art | ||||||||||||||||||||||
| protocols that guarantee privacy of votes and a fully decentralized process. | ||||||||||||||||||||||
| This project was born in early 2021 and has been iteratively implemented by EPFL | ||||||||||||||||||||||
| students under the supervision of DEDIS members. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| - An open platform to run voting instances on a blockchain | ||||||||||||||||||||||
| - Provides privacy of votes with state-of-the art protocols | ||||||||||||||||||||||
| - Fully auditable and decentralized process | ||||||||||||||||||||||
| ⚠️ This project is still under developpment and should not be used for real | ||||||||||||||||||||||
| elections. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| ## Global architecture | ||||||||||||||||||||||
| Main properties of the system are the following: | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| Find more about the architecture on the [documentation | ||||||||||||||||||||||
| website](https://dedis.github.io/d-voting/#/). | ||||||||||||||||||||||
| <div align="center"> | ||||||||||||||||||||||
| <img height="45px" src="docs/assets/spof-black.png#gh-light-mode-only"> | ||||||||||||||||||||||
| <img height="45px" src="docs/assets/spof-white.png#gh-dark-mode-only"> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **No single point of failure** The system is supported by a decentralized | ||||||||||||||||||||||
| network of blockchain nodes, making no single party able to break the system | ||||||||||||||||||||||
| without compromising a Byzantine threshold of nodes. Additionally, | ||||||||||||||||||||||
| side-protocols always distribute trust among nodes: The distributed key | ||||||||||||||||||||||
| generation protocol (DKG) ensures that a threshold of honest node is needed to | ||||||||||||||||||||||
| decrypt ballots, and the shuffling protocol needs at least one honest node to | ||||||||||||||||||||||
| ensure privacy of voters. Only the identification and authorization mechanism | ||||||||||||||||||||||
| make use of a central authority, but can accommodate to other solutions. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| <div align="center"> | ||||||||||||||||||||||
| <img height="45px" src="docs/assets/privacy-black.png#gh-light-mode-only"> | ||||||||||||||||||||||
| <img height="45px" src="docs/assets/privacy-white.png#gh-dark-mode-only"> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Privacy** Ballots are cast on the client side using a safely-held distributed | ||||||||||||||||||||||
| key-pair. The private key cannot not be revealed without coercing a threshold of | ||||||||||||||||||||||
| nodes, and voters can retrieve the public key on any node. Ballots are decrypted | ||||||||||||||||||||||
| only once a cryptographic process ensured that cast ballots cannot be linked to | ||||||||||||||||||||||
| the original voter. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| <div align="center"> | ||||||||||||||||||||||
| <img height="50px" src="docs/assets/audit-black.png#gh-light-mode-only"> | ||||||||||||||||||||||
| <img height="50px" src="docs/assets/audit-white.png#gh-dark-mode-only"> | ||||||||||||||||||||||
| </div> | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Transparency/Verifiability/Auditability** The whole election process is | ||||||||||||||||||||||
| recorded on the blockchain and signed by a threshold of blockchain nodes. Anyone | ||||||||||||||||||||||
| can read and verify the log of events stored on the blockchain. Malicious | ||||||||||||||||||||||
| behavior can be detected, voters can check that ballots are cast as intended, | ||||||||||||||||||||||
| and auditors can witness the election process. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| ## 🧩 Global architecture | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| The project has 4 main high-level components: | ||||||||||||||||||||||
|
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I was wondering if it'd make it easier to follow by starting with the web interface (that everyone understands), then moving on to the web backend, the proxy (as the interface between non-blockchain and blockchain environments) and finally introducing the blockchain node itself. |
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Blockchain node** A blockchain node is the wide definition of the program that | ||||||||||||||||||||||
| runs on a host and participate in the election logic. The blockchain node is | ||||||||||||||||||||||
| built on top of Dela with an additional d-voting smart contract, proxy, and two | ||||||||||||||||||||||
| services: DKG and verifiable Shuffling. The blockchain node is more accurately a | ||||||||||||||||||||||
| subsystem, as it wraps many other components. Blockchain nodes communicate | ||||||||||||||||||||||
| through gRPC with the [minogrpc][minogrpc] network overlay. We sometimes refer | ||||||||||||||||||||||
| to the blockchain node simply as a "node". | ||||||||||||||||||||||
|
||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Proxy** A proxy enables external interactions on a blockchain node. It is a | ||||||||||||||||||||||
|
||||||||||||||||||||||
| component of the blockchain node that exposes HTTP endpoints for external | ||||||||||||||||||||||
| entities to send commands to the node. The proxy is notably used by the web | ||||||||||||||||||||||
| clients to use the election system. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Web frontend** The web frontend is a web app built with React. It offers a | ||||||||||||||||||||||
| view for end-users to use the D-Voting system. The app is meant to be used by | ||||||||||||||||||||||
| voters and admins. Admins can perform administrative tasks such as creating an | ||||||||||||||||||||||
| election, closing it, or revealing the results. Depending on the task, the web | ||||||||||||||||||||||
| frontend will directly send HTTP requests to the proxy of a blockchain node, or | ||||||||||||||||||||||
| to the web-backend. | ||||||||||||||||||||||
|
|
||||||||||||||||||||||
| **Web backend** The web backend handles authentication and authorization. Some | ||||||||||||||||||||||
| requests that need specific authorization are relayed from the web-frontend to | ||||||||||||||||||||||
| the web-backend. The web backend checks the requests and signs messages before | ||||||||||||||||||||||
| relaying them to the blockchain node, which trusts the web-backend. The | ||||||||||||||||||||||
| web-backend has a local database to store configuration data such as | ||||||||||||||||||||||
| authorizations. Admins use the web-frontend to perform update. | ||||||||||||||||||||||
|
||||||||||||||||||||||
| authorizations. Admins use the web-frontend to perform update. | |
| authorizations. Admins use the web-frontend to perform updates. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This shows "TPC", a term that's introduced nowhere in this document, which could create confusion.
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I would consider moving the pointer to the documentation at the end of the section, as in
For a more formal and in-depth overview of the workflow, see the [documentation]
This makes for a more natural read than having to skip over this to get to the actual content of the paragraph
| An election follows a specific workflow to ensure privacy of votes. You can | |
| find more about it in the | |
| [documentation](https://dedis.github.io/d-voting/#/api?id=signed-requests), but | |
| here is a high-level recap. | |
| Once an election is created and open, there are 4 main steps from the cast of a | |
| ballot to getting the result of the election: | |
| An election follows a specific workflow to ensure privacy of votes. | |
| Once an election is created and open, there are 4 main steps from the cast of a | |
| ballot to getting the result of the election: |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| this stage encrypted ballots cannot ne linked back to their voters. | |
| this stage encrypted ballots cannot be linked back to their voters. |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| ### DKG | |
| DKG stands for Distributed Key Generation. This service allows the creation of a | |
| ### Distributed Key Generation (DKG) | |
| The DKG service allows the creation of a |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The DKG service needs to be setup at the beginning of each new election - we | |
| The DKG service needs to be setup at the beginning of each new election, because we |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
RPC is Dela terminology in this usage. RPC normally stands for "Remote procedure call", so this reads "The initialization creates a new remote procedure call for nodes to communicate" .... -> it's confusing.
Could we say that the initialization creates new RPC endpoints on each node, which they can use to communicate with each other ?
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| to communicate and must be done on each node. The second step, setup, must be | |
| to communicate and must be done on each node. The second step, the setup, must be |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| The shuffling service ensures that encrypted votes can not be linked to their | |
| voters. Once the service is setup, each node can perform what we call a | |
| The shuffling service ensures that encrypted ballots can not be linked to the user who cast them. | |
| Once the service is setup, each node can perform what we call a |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| integrity of the elements is guarantee (i.e no elements have been modified, | |
| the integrity of the elements is guaranteed (i.e no elements have been modified, |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| During this phase, every node perform a shuffling on the current list of | |
| During this phase, every node performs a shuffling on the current list of |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| encrypted ballots and try to submit it to the D-Voting smart contract. The smart | |
| encrypted ballots and tries to submit it to the D-Voting smart contract. The smart |
Outdated
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| contract will accept only one shuffling step per block, and nodes repeat their | |
| shuffling step with the latest shuffled list until their shuffling step has been | |
| accepted or a threshold of nodes successfully submitted their shuffling steps. | |
| contract will accept only one shuffling operation per block in the blockchain, | |
| and nodes re-try to shuffle the ballots, using the latest shuffled list in the blockchain, until the result of their shuffling has been committed to the blockchain or a threshold of nodes successfully submitted their own shuffling results. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here and elsewhere, this would help readability: