In cryptography, the open vote network (or OV-net) is a secure multi-party computation protocol to compute the boolean-count function: namely, given a set of binary values 0/1 in the input, compute the total count of ones without revealing each individual value. This protocol was proposed by Feng Hao, Peter Ryan, and Piotr Zieliński in 2010.[1] It extends Hao and Zieliński's anonymous veto network protocol by allowing each participant to count the number of veto votes (i.e., input one in a boolean-OR function) while preserving the anonymity of those who have voted. The protocol can be generalized to support a wider range of inputs beyond just the binary values 0 and 1.
All participants agree on a group
\scriptstyleG
\scriptstyleg
\scriptstyleq
\scriptstylen
Round 1: each participant
\scriptstylei
\scriptstylexi\inRZq
\scriptstyle
xi | |
g |
\scriptstylexi
After this round, each participant computes:
yi | |
g |
=\prodj<i
xj | |
g |
/\prodj>i
xj | |
g |
Round 2: each participant
\scriptstylei
\scriptstyle
xiyi | |
g |
vi | |
g |
\scriptstylevi
\scriptstylevi
\scriptstyle\{0,1\}
After round 2, each participant computes
\scriptstyle\prodi
xiyi | |
g |
vi | |
g |
=
\sumivi | |
g |
\scriptstylexi
\scriptstyle\sumi{xiyi}=0
\scriptstyle\sumivi
Overall, the 2-round efficiency is the theoretically best possible. In terms of the computational load and bandwidth usage, OV-net is also the most efficient among related techniques.
The OV-net protocol guarantees the secrecy of an input bit unless all other input bits are known. The protection of secrecy is the maximum since when all other bits are known, the remaining bit can always be computed by subtracting the values of known input bits from the output of the boolean-count function.
A straightforward application of OV-net is to build a boardroom voting system, where the election is run by voters themselves. For a single candidate election, each voter sends either "No" or "Yes", which correspond to 0 and 1. Every voter, as well as an observer, can tally the "Yes" votes by themselves without needing any tallying authority.
There are standard methods to extend a single-candidate election to support multiple candidates. A straightforward method is to run the single-candidate election in parallel for multiple candidates, and each voter casts "Yes/No" to each of the candidates. Additional zero-knowledge proofs are needed if the voter is limited to vote for only one candidate. Another method is to modify the encoding of candidates: instead of using 0 and 1 for "No" and "Yes" in a single-candidate election, encode each candidate with a unique number such that the tally for each candidate can be unambiguously computed. In this case, a more general 1-out-of-n zero-knowledge proof is used instead where n is the number of candidates.
A prototype implementation of OV-net was presented by McCorry, Shahandashti, and Hao at Financial Cryptography'17 as a smart contract over Ethereum's blockchain.[3] The source code is publicly available. This implementation forms part of the Newcastle University team's solution on "Removing Trusted Tallying Authorities: Self-Enforcing E-Voting over Ethereum", which was awarded third place in the 2016 Economist Cybersecurity Challenge jointly organized by The Economist and Kaspersky Lab.