The Verificatum Mix-Net (VMN) was the first complete and fully distributed mix-net faithful to cryptographic theory and is unanimously considered the most secure, advanced, and high quality mix-net in the world today.
It is by a wide margin the most mature code base. We provide the source code as repositories that largely adhere to the GNU standard. Third parties may package the software for specific platforms.
Interested readers may consider our rationale for using the MIT license.
The simplest way to build, install, and try out the software is to use the demonstration package. Simply download verificatum-vmn-3.0.4-full.tar.gz, unpack it and follow the advise of the README.md file it contains. You may also consider our installation advise for selected platforms.
The source code is available at GitHub. Our current testing platform is Ubuntu 18.04, GMP 6.1.2 , OpenJDK 11, but the software has compiled and run on all Unix type systems we have tried with JDK 8 and upwards.
This gives a quick overview of the product on a single sheet of paper.
This is a comprehensive user manual for the mix-net and all associated tools. It gives an introduction, explains how to use common options, and contains a worked example.
This is used by third parties to implement verifiers of the tallying of an election. Only parts of it need to be implemented depending on the type of election.
This document is mature and has been used repeatedly by undergraduates to implement verifiers. It is the first and only document of its kind and therefore the de facto standard.
This explains why it is important that a mix-net is fast in applications, the positive security and economial implications this has, and describes the optimizations we have implemented at a high level.
It also contains a comprehensive benchmark suite for a number of standard parameters from which formulas for the running times of different operations are derived. These are real execution times with remote servers over a heterogeneous network.
Users can easily run these benchmarks for their own target hardware and configuration using the scripts we provide along with the software.
Unfortunately, there are no benchmarks from any competitor that we can compare our results with.
This describes at a high level the rationale behind a number of design decisions. Several important choices were made early on. Some of them only makes sense if one takes security very seriously, e.g., eliminating all external dependencies of the code, whereas other rely on understanding real world security, e.g., why choosing an obscure, but technically advanced, programming language is not suitable for software that must be audited widely.