\section{Introduction}

Showing that one piece of software is faster than another is an art. Trying to keep as many of the variables the same while varying the one you are interested in is not easy. Especially when the implementations are not based on the same algorithm. This is the case for the \cmix{} mix network, where you can choose between doing  \elgamal{} in either multiplicative groups or in elliptic curves. This makes benchmarking the fundamental performance differences between two implementations of these two algorithms difficult and interesting. This paper and companion framework implementation focuses on facilitating a comparison between the two. The framework provides a common interface that can implement the \cmix{} primitives, allowing two different cryptographic back-ends to be implemented and benchmarked.

The goal of this research is to verify whether there is an benefit in using \elgamal{} over elliptic curves. This paper implements an elliptic curve and multiplicative group version of \elgamal{} using the same underlying cryptographic primitive library that supports both. Finally it will compare these two implementation to verify whether elliptic curve \elgamal{} is faster for this specific application. 

We will show how \cmix{} works and how it needs to be implemented to be safe against some of the known attacks. This implementation will focus on the mitigations that actually introduce extra messages between the nodes and therefore introduce more latency for the different \cmix{} phases. We will then discuss some of the implementation details and problems that needed to be solved and what kind of impact these implementation details had on the running time of the implementations. This also means discussing how the results are gathered whilst keeping in mind the limitations of the used platform.

Finally we will show that both of the \cmix{} implementations supplied by this research paper scale linearly in the amount of clients that participate in a run.

The paper is structured as follows. First we will talk about other anonymity networks and their current day use in \cref{sec:anon}. In \cref{sec:cmix} we will talk about the \cmix{} network, how it works and why it uses \elgamal{}. \Cref{sec:related} discusses related work. Followed by \cref{sec:implementation}; which talks about the benchmark implementation and some implementation details. \Cref{sec:cmixaddtions} will talk about some flaws in the original \cmix{} protocol and discusses how to fix them. Then we talk about the results in \cref{sec:results}, followed by the discussion of the results in \cref{sec:discussion}. Final thought and further research ideas are in the conclusion \cref{sec:conclusion}.