JuliaCon 2020 (times are in UTC)

Julia for cryptography, security and voting

Could there be a trustworthy electronic voting system in the Westworld - possessing strong software independence with strong privacy guarantees? I came up with trustless while robust and fairly convenient design based on pseudonym braiding. In this poster, I will briefly review cryptographic packages already available in Julia, ones which I implemented for key exchange, digital signatures, socket encryption and lastly the main ideas of PeaceVote package and current challenges.


The main challenge for the remote electronic voting system is to provide a public and trustless cryptographic proof that each vote is produced by a legitimate member who votes only once while still preserving strong privacy guarantees through distributed multiparty computations. Linkable ring signatures with TOR would be excellent but unfortunately are rather expensive computationally and in signature size. Alternatively, one can create an anonymous signature with a blind signature scheme, but it involves authority who has the ability to stuff ballot (no guarantees for legitimacy).

Instead, I propose to use ballots for creation of a list of anonymous pseudonyms. Each voter participating in ballot secretly generates his pseudonym and puts that in the ballot box whose contents are afterwards published and mutual consent produced. This procedure (braiding) can be repeated with pseudonyms themselves, giving robustness and reasonable convenience as trustless ballots can be made small while still enlarging anonymity set with each ballot. The generated pseudonyms then can be used to sign votes and delivered to the voting box with TOR. To clarify and to check sanity, I chose to implement the protocol in Julia.