Summary: Privacy-first i-voting platform powered by Stellar.
Category: Applications
Goals:
- Inherit open blockchain trust in the i-voting system.
- Lower operational costs by leveraging existing blockchain infrastructure.
- Achieve privacy and verifiability for all voters.
Timeline:
-
Q4.2019 - Start blockchain-based i-voting systems research. ✓
-
Q1.2020 - Create a journal article draft. ✓
-
Q1.2020 - Create a proof-of-concept application. ✓
-
Q1.2020 - Create a proof-of-concept service for creating general-purpose votings. ✓
-
Q2.2020 - Add keybase auth via jwt and keybase-bot (similar how https://stellarcommunity.fund works) ✓
-
Q2.2020 - Add basic authN & authZ methods (cookie, IP address, codes, email, domain etc.) ✓
-
Q2.2020 - Add vote encryption (preventing partial results before the end of voting). ✓
-
Q3.2020 - Store voting meta-data on IPFS content-addressable network. ✓
-
Q3.2020 - Solve the scalability problems ✓
-
Q3.2020 - Finish service for creating general-purpose votings. ✓
-
Q3.2020 - Publish a journal article. ✓
-
2021-22 - Research cohersion-resitant and private blockchain i-voting architectures. Reserach multi-party computation (MPC) and zkSNARK.
-
Q2.2022 - Pitch Stellot at Startup School 2022.
-
Q3.2022 - Redesign the protocol according to Vitalik's MACI scheme.
-
Q4.2022 - Write reserach statement.
-
Q1.2023 - Implement the cohersion-resitant layer on top of current protocol.
-
Q1.2023 - Develop an MPC protocol to compute the encryption key using Distributed Key Generation (DKG) schemes.
-
Replace the current storage mechanism based on Stellar transactions, with the new Stellar's Soroban smart contract platform.
-
Q1.2023 - Implement the MPC protocol for decryption and tally the votes stored in Soroban smart contract. This will remove the need for trusted-third-party used in the current protocol.
-
Q2.2023 - Reserach the possibilities of running the nodes on end-user devices like smartphones and laptops.
-
Q3.2023 - Design a protocol for end-user devices.
-
Q4.2023 - Implement the protocol for end-user devices.
-
Q1.2024 - Create a framework for creating domain-specific standalone votings.
-
Q1.2024 - Find academic/government votings where such a system could be used.
-
Q1.2024 - Host dean elections of the Gdańsk Tech with Stellot.
Description: In this paper, we propose a privacy-preserving i-voting system based on the public Stellar Blockchain network. We argue that the proposed system satisfies all requirements stated for a robust i-voting system including transparency, verifiability, and voter anonymity. The practical architecture of the system abstracts a voter from blockchain technology used underneath. To keep user privacy, we propose a privacy-first protocol that protects voter anonymity. Additionally, high throughput and low transaction fees allow handling large scale voting at low costs. As a result we built an open-source, cheap, and secure system for i-voting that uses public blockchain, where everyone can participate and verify the election process without the need to trust a central authority. The main contribution to the field is a method based on a blind signature used to construct reliable voting protocol. The proposed method fulfills all requirements defined for i-voting systems, which is challenging to achieve altogether.
Voter privacy is achieved by the blind-signature technique on the stellar transaction. Deeper technical details are available in whitepaper. We provide demo implementation for the proposed system under https://stellot.com. This general-purpose voting service is great for end-users voting, but we believe that our goal is also to digitize academic/government voting. Such elections require domain-specific applications, and so we would like to create a framework for these types of solutions. Especially the Auth-Server is something that will differ in every institution.
Links:
- Article: https://www.mdpi.com/2076-3417/10/21/7606/pdf
- Repository: https://github.com/stanbar/stellot
- Demo: https://stellot.com
- Generate a new keypair for JWT tokens:
Go to scripts/
and run: ./generate-jwt-keypair.sh
- Sendgrid API key
Get Sendgrid API key from https://app.sendgrid.com/settings/api_keys
.
Add it to .env
file SENDGRID_API_KEY=
- Update
.env
files
Update .env
files for each submodule accordingly, using .env.example
as a template.
Expose services using reverse proxy. We recommend using Caddy or Traefik.
The configuration files for Caddy are available in https://github.com/stanbar/caddy.
Start services with
docker compose up -d
It starts the following services:
stellar-core
- the Stellar blockchain node and Horizon APItds
- the main service, responsible for creating votings, storing them on IPFS and publishing them on Stellar blockchainmongo
- the database for storing votings metadataipfs
- the IPFS node for storing votings metadatakeybase auth chatbot
- listens for auth requests and issue JWT tokens via Keybase chatemail auth
- listens for auth requests and issue JWT tokens via email
see docker-compose.yml for more details.
This project runs [standalone Stellar Core and Horizon], available at https://stellar.stellot.com. You can browse this instance using following Stallar laboratory link
You can remove votings from listing with
curl -X DELETE -H "authorization:<MASTER_SECRET_KEY>" https://stellot/api/voting/<voting slug>
Where:
<MASTER_SECRET_KEY>
is the master account key, same as intds/.env
.<voting slug>
is the voting's id.