<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Publishing DTD v1.0 20120330//EN" "JATS-journalpublishing1.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="publisher-id">INFORMATICA</journal-id>
<journal-title-group><journal-title>Informatica</journal-title></journal-title-group>
<issn pub-type="epub">1822-8844</issn>
<issn pub-type="ppub">0868-4952</issn>
<issn-l>0868-4952</issn-l>
<publisher>
<publisher-name>Vilnius University</publisher-name>
</publisher>
</journal-meta>
<article-meta>
<article-id pub-id-type="publisher-id">INFOR440</article-id>
<article-id pub-id-type="doi">10.15388/20-INFOR440</article-id>
<article-categories><subj-group subj-group-type="heading">
<subject>Research Article</subject></subj-group></article-categories>
<title-group>
<article-title>Distributed Trust, a Blockchain Election Scheme</article-title>
</title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Larriba</surname><given-names>Antonio M.</given-names></name><email xlink:href="anlarflo@dsic.upv.es">anlarflo@dsic.upv.es</email><xref ref-type="aff" rid="j_infor440_aff_001">1</xref><bio>
<p><bold>A.M. Larriba</bold> is a pre-doctoral researcher at the Universitat Politècnica de València (Spain), where he obtained his degree in computer science, in 2016, and a master’s degree in artificial intelligence, in 2017. Currently, he is working on obtaining his PhD in computer science. He was awarded a governmental grant for this purpose. His topics of interest include cryptography, artificial intelligence, and blockchain.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Cerdà i Cucó</surname><given-names>Aleix</given-names></name><email xlink:href="alcercu@inf.upv.es">alcercu@inf.upv.es</email><xref ref-type="aff" rid="j_infor440_aff_002">2</xref><bio>
<p><bold>A. Cerdà i Cucó</bold> obtained his BSc in computer science at the Universitat Politècnica de València (Spain), in 2020. He is currently working on the field of machine translation. His topics of interest include artificial intelligence, cryptocurrencies, and software-quality analysis.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>Sempere</surname><given-names>José M.</given-names></name><email xlink:href="jsempere@dsic.upv.es">jsempere@dsic.upv.es</email><xref ref-type="aff" rid="j_infor440_aff_001">1</xref><bio>
<p><bold>J.M. Sempere</bold> is an associate professor at the Universitat Politècnica de València (Spain), where he obtained a PhD in computer science, in 2002. He is a member of the International Society for Membrane Computing (IMCS) and the European Association for Theoretical Computer Science (EATCS). He has published several scientific papers in international journals and he has coordinated several research projects. His scientific interests include cryptography, computer models, and the theory of computational complexity.</p></bio>
</contrib>
<contrib contrib-type="author">
<name><surname>López</surname><given-names>Damián</given-names></name><email xlink:href="dlopez@dsic.upv.es">dlopez@dsic.upv.es</email><xref ref-type="aff" rid="j_infor440_aff_001">1</xref><xref ref-type="corresp" rid="cor1">∗</xref><bio>
<p><bold>D. López</bold> is an associate professor at the Universitat Politècnica de València (Spain), where he obtained his PhD in computer science, in 2003. Currently, he is the academic coordinator of the Computation Section at the Departamento de Sistemas Informáticos y Computación, and a member of the Valencian Research Institute for Artificial Intelligence (VRAIN). His research interests include cryptography, formal languages, and grammatical inference.</p></bio>
</contrib>
<aff id="j_infor440_aff_001"><label>1</label>VRAIN – Valencian Research Institute for Artificial Intelligence, <institution>Universitat Politècnica de València</institution>, <country>Spain</country></aff>
<aff id="j_infor440_aff_002"><label>2</label>Departamento de Sistemas Informáticos y Computación, <institution>Universitat Politècnica de València</institution>, <country>Spain</country></aff>
</contrib-group>
<author-notes>
<corresp id="cor1"><label>∗</label>Corresponding author.</corresp>
</author-notes>
<pub-date pub-type="ppub"><year>2021</year></pub-date><pub-date pub-type="epub"><day>8</day><month>2</month><year>2021</year></pub-date>
<volume>32</volume><issue>2</issue><fpage>321</fpage><lpage>355</lpage>
<history>
<date date-type="received"><month>5</month><year>2020</year></date>
<date date-type="accepted"><month>12</month><year>2020</year></date>
</history>
<permissions><copyright-statement>© 2021 Vilnius University</copyright-statement><copyright-year>2021</copyright-year>
<license license-type="open-access" xlink:href="http://creativecommons.org/licenses/by/4.0/">
<license-p>Open access article under the <ext-link ext-link-type="uri" xlink:href="http://creativecommons.org/licenses/by/4.0/">CC BY</ext-link> license.</license-p></license></permissions>
<abstract>
<p>Voting systems are as useful as people are willing to use them. Although many electronic election schemes have been proposed through the years, and some real case scenarios have been tested, people still do not trust electronic voting. Voting is not only about technological challenges but also about credibility, therefore, we propose a voting system focused on trust. We introduce political parties as active partners in the elections as a mechanism to encourage more traditional electors to participate. The system we propose here preserves elector’s privacy, it operates publicly through a blockchain and it is auditable by third parties.</p>
</abstract>
<kwd-group>
<label>Key words</label>
<kwd>electronic vote</kwd>
<kwd>distributed authority</kwd>
<kwd>blockchain</kwd>
<kwd>proof of authority</kwd>
<kwd>Monero</kwd>
</kwd-group>
</article-meta>
</front>
<body>
<sec id="j_infor440_s_001">
<label>1</label>
<title>Introduction</title>
<p>Voting is a crucial element of democratic societies. There have been numerous approaches to improve and to automatize the voting process. First advancements were based on modification of the ballots (e.g. Rivest, <xref ref-type="bibr" rid="j_infor440_ref_038">2006</xref>; Rivest and Smith, <xref ref-type="bibr" rid="j_infor440_ref_039">2007</xref>) and mechanical and optical readers to speed up the vote count. The advances of cryptography were key in the development of electronic voting methods. On the one hand, e-voting provided not only more accessible and faster ways to count votes, but also new properties unavailable to traditional voting systems such as: remote voting, universal verifiability and auditability. On the other hand, e-voting also raised new security and privacy concerns. To address these concerns, e-voting makes use of cryptographic constructs. Therefore, most electronic voting protocols can be categorized in four large groups, defined by their cryptographic composition: those systems based on blind signatures (e.g. Chaum, <xref ref-type="bibr" rid="j_infor440_ref_011">1982</xref>; Camenisch <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_009">1994</xref>), based on mixnets (e.g. Chaum, <xref ref-type="bibr" rid="j_infor440_ref_010">1981</xref>; Chaum <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_013">2005</xref>), based on homomorphic cryptography (e.g. Baudron <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_005">2001</xref>; Cramer <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_015">1997</xref>) and those based on ring signatures (e.g. Rivest <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_040">2001</xref>; Chen <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_014">2008</xref>).</p>
<p>Usually, the later methods employ a public bulletin board to display the election process and the results. They seek a way of publishing the voting information to later allow to verify and audit the election. With the apparition of Bitcoin (Satoshi, <xref ref-type="bibr" rid="j_infor440_ref_044">2008</xref>), Blockchain technology proved itself as an effective, distributed and decentralized public ledger (Belotti <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_006">2019</xref>; Paulavicius <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_036">2019</xref>). Since then, various voting protocols based on blockchain have appeared (e.g. Ayed, <xref ref-type="bibr" rid="j_infor440_ref_002">2017</xref>; Lee <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_029">2016</xref>). Typically, the voting process is embedded into the blockchain, which acts as the voting interface and a decentralized public bulletin board as well.</p>
<p>One of the goals of e-voting is to incentive participation. However, although it provides remote and, in some cases, multi-platform access, people do not trust e-voting. It is difficult to trust a system based on abstract mathematical results that people do not fully understand. In our opinion, e-voting should not be all about technological issues, but also about trust and about actively engaging all the parties in the democratic process. For this reason, we present an e-voting protocol in which traditional parties, to whom people trust to some extent, take a dynamic and responsible side. We introduce a new voting scheme inspired by Monero’s blockchain and ring signatures. In our approach, each party is given partial power and full accountability in reaching a common interest despite their antagonistic nature. The contributions of this paper are two-fold: we develop a new voting scheme focused on trust, which is scalable, secure and preserves the anonymity and privacy of the electors, and we also present a new and cheaper consensus algorithm which we name Proof of Authorities, based on the distribution of trust on the adversarial interests of the involved parties.</p>
<p>The rest of the paper is structured as follows: Section <xref rid="j_infor440_s_002">2</xref> reviews and describes significant works in the literature, Section <xref rid="j_infor440_s_006">3</xref> provides a brief background of the key concepts used in the protocol, Section <xref rid="j_infor440_s_010">4</xref> exposes and describes our proposal, Section <xref rid="j_infor440_s_017">5</xref> analyses the computational time complexity of the proposed protocol and Section <xref rid="j_infor440_s_020">6</xref> studies the properties of our election scheme. Finally, Section <xref rid="j_infor440_s_021">7</xref> reviews the contributions and conclusions of our work.</p>
</sec>
<sec id="j_infor440_s_002">
<label>2</label>
<title>Related Work</title>
<p>In this section, we review relevant research papers. We distinguish between three categories tightly related with our proposal. We inspect the usual problems these approaches face and assert the new contributions our scheme brings.</p>
<sec id="j_infor440_s_003">
<label>2.1</label>
<title>Ring Signature Based Voting Systems</title>
<p>Exploring the security requirements of a democratic society, Salazar <italic>et al.</italic> proposed in (Salazar <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_043">2010</xref>) a voting system based on short-linkable ring signatures (Tsang and Wei, <xref ref-type="bibr" rid="j_infor440_ref_048">2004</xref>). These signatures allow for a linking tag that permits to relate votes from the same elector without revealing their identity. The aim of the authors was to reduce the number of the third-parties involved in the voting process. Only a certification authority, responsible of issuing the keys and validating the certificates, and a recount authority are needed. Ring signatures grant signer ambiguity, and linking tags act as receipt and allow the removal of duplicates. Thus, only the public key of the recount authority is used for encryption, which gives too much sway to a single authority. The protocol was later implemented in Tornos <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_047">2014</xref>), which provided a modular implementation in a multi-platform environment: a desktop client, an android native app and a Firefox extension were developed to boost usability and engagement in the voting process.</p>
<p>In Chen <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_014">2008</xref>), Chen <italic>et al.</italic> propose an electronic voting system based on a modified version of linkable ring signatures. In this modification, only designated verifiers can check the validity of the ring signature. Ring signatures are encrypted with the verifier’s public key. Therefore, a designated verifier cannot convince a third party of the integrity of a signature without revealing its private key. This prevents designated verifiers from broadcasting information about a private signature. The system uses a <inline-formula id="j_infor440_ineq_001"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula>-threshold sharing scheme to generate and distribute the secrecy of the private key (Gennaro <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_023">2007</xref>) between <italic>l</italic> tallying authorities. The public key is made public before the election starts. For an elector to cast a vote, she has to select the direction of her vote and encrypts it using the public key of the election. Then, the ballot is sent through an anonymous channel to an administrator. The administrator signs the ballot, adds a timestamp and returns the ballot to the elector. If the signature returned by the administrator is valid, the elector crafts the linked ring signature, encrypts it with the public key of a tallying authority of her choice and publishes it on the bulletin board. After the election, at least <italic>k</italic> tallying authorities cooperate to recover the private key. When the private key of the election is recovered, each tallying authority is responsible for checking the validity of the received ring signatures and publishing the votes.</p>
</sec>
<sec id="j_infor440_s_004">
<label>2.2</label>
<title>Blockchain Based Voting Systems</title>
<p>In Noizat (<xref ref-type="bibr" rid="j_infor440_ref_035">2015</xref>), Noizat proposes a voting system based on blockchain and Merkle trees (Merkle, <xref ref-type="bibr" rid="j_infor440_ref_031">1980</xref>) for elector’s verification. Each elector uses three public keys: a key from the candidate she decided to vote for (KeyC); a key from the election organizers (KeyA), and a key from the voting application (KeyB). The system provides privacy through 2-of-3 multi-signature addresses (Ruffing and Moreno-Sanchez, <xref ref-type="bibr" rid="j_infor440_ref_042">2017</xref>). To prepare the ballot, the elector prepares a 2-of-3 multi-signature address and a transaction. There is no way to guess the elector nor the candidate from a multi-signature address without knowing all three public keys and knowing to whom they belong. To verify that the ballot is counted as intended, the elector can use block explorers to check whether his vote has been confirmed.</p>
<p>In his proposal Lee <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_029">2016</xref>) describes a blockchain voting system. For an elector to vote for a candidate, they have to make a transaction to a candidate’s address. To do so, the elector first needs to register as a valid elector. To avoid election organizers from knowing who voted for which candidate, the registration process is decoupled in two organizations (the registration organization itself and a trusted third party (TTP)). To cast a vote, the elector sends a hash of her secret to the registration organization and the TTP. The TTP asks the organization if that hash is linked to a valid elector. If the answer is positive, the TTP asks the elector for the secret and checks if it matches the one received. If they match, the elector is registered as a valid elector. Then, the elector can make the transaction to vote for the candidate of their choice. At the end, transactions are inspected and checked against a permutation of the TTP verified elector’s list. Multiple voting, and unverified electors are removed from the tally.</p>
<p>Ayed describes in Ayed (<xref ref-type="bibr" rid="j_infor440_ref_002">2017</xref>) a simple blockchain based voting protocol. In his system, each candidate has its own blockchain and every block, but the first, represents a vote for the candidate. The first block of each chain contains information about the candidate. To vote, an elector must identify himself or herself as a valid elector using their address and some private information. Then, they can decide the direction of their vote. When the vote is decided, some private elector’s information is hashed alongside the hash of the previous block to constitute the hash of the new block. Finally, the new block is added to the corresponding blockchain. Ayed’s proposal addresses a few of the issues of centralized voting systems, but it fails to properly define some of the crucial parts of the protocol: registration is not supported and identification is assumed to be solved. Also, the encryption and identification is managed by a centralized interface.</p>
<p>Tarasov and Tewari introduce in Tarasov and Tewari (<xref ref-type="bibr" rid="j_infor440_ref_046">2017</xref>) a Zcash based voting protocol. Zcash (Bowe <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_007">2018</xref>) emerged as a Bitcoin fork with privacy as concern. Zcash supports two different kind of addresses: <italic>t</italic>-addresses, which work like regular pseudonymous Bitcoin addresses and allow transparent transactions, and <italic>z</italic>-addresses, which preserve the anonymity and privacy of the transactions. Private-anonymous transactions are based on special zero-knowledge proofs, zk-SNARKS (Bowe <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_007">2018</xref>). These proofs permit the interchange of the secret values required to establish a private transaction between the sender and the receiver. After registration, the elector can make a transaction to the <italic>z</italic>-address of the desired candidate. The elector is required to provide also a valid <italic>t</italic>-address. Thus, the direction of the vote is private, but the transaction is still public. When the voting phase ends, candidates send all the vote tokens to a central pool where the final tally is computed. This requires some trust on the system and the candidates, because the candidates are expected to send the tokens and collaborate, and a malicious candidate could interfere in the voting process.</p>
<p>Yang <italic>et al.</italic> propose in (Yang <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_052">2020</xref>) a blockchain voting protocol for range voting, in which each candidate receives a score and the candidate with the highest score wins the election. To preserve elector’s privacy they propose a novel encryption scheme based on ElGamal (<xref ref-type="bibr" rid="j_infor440_ref_018">1985</xref>) and group-based encryption. Each vote is encrypted by using the public key of the elector and the public keys of the candidates. This way, even at the end of the election, when the candidates release their secret keys, the individual votes remain secret. To compute the final tally, they take advantage of the homomorphic properties of El Gamal to compute the final score without decrypting individual votes. Then, the final score is decrypted by the candidates. Each transaction contains a vote, and each vote is formed by a set of scores, one for each candidate. The only drawback of this approach is that each individual score needs to be double encrypted, and accompanied by a zero-knowledge proof, and a partial-knowledge proof to ensure it is a valid score from a valid voter. This affects both the time and spatial complexity of the system. However, the authors are able to provide a performance analysis that proves the validity of their election scheme.</p>
<p>Gao <italic>et al.</italic> present in (Gao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_022">2019</xref>) an anti-quantum e-voting protocol based on blockchain technology. To achieve quantum computing resistance, they base their method on code-based cryptography (Niederreiter, <xref ref-type="bibr" rid="j_infor440_ref_033">1985</xref>) (a NP complete problem) instead of using traditional public key cryptography based on the difficulty of number theory. Their protocol is equipped with an audit function, based on public key certificates (Al-Riyami and Paterson, <xref ref-type="bibr" rid="j_infor440_ref_001">2003</xref>; Hua-jie <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_025">2014</xref>), that allows to detect fraudulent voters. To handle the certificates, the authors introduce the figure of the regulator, who, although does not participate in the election, has the authority to revoke voter’s privacy. The authors report a complete and exhaustive computational time analysis of their protocol.</p>
<p>Follow My Vote (<xref ref-type="bibr" rid="j_infor440_ref_053">2018</xref>) and Bitcongress (Rockwell, <xref ref-type="bibr" rid="j_infor440_ref_041">2017</xref>) are online projects of blockchain based e-voting. While they are not backed by research papers, they are pioneers of providing remote blockchain based voting to the public, being open source and supplying a real working service as an alternative to traditional voting. FollowMyVote is based on elliptic curves and blind signatures (Chaum, <xref ref-type="bibr" rid="j_infor440_ref_011">1982</xref>), and requires a central authority to deal with elector registration and ballot lending. BitCongress is another decentralized e-voting proposal, it is based on digital signatures and smart contracts. It is also compatible with distributed legislation which is enforced through the blockchain. It requires a timestamp server for the system to work. The developers provide a front-end wallet called AXIOMITY that handles the working modes of BitCongress.</p>
</sec>
<sec id="j_infor440_s_005">
<label>2.3</label>
<title>Ring Signatures &amp; Blockchain Based Voting Systems</title>
<p>In Wu (<xref ref-type="bibr" rid="j_infor440_ref_050">2017</xref>), Wu develops a voting system based on ring signatures (Rivest <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_040">2001</xref>) and Bitcoin’s blockchain. There are two authorities on the protocol: a Registration Authority (RA) and an Election Authority (EA). It is assumed these authorities are trustworthy and will not share information. Before the election starts, the EA is responsible for generating and managing a public pool of Bitcoin addresses. Since Bitcoin is not private, but anonymous, a two-phase registration is carried out by the RA. This process decouples the elector identity from the Bitcoin address and preserves elector’s privacy. As a result of the registration process, the elector gets her public key certified as a valid key. For an elector to create a ballot, they must perform a ring signature, using their private key and a list of public keys, on their desired vote. This results in a signer ambiguous signature that makes impossible to link the vote to their public key. Once the ballot is created, he or she selects a Bitcoin address from the pre-computed pool of addresses. The EA will provide the elector with the associated private key to that address. Then, the elector can send the ballot as a transaction from their own address to the EA’s address, with the ballot encoded in the transaction itself. The EA is responsible for retrieving all the ballots and verifying the integrity of ring signatures to compute the final tally. When the election is over, the list of public keys of electors is released to the public and everyone can verify the correctness of the tally. Since the ring signature used in this method allows double voting, EA checks the transactions coming from the same address. For each address, only the latest transaction will be considered valid. As a drawback of this method, it is to note the great sway of the authorities in the voting process. As a result, one of the requirements of the protocol is that authorities comply with the desired conduct. Wu also developed a complete implementation of the system on Bitcoin’s testnet, with a great definition of classes and cases of use.</p>
<p>Lai and Wu propose in Lai and Wu (<xref ref-type="bibr" rid="j_infor440_ref_028">2018</xref>) an elegant voting system based on Ethereum smart contracts and one-time ring signatures (Van Saberhagen, <xref ref-type="bibr" rid="j_infor440_ref_049">2013</xref>). A transaction is considered a vote, electors make a transaction to their selected candidate. The privacy of the elector is protected by ring signatures, which also prevent double voting. To keep the election fair and to avoid the leak of information until the tally phase, the electors should consider the stealth addresses of the candidates to cast the vote. This way, until the stealth addresses are revealed, votes are kept secret. To expose the stealth addresses, key managers are needed. Key managers share the first private key of a candidate through a Diffie-Hellman interchange. Key managers store some <inline-formula id="j_infor440_ineq_002"><alternatives>
<mml:math><mml:mtext mathvariant="italic">ETH</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{ETH}$]]></tex-math></alternatives></inline-formula> in a deposit previous to the election, to recover it they must open their secret on the tally phase. Once the stealth addresses are exposed, the whole election process is public and auditable on the Ethereum blockchain. All the requirements of the protocol are contained in a smart contract.</p>
</sec>
</sec>
<sec id="j_infor440_s_006">
<label>3</label>
<title>Background</title>
<p>In this section we present a brief and concise review of the key concepts and protocols needed to define our proposal. We also introduce the notation that will be used along the rest of the work.</p>
<sec id="j_infor440_s_007">
<label>3.1</label>
<title>Notation</title>
<p>In this work, we use both <inline-formula id="j_infor440_ineq_003"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> cryptosystem and Elliptic Curve Cryptography (<inline-formula id="j_infor440_ineq_004"><alternatives>
<mml:math><mml:mtext mathvariant="italic">ECC</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{ECC}$]]></tex-math></alternatives></inline-formula>). The former is used by the electors to encrypt their vote and by the parties to sign the transactions. The latter is used for generating ring signatures in the context of a blockchain in order to allow correct and anonymous identification of electors. We assume some familiarity of the reader with these notions. We recommend (Menezes <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_030">1996</xref>) to the not accustomed reader. Now, we summarize the notation that will be used in the rest of the paper. 
<list>
<list-item id="j_infor440_li_001">
<label>•</label>
<p>Modular product and exponentiation operations are expressed as <inline-formula id="j_infor440_ineq_005"><alternatives>
<mml:math><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">b</mml:mi><mml:mspace width="0.2em"/><mml:mo>mod</mml:mo><mml:mspace width="0.2em"/><mml:mi mathvariant="italic">n</mml:mi></mml:math>
<tex-math><![CDATA[$ab\hspace{0.2em}\mathrm{mod} \hspace{0.2em}n$]]></tex-math></alternatives></inline-formula> or <inline-formula id="j_infor440_ineq_006"><alternatives>
<mml:math><mml:msup><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">d</mml:mi></mml:mrow></mml:msup><mml:mspace width="0.2em"/><mml:mo>mod</mml:mo><mml:mspace width="0.2em"/><mml:mi mathvariant="italic">n</mml:mi></mml:math>
<tex-math><![CDATA[${c^{d}}\hspace{0.2em}\mathrm{mod} \hspace{0.2em}n$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_002">
<label>•</label>
<p>Concatenation of binary sequences is expressed as <inline-formula id="j_infor440_ineq_007"><alternatives>
<mml:math><mml:mi mathvariant="italic">a</mml:mi><mml:mo stretchy="false">‖</mml:mo><mml:mi mathvariant="italic">b</mml:mi></mml:math>
<tex-math><![CDATA[$a\| b$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_003">
<label>•</label>
<p><italic>g</italic> represents a generator in a given finite group.</p>
</list-item>
<list-item id="j_infor440_li_004">
<label>•</label>
<p>A finite group defined by a prime number <italic>q</italic> is represented as <inline-formula id="j_infor440_ineq_008"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${\mathbb{F}_{q}}$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_005">
<label>•</label>
<p><italic>G</italic> represents the generator or base point of an elliptic curve <italic>E</italic>.</p>
</list-item>
<list-item id="j_infor440_li_006">
<label>•</label>
<p>In <inline-formula id="j_infor440_ineq_009"><alternatives>
<mml:math><mml:mtext mathvariant="italic">ECC</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{ECC}$]]></tex-math></alternatives></inline-formula>, private keys are expressed in lowercase <italic>a</italic>, while public keys are expressed in uppercase <italic>A</italic>. In such way that <inline-formula id="j_infor440_ineq_010"><alternatives>
<mml:math><mml:mi mathvariant="italic">A</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">G</mml:mi></mml:math>
<tex-math><![CDATA[$A=aG$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_007">
<label>•</label>
<p><inline-formula id="j_infor440_ineq_011"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${H_{s}}$]]></tex-math></alternatives></inline-formula> is a hash function which maps a binary sequence into an element of a finite group <inline-formula id="j_infor440_ineq_012"><alternatives>
<mml:math><mml:msup><mml:mrow><mml:mo fence="true" stretchy="false">{</mml:mo><mml:mn>0</mml:mn><mml:mo mathvariant="normal">,</mml:mo><mml:mn>1</mml:mn><mml:mo fence="true" stretchy="false">}</mml:mo></mml:mrow><mml:mrow><mml:mo>∗</mml:mo></mml:mrow></mml:msup><mml:mo stretchy="false">→</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${\{0,1\}^{\ast }}\to {\mathbb{F}_{q}}$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_008">
<label>•</label>
<p><inline-formula id="j_infor440_ineq_013"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${H_{p}}$]]></tex-math></alternatives></inline-formula> is a hash function which maps an element of a finite group into an elliptic curve point <inline-formula id="j_infor440_ineq_014"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="double-struck">F</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow></mml:msub><mml:mo stretchy="false">→</mml:mo><mml:mi mathvariant="italic">E</mml:mi></mml:math>
<tex-math><![CDATA[${\mathbb{F}_{q}}\to E$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
</list>
</p>
</sec>
<sec id="j_infor440_s_008">
<label>3.2</label>
<title>One Time Public Keys</title>
<p>Monero is a cryptocurrency based on the cryptographic protocol described in Van Saberhagen (<xref ref-type="bibr" rid="j_infor440_ref_049">2013</xref>). Its main focus is to achieve private and untraceable transactions over a public ledger. Here, we present a brief description of how Monero achieves those goals and an example of how an untraceable transaction works. For further details, we recommend the review done by Koe <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_027">2020</xref>) to the interested reader.</p>
<p>In order to anonymize the sender, ring signatures are used to sign transactions with a group of keys, thus giving ambiguity to the sender. To anonymize the receiver, they use stealth addresses. One Time Public Keys (<inline-formula id="j_infor440_ineq_015"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s) are derived from the receiver’s stealth address, and allow the sender to use a new public key for each transaction (using a Diffie-Hellman-like (Diffie and Hellman, <xref ref-type="bibr" rid="j_infor440_ref_017">1976</xref>) exchange). Sending transactions using these keys preserves the anonymity of the receiver. The receiver, and only the receiver, is able to recover the private key of the stealth address and use its funds.</p>
<p>In our proposal, we take advantage of Monero’s <inline-formula id="j_infor440_ineq_016"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s in order to allow elector identification. Thus, we here present a brief summary of how <inline-formula id="j_infor440_ineq_017"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s are derived. Each user on the blockchain has two public keys <inline-formula id="j_infor440_ineq_018"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">A</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">B</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(A,B)$]]></tex-math></alternatives></inline-formula>. For any sender to make a transaction, he needs to compute the <inline-formula id="j_infor440_ineq_019"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> that will be used in the transaction using the two public keys of the receiver. He also selects a random number <italic>r</italic>. 
<disp-formula id="j_infor440_eq_001">
<alternatives>
<mml:math display="block"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd><mml:mtext mathvariant="italic">OTPK</mml:mtext><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">A</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">B</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[ \textit{OTPK}={H_{s}}(rA)G+B.\]]]></tex-math></alternatives>
</disp-formula>
</p>
<p>The derived <inline-formula id="j_infor440_ineq_020"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> is used as the public address of the transaction. Note that <italic>R</italic>, being <inline-formula id="j_infor440_ineq_021"><alternatives>
<mml:math><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">G</mml:mi></mml:math>
<tex-math><![CDATA[$rG$]]></tex-math></alternatives></inline-formula>, is also added in the transaction information. Once the transaction is done, the receiver will be able to recover the private key <italic>x</italic> associated to the <inline-formula id="j_infor440_ineq_022"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> using his own private keys <inline-formula id="j_infor440_ineq_023"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(a,b)$]]></tex-math></alternatives></inline-formula>: 
<disp-formula id="j_infor440_eq_002">
<alternatives>
<mml:math display="block"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd><mml:mi mathvariant="italic">x</mml:mi><mml:mo>=</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[ x={H_{s}}(aR)+b,\]]]></tex-math></alternatives>
</disp-formula> 
such that: 
<disp-formula id="j_infor440_eq_003">
<alternatives>
<mml:math display="block"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd><mml:mtext mathvariant="italic">OTPK</mml:mtext><mml:mo>=</mml:mo><mml:mi mathvariant="italic">x</mml:mi><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[ \textit{OTPK}=xG,\]]]></tex-math></alternatives>
</disp-formula> 
indeed: 
<disp-formula id="j_infor440_eq_004">
<alternatives>
<mml:math display="block"><mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt"><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">A</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>+</mml:mo><mml:mi mathvariant="italic">B</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">A</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="italic">G</mml:mi><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[\begin{aligned}{}& {H_{s}}(rA)G+B=({H_{s}}(aR)+b)G,\\ {} & ({H_{s}}(rA)+b)G=({H_{s}}(aR)+b)G,\\ {} & ({H_{s}}(raG)+b)G=({H_{s}}(arG)+b)G,\\ {} & ({H_{s}}(aR)+b)G=({H_{s}}(aR)+b)G.\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</p>
</sec>
<sec id="j_infor440_s_009">
<label>3.3</label>
<title>Ring Signatures</title>
<p>Ring signatures are a special kind of cryptographic signature. They receive this name because they are created using a ring structure, where the public keys of several peers (electors in this framework) are used in order to provide a signer-ambiguous signature. No information about the signer is revealed, only his membership to certain group. Any person involved in a ring signature could be the signer.</p>
<p>Multiple versions of ring signatures exist. Originally, they were proposed by Chaum and van Heyst (<xref ref-type="bibr" rid="j_infor440_ref_012">1991</xref>) as group signatures. They were limited because a group coordinator was required to set up the signing scheme. To overcome this issue, Rivest introduced in Rivest <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_040">2001</xref>) the first ring signatures. They provided unconditional signer ambiguity without group coordinator. Any user can define a set of possible signers, including themselves, and sign the message using their public and secret key and others’ public keys. Neither a coordinator, nor the permission (or even the knowledge) of the owners of the third party public keys is required.</p>
<p>Ring signatures are a great and solid solution to achieve the anonymity needed in the voting protocols. Nevertheless, since it is impossible to know who is the actual signer, nothing would prevent the use of another ring to vote. In order to prevent that, we will use the Ring Signature Confidential Transaction algorithm described in Noether (<xref ref-type="bibr" rid="j_infor440_ref_034">2015</xref>), Van Saberhagen (<xref ref-type="bibr" rid="j_infor440_ref_049">2013</xref>). This algorithm is the result of combining the modifications for reducing space consumption described by Back (<xref ref-type="bibr" rid="j_infor440_ref_003">2015</xref>) and the introduction of Key Images.</p>
<p>Key images are a public commitment of the signer’s private and public key, they do not reveal information about the signer’s private key. As a result, we can anonymously link the private key of the signer, independently of the public keys on the ring, to the signature. This allows to prevent the use of the same key to sign two different rings, which would imply double spending the same resource.</p>
<p>Algorithm <xref rid="j_infor440_fig_001">1</xref> details the steps an elector should perform to apply a ring signature to their vote. Since the ring signature generation has some random coefficients involved and depends on the signer’s private key, votes in the same direction signed with the same ring of public keys are still different. Algorithm <xref rid="j_infor440_fig_002">2</xref> specifies the process the authorities must follow in order to verify the correctness of a given signature.</p>
<fig id="j_infor440_fig_001">
<label>Algorithm 1</label>
<caption>
<p>Ring Signature Generation</p>
</caption>
<graphic xlink:href="infor440_g001.jpg"/>
</fig>
<fig id="j_infor440_fig_002">
<label>Algorithm 2</label>
<caption>
<p>Ring Signature Validation</p>
</caption>
<graphic xlink:href="infor440_g002.jpg"/>
</fig>
</sec>
</sec>
<sec id="j_infor440_s_010">
<label>4</label>
<title>Our Proposal</title>
<p>We devote this section to explain our voting scheme proposal. We present a fully auditable, public and distributed voting system based on Blockchain technologies. All the information is registered into the blockchain, a vote itself is a transaction, and all the blocks are free to be publicly consulted. As a mechanism to engage the elector in the election process, we give political parties a special role in our system: they act like miners, listening and processing transactions. Therefore, any political party willing to participate must supply computing power. Electors do not need to trust these parties, all the voting process is public and auditable, privacy and anonymity are provided. In our opinion, people feel confident if they have someone to blame if something goes wrong. People who feel reluctant about new electronic voting systems, may trust a scheme in which traditional factions take an active part and are accountable for their actions.</p>
<p>We employ a Proof of Authority (PoA) consensus algorithm (Xiao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_051">2020</xref>; Barinov <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_004">2018</xref>), as an alternative to running a traditional Proof of Work. This variation reduces the computational cost required to run a functional blockchain. PoA is a permissioned blockchain where only some certified participants are allowed to carry out certain actions. In our system, parties are responsible for listening to transactions, verifying the signature of the encrypted vote and making sure the vote is correctly written on the blockchain. Parties are the only partners with write access to the blockchain, while the rest of participants have read-only access. PoA can be seen as a variation of Proof of Stake (Xiao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_051">2020</xref>), but instead of staking monetary tokens, parties stake their identity. Their reputation will be discredited if they misbehave. To our knowledge, no other adaptation of PoA to anonymous electronic voting has been presented.</p>
<p>We consider the process as five different stages: election setup, registration, vote casting, vote processing and tallying. The algorithm is discussed in detail in the next sections.</p>
<sec id="j_infor440_s_011">
<label>4.1</label>
<title>Election Setup</title>
<p>Before the election, parties must collaborate to generate the parameters of the election. To encrypt the votes electors send to the parties, we employ <inline-formula id="j_infor440_ineq_024"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula>, therefore, parties must generate the <inline-formula id="j_infor440_ineq_025"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> parameters: the public modulo <italic>n</italic>, the public <italic>verification key v and the private</italic> signature key <italic>s</italic>. Since giving the private key <italic>s</italic> to a single party would result in giving up too much power, <italic>l</italic> parties apply the threshold <inline-formula id="j_infor440_ineq_026"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> key generation protocol proposed by Damgård and Koprowski (<xref ref-type="bibr" rid="j_infor440_ref_016">2001</xref>). This protocol relies on the work of Frankel <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_020">1998</xref>) to remove the necessity of a trusted dealer. It introduces a <inline-formula id="j_infor440_ineq_027"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula>-threshold <inline-formula id="j_infor440_ineq_028"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> sharing scheme in which the parameters are computed in a distributed way and the secret key is generated in <italic>l</italic> fragments. To recover the secret key, any subset of at least <italic>k</italic> parties can collaborate to find the original secret <italic>s</italic>. Even if some parties are corrupt, they would need to collaborate with at least <italic>k</italic> parties. The same applies to honest parties, only <italic>k</italic> are needed to recover the private key <italic>s</italic>. Now, we proceed to give an overview of the aforementioned key generation protocol.</p>
<p>In <inline-formula id="j_infor440_ineq_029"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula>, modulo <italic>n</italic> is computed as the product of two large primes <italic>p</italic> and <italic>q</italic>. To distribute the trust, <italic>p</italic> and <italic>q</italic> are computed as the sum of different shares chosen by the parties: <inline-formula id="j_infor440_ineq_030"><alternatives>
<mml:math><mml:mi mathvariant="italic">n</mml:mi><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mo stretchy="false">⋯</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mo stretchy="false">⋯</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">l</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow><mml:mrow><mml:mn>2</mml:mn></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mo stretchy="false">⋯</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mo stretchy="false">⋯</mml:mo><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">l</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$n=({p_{1}}+{p_{2}}+\cdots +{p_{i}}+\cdots +{p_{l}})({q_{1}}+{q_{2}}+\cdots +{q_{i}}+\cdots +{q_{l}})$]]></tex-math></alternatives></inline-formula>. To avoid parties maliciously changing its share, they are required to publish a commitment (Pedersen, <xref ref-type="bibr" rid="j_infor440_ref_037">1991</xref>) during the process. The distributed computation of <italic>n</italic> is carried out using a variant of Shamir’s secret sharing (Shamir, <xref ref-type="bibr" rid="j_infor440_ref_045">1979</xref>). This variant (Frankel <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_019">1997</xref>) also employs random polynomials in which the independent term is the secret, but it allows the computation of <italic>n</italic> to work outside prime fields.</p>
<p>Once the modulus is agreed, parties can jointly derive the public exponent <italic>v</italic> in a similar way, a distributed test division is required to test the primality of the candidates. When computing <italic>s</italic>, to prevent from revealing the shares of the polynomial, the shares <inline-formula id="j_infor440_ineq_031"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${v_{i}}$]]></tex-math></alternatives></inline-formula> are used as an exponent to compute: <inline-formula id="j_infor440_ineq_032"><alternatives>
<mml:math><mml:msup><mml:mrow><mml:mi mathvariant="italic">g</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup></mml:math>
<tex-math><![CDATA[${g^{{v_{i}}}}$]]></tex-math></alternatives></inline-formula>, <italic>g</italic> being a generator of the group defined by <italic>v</italic>. This way each party gets an additive share of the private key <inline-formula id="j_infor440_ineq_033"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${s_{i}}$]]></tex-math></alternatives></inline-formula>. Then, they proceed to construct a <inline-formula id="j_infor440_ineq_034"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula>-threshold polynomial of <italic>s</italic>. Thus, a distributed generation of <inline-formula id="j_infor440_ineq_035"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula>, in which parties only have partial information of the private key <italic>s</italic> is achieved. To decrypt or sign a message, parties must collaborate to retrieve the shared private key. The collaboration process can be seen as a graph (see Fig. <xref rid="j_infor440_fig_003">1</xref>), in which each node represents a party, and each edge represents the interchange of messages. The retrieving protocol is detailed in the following sections.</p>
<fig id="j_infor440_fig_003">
<label>Fig. 1</label>
<caption>
<p>Parties collaborate to generate <inline-formula id="j_infor440_ineq_036"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> parameters. Generation of <italic>n</italic> and <italic>v</italic> is made of parties additive shares <inline-formula id="j_infor440_ineq_037"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">p</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${p_{i}}$]]></tex-math></alternatives></inline-formula> and <inline-formula id="j_infor440_ineq_038"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">q</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${q_{i}}$]]></tex-math></alternatives></inline-formula>. Each party ends with a share of the private key <inline-formula id="j_infor440_ineq_039"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${s_{i}}$]]></tex-math></alternatives></inline-formula>.</p>
</caption>
<graphic xlink:href="infor440_g003.jpg"/>
</fig>
<p>We require all the traffic of messages as well as the commitments related to any vote to be published as transactions on the blockchain. Hence, the blockchain comprehends all the information related to the election. <inline-formula id="j_infor440_ineq_040"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula> parameters <italic>n</italic> and <italic>v</italic> are also released to the blockchain. Apart from the distributed key, each party has its own personal pair of public/private keys. They are used to sign all the transactions they make. All this information is published on the blockchain as the first block.</p>
</sec>
<sec id="j_infor440_s_012">
<label>4.2</label>
<title>Registration</title>
<p>Electors must register before the election starts. For this purpose, a local administration (e.g. city hall) defines the census of potential electors. It will also store and manage elector’s keys as well as generate <inline-formula id="j_infor440_ineq_041"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s for each elector. The administration will declare the process through which the electors will identify and register their public keys, and the termination of the registration term.</p>
<p>Any elector willing to participate will generate a two pairs of elliptic curve keys (<inline-formula id="j_infor440_ineq_042"><alternatives>
<mml:math><mml:mi mathvariant="italic">a</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">A</mml:mi></mml:math>
<tex-math><![CDATA[$a,A$]]></tex-math></alternatives></inline-formula>), (<inline-formula id="j_infor440_ineq_043"><alternatives>
<mml:math><mml:mi mathvariant="italic">b</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">B</mml:mi></mml:math>
<tex-math><![CDATA[$b,B$]]></tex-math></alternatives></inline-formula>). Then, the elector will follow the process specified by the administration, and, in case of correctly identifying, the administration will link their public keys (<inline-formula id="j_infor440_ineq_044"><alternatives>
<mml:math><mml:mi mathvariant="italic">A</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">B</mml:mi></mml:math>
<tex-math><![CDATA[$A,B$]]></tex-math></alternatives></inline-formula>) to their identity.</p>
<p>Once the elector registration term ends, the administration computes an <inline-formula id="j_infor440_ineq_045"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> per elector using their public keys and a different random number <italic>r</italic> per <inline-formula id="j_infor440_ineq_046"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>. After this, the administration sends the information to the parties. Parties send a transaction through the blockchain, making public a list with the <inline-formula id="j_infor440_ineq_047"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s of each public key pair and the associated <italic>R</italic> such that <inline-formula id="j_infor440_ineq_048"><alternatives>
<mml:math><mml:mi mathvariant="italic">R</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mi mathvariant="italic">G</mml:mi></mml:math>
<tex-math><![CDATA[$R=rG$]]></tex-math></alternatives></inline-formula>. The owners of a given <inline-formula id="j_infor440_ineq_049"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> either will be able to recover the corresponding private key computing <inline-formula id="j_infor440_ineq_050"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">H</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">a</mml:mi><mml:mi mathvariant="italic">R</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="italic">b</mml:mi></mml:math>
<tex-math><![CDATA[${H_{s}}(aR)+b$]]></tex-math></alternatives></inline-formula>, or can be notified by the administration in order to save computation time. Administrations can cooperate to compute and group <inline-formula id="j_infor440_ineq_051"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s per districts in structure transactions and to simplify the search for the final elector.</p>
<p>The same transaction also includes basic configuration information for the voting such as which are the options in the voting, the codification of the vote. This second transaction contains all the remaining public parameters of the election. Figure <xref rid="j_infor440_fig_004">2</xref> illustrates the process electors carry out in order to register themselves.</p>
<fig id="j_infor440_fig_004">
<label>Fig. 2</label>
<caption>
<p>Electors register their public keys in a local identification authority. The identification authority computes the <inline-formula id="j_infor440_ineq_052"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s. All the public parameters of the election are added as the first blocks of the blockchain.</p>
</caption>
<graphic xlink:href="infor440_g004.jpg"/>
</fig>
</sec>
<sec id="j_infor440_s_013">
<label>4.3</label>
<title>Vote Casting</title>
<p>Once the electors have decided what to vote for, they must follow three steps to cast a valid vote.</p>
<p>First, they must encrypt it to protect its direction until the election is over. To do so, they read the public key <italic>v</italic> and the modulo <italic>n</italic> forms the blockchain and apply a modular exponentiation to encrypt it using <inline-formula id="j_infor440_ineq_053"><alternatives>
<mml:math><mml:mi mathvariant="italic">RSA</mml:mi></mml:math>
<tex-math><![CDATA[$\mathit{RSA}$]]></tex-math></alternatives></inline-formula>. Before encrypting the vote, the elector must select a fixed length random <italic>mask</italic> of their choice to concatenate to the vote. Otherwise, all the votes in the same direction will result in the same encryption. The elector will obtain an encrypted value such as <inline-formula id="j_infor440_ineq_054"><alternatives>
<mml:math><mml:mtext mathvariant="italic">evote</mml:mtext><mml:mo>=</mml:mo><mml:msup><mml:mrow><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mtext mathvariant="italic">vote</mml:mtext><mml:mo stretchy="false">‖</mml:mo><mml:mtext mathvariant="italic">mask</mml:mtext><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msup><mml:mspace width="2.5pt"/><mml:mtext mathvariant="italic">mod</mml:mtext><mml:mspace width="2.5pt"/><mml:mi mathvariant="italic">n</mml:mi></mml:math>
<tex-math><![CDATA[$\textit{evote}={(\textit{vote}\| \textit{mask})^{v}}\hspace{2.5pt}\textit{mod}\hspace{2.5pt}n$]]></tex-math></alternatives></inline-formula>.</p>
<p>Next, the elector must sign the vote to prove that it has been casted by an eligible elector. To perform the ring signature generation procedure described in Algorithm <xref rid="j_infor440_fig_001">1</xref>, the electors randomly take <italic>N</italic> <inline-formula id="j_infor440_ineq_055"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s (including their own) from the list of public keys. The elector obtains a ballot confirmed by the encrypted vote and its signature: <inline-formula id="j_infor440_ineq_056"><alternatives>
<mml:math><mml:mtext mathvariant="italic">ballot</mml:mtext><mml:mo>=</mml:mo><mml:mo fence="true" stretchy="false">{</mml:mo><mml:mtext mathvariant="italic">evote</mml:mtext><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">σ</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mtext mathvariant="italic">evote</mml:mtext><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">P</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">K</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo fence="true" stretchy="false">}</mml:mo></mml:math>
<tex-math><![CDATA[$\textit{ballot}=\{\textit{evote},\sigma (\textit{evote})=(P,K,{c_{0}},r)\}$]]></tex-math></alternatives></inline-formula>. Note that the number of public keys in the ring <italic>N</italic> is tightly connected with the ambiguity of the signer. <italic>N</italic> acts as a security parameter, larger values imply more ambiguity, thus more privacy. However, it makes the signature slower and more expensive in terms of computation. It might be beneficial to establish a fixed or a minimum value for this number.</p>
<fig id="j_infor440_fig_005">
<label>Fig. 3</label>
<caption>
<p>Electors consult election parameters from the blockchain. To cast a vote, they select a fixed length mask and concatenate it to the vote. Adjacent boxes represent concatenation, while the dashed box represents encryption using modular exponentiation. Electors craft a ring signature using the consulted <inline-formula id="j_infor440_ineq_057"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s. When the ballot is properly signed and encrypted they can send it as a transaction to any party of their choice.</p>
</caption>
<graphic xlink:href="infor440_g005.jpg"/>
</fig>
<p>Finally, when the vote has been encrypted and signed, the elector sends the ballot through a blockchain transaction to a party of her choice or a random one. Figure <xref rid="j_infor440_fig_005">3</xref> illustrates the casting process.</p>
</sec>
<sec id="j_infor440_s_014">
<label>4.4</label>
<title>Vote Processing</title>
<fig id="j_infor440_fig_006">
<label>Fig. 4</label>
<caption>
<p>Process a party needs to perform to process a vote. Each party is responsible of evaluating received ballots and ensuring they are correctly added to the blockchain. All the posted blocks are signed with party’s personal private key.</p>
</caption>
<graphic xlink:href="infor440_g006.jpg"/>
</fig>
<p>Parties act like miners, listening to the blockchain network and expecting transactions addressed to them. When a party finds a transaction addressed to himself in the pool of unprocessed transactions, it proceeds to verify the integrity of the ring signature. Figure <xref rid="j_infor440_fig_006">4</xref> shows the processing of a vote. When it has received enough transactions, the party creates a block that is added to the blockchain and later broadcasted to the rest of parties:</p>
<list>
<list-item id="j_infor440_li_009">
<label>1.</label>
<p>It applies Algorithm <xref rid="j_infor440_fig_002">2</xref> to the signature to verify its correctness.</p>
</list-item>
<list-item id="j_infor440_li_010">
<label>2.</label>
<p>It creates and signs a block with the following attributes:</p>
<list>
<list-item id="j_infor440_li_011">
<label>•</label>
<p>Block ID.</p>
</list-item>
<list-item id="j_infor440_li_012">
<label>•</label>
<p>Vote and transaction IDs.</p>
</list-item>
<list-item id="j_infor440_li_013">
<label>•</label>
<p>Timestamp.</p>
</list-item>
<list-item id="j_infor440_li_014">
<label>•</label>
<p>Result of verifying the ring signature.</p>
</list-item>
</list>
</list-item>
<list-item id="j_infor440_li_015">
<label>3.</label>
<p>It adds the block to the blockchain.</p>
</list-item>
<list-item id="j_infor440_li_016">
<label>4.</label>
<p>It broadcasts the new block to the rest of the parties so they can also verify the votes.</p>
</list-item>
</list>
<p>For a more detailed and technical explanation about how the blocks are created and processed within the blockchain, we refer the reader to Appendix <xref rid="j_infor440_app_001">A</xref>.</p>
<sec id="j_infor440_s_015">
<label>4.4.1</label>
<title>Consensus</title>
<p>How different nodes reach consensus in a distributed environment? Distributed systems, blockchains included, fall under the CAP theorem (Gilbert and Lynch, <xref ref-type="bibr" rid="j_infor440_ref_024">2002</xref>; Brewer, <xref ref-type="bibr" rid="j_infor440_ref_008">2012</xref>) which states that a distributed system can not provide a strong consensus (C), high service availability (A) and partition tolerance (P) simultaneously. Since availability and partition tolerance are binary properties (they are provided or not), consistency is usually the property degraded and results in different consistency models (Muñoz-Escoí <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_032">2019</xref>). To reach consensus and provide consistency in blockchains, Bitcoin (Satoshi, <xref ref-type="bibr" rid="j_infor440_ref_044">2008</xref>) popularized the Proof of Work algorithm (Jakobsson and Juels, <xref ref-type="bibr" rid="j_infor440_ref_026">1999</xref>). When someone wants to write a new block in the chain, it must provide some proof of the expensive computational cost (e.g. a hash function with certain characteristics) invested in the block. If two blocks are validated around the same time and a bifurcation occurs, users must follow the longest chain, this is the chain with more work. If a block is left out of the longest chain, his proof of work needs to be recomputed in order to be added again.</p>
<p>Here we employ a cheaper consensus algorithm: PoA. The trust is distributed among a set of reduced parties with adversarial interests, only these parties have write access to the blockchain. Just like in game theory, a Nash equilibrium is reached where different entities collaborate because there is no reward in following a different strategy. Indeed, since our approach is fully logged and auditable and the parties are linked with real life entities, the penalization for indecorous conduct is immense. Parties have write access, but since transactions are encrypted and anonymously signed, the user’s privacy is not affected. By using PoA, our approach is faster since it does not require costly computation, environmentally friendly since it does not consume so much electricity and simpler to scale. In the improbable case of bifurcation, we follow the same principle as Proof of work, we follow the longest chain. Each party is responsible of making sure a block is properly written.</p>
</sec>
</sec>
<sec id="j_infor440_s_016">
<label>4.5</label>
<title>Tallying</title>
<p>Once the voting phases finish, parties stop accepting transactions from electors. Now they must proceed to compute the final tally.</p>
<p>First, parties must recover the secret key <italic>s</italic> to decrypt votes. To do so, a subset Λ of at least <italic>k</italic> honest parties collaborate to compute the original polynomial containing <italic>s</italic>. To recover a polynomial from <italic>k</italic> shares, defined as <inline-formula id="j_infor440_ineq_058"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">y</mml:mi></mml:mrow><mml:mrow><mml:mn>0</mml:mn></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">y</mml:mi></mml:mrow><mml:mrow><mml:mn>1</mml:mn></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal">,</mml:mo><mml:mo>…</mml:mo><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">k</mml:mi></mml:mrow></mml:msub><mml:mo>=</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">k</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal">,</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">y</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">k</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[${s_{0}}=({x_{0}},{y_{0}}),{s_{1}}=({x_{1}},{y_{1}}),\dots ,{s_{k}}=({x_{k}},{y_{k}})$]]></tex-math></alternatives></inline-formula> we employ Lagrange polynomials: <disp-formula-group id="j_infor440_dg_001">
<disp-formula id="j_infor440_eq_005">
<label>(1)</label><alternatives>
<mml:math display="block"><mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt"><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:mi mathvariant="script">L</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">x</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>=</mml:mo>
<mml:munderover accentunder="false" accent="false"><mml:mrow><mml:mstyle displaystyle="true"><mml:mo largeop="true" movablelimits="false">∑</mml:mo></mml:mstyle></mml:mrow><mml:mrow><mml:mi mathvariant="italic">j</mml:mi><mml:mo>=</mml:mo><mml:mn>0</mml:mn></mml:mrow><mml:mrow><mml:mi mathvariant="italic">k</mml:mi></mml:mrow></mml:munderover><mml:msub><mml:mrow><mml:mi mathvariant="italic">y</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">j</mml:mi></mml:mrow></mml:msub><mml:msub><mml:mrow><mml:mi mathvariant="italic">l</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">j</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">x</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal">,</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[\begin{aligned}{}& \mathcal{L}(x)={\sum \limits_{j=0}^{k}}{y_{j}}{l_{j}}(x),\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
<disp-formula id="j_infor440_eq_006">
<label>(2)</label><alternatives>
<mml:math display="block"><mml:mtable displaystyle="true" columnalign="right left" columnspacing="0pt"><mml:mtr><mml:mtd class="align-odd"/><mml:mtd class="align-even"><mml:msub><mml:mrow><mml:mi mathvariant="italic">l</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">j</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">x</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>=</mml:mo><mml:munder><mml:mrow><mml:mstyle displaystyle="true"><mml:mo largeop="true" movablelimits="false">∏</mml:mo></mml:mstyle></mml:mrow><mml:mrow><mml:mtable rowspacing="0" columnalign="center"><mml:mtr><mml:mtd><mml:mn>0</mml:mn><mml:mo>⩽</mml:mo><mml:mi mathvariant="italic">m</mml:mi><mml:mo>⩽</mml:mo><mml:mi mathvariant="italic">k</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi mathvariant="italic">m</mml:mi><mml:mo stretchy="false">∈</mml:mo><mml:mi mathvariant="normal">Λ</mml:mi></mml:mtd></mml:mtr><mml:mtr><mml:mtd><mml:mi mathvariant="italic">m</mml:mi><mml:mo stretchy="false">≠</mml:mo><mml:mi mathvariant="italic">j</mml:mi></mml:mtd></mml:mtr></mml:mtable></mml:mrow></mml:munder><mml:mstyle displaystyle="true"><mml:mfrac><mml:mrow><mml:mi mathvariant="italic">x</mml:mi><mml:mo>−</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">m</mml:mi></mml:mrow></mml:msub></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">j</mml:mi></mml:mrow></mml:msub><mml:mo>−</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">x</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">m</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:mfrac></mml:mstyle><mml:mo>.</mml:mo></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[\begin{aligned}{}& {l_{j}}(x)=\prod \limits_{\substack{0\leqslant m\leqslant k\\ {} m\in \Lambda \\ {} m\ne j}}\frac{x-{x_{m}}}{{x_{j}}-{x_{m}}}.\end{aligned}\]]]></tex-math></alternatives>
</disp-formula>
</disp-formula-group></p>
<p>Once we recover the polynomial <inline-formula id="j_infor440_ineq_059"><alternatives>
<mml:math><mml:mi mathvariant="script">L</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">x</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{L}(x)$]]></tex-math></alternatives></inline-formula>, <italic>s</italic> can be obtained as: 
<disp-formula id="j_infor440_eq_007">
<label>(3)</label><alternatives>
<mml:math display="block"><mml:mtable displaystyle="true"><mml:mtr><mml:mtd><mml:mi mathvariant="italic">s</mml:mi><mml:mo>=</mml:mo><mml:mstyle displaystyle="true"><mml:mfrac><mml:mrow><mml:mi mathvariant="italic">L</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mn>0</mml:mn><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow><mml:mrow><mml:msup><mml:mrow><mml:mi mathvariant="normal">Δ</mml:mi></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup></mml:mrow></mml:mfrac></mml:mstyle></mml:mtd></mml:mtr></mml:mtable></mml:math>
<tex-math><![CDATA[\[ s=\frac{L(0)\Delta }{{\Delta ^{3}}}\]]]></tex-math></alternatives>
</disp-formula> 
being Δ a factor used when generating the RSA key.<xref ref-type="fn" rid="j_infor440_fn_001">1</xref><fn id="j_infor440_fn_001"><label><sup>1</sup></label>
<p>We note that <inline-formula id="j_infor440_ineq_060"><alternatives>
<mml:math><mml:mi mathvariant="normal">Δ</mml:mi><mml:mo>=</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo>!</mml:mo></mml:math>
<tex-math><![CDATA[$\Delta =l!$]]></tex-math></alternatives></inline-formula>. It is used for computing the random polynomials when using Frankel <italic>et al.</italic> proposal (Frankel <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_019">1997</xref>).</p></fn> When <italic>s</italic> is recovered, parties can decrypt the received votes and compute the final tally. Parties must analyse the received votes directly from electors and those received from another parties. This way, each party can compute a global and independent tally. If multiple votes contain the same key image, only the last vote will be considered valid.</p>
<p>When the tally is completed, each party has to publish a new block containing each received transaction, the result of checking the ring signature and the direction of the vote. At the end of the block they must add the results of the election and the private key of the election <italic>s</italic>. This message has to be signed by the parties. The private key is also published to allow electors to compute their own tally. If all the parties agree with the tally the election is finished. Figure <xref rid="j_infor440_fig_007">5</xref> represents the tallying stage.</p>
<fig id="j_infor440_fig_007">
<label>Fig. 5</label>
<caption>
<p>Parties collaborate to recover the private key <italic>s</italic>. Then, each of them individually computes a personal tally and adds it to the blockchain. It contains all the information needed by a third party to audit the tally.</p>
</caption>
<graphic xlink:href="infor440_g007.jpg"/>
</fig>
</sec>
</sec>
<sec id="j_infor440_s_017">
<label>5</label>
<title>Computational Time Analysis</title>
<p>We devote this section to, first, analyse the asymptotic computational time complexity of our election scheme, both for the elector and the involved parties; and, second, to provide a comparison with the systems reviewed in Section <xref rid="j_infor440_s_002">2</xref>.</p>
<p>Blockchain-based systems measure their throughput as the maximum number of transactions per second (TPS) they can process. TPS are heavily determined by the consensus algorithm employed: block proposal, block validation, and the mechanism used to solve forks among others. Here, we note that, by using PoA instead of Proof-of-Work, the limiting factor is no longer the block proposal but the block validation. Because no extensive hashing is required to propose blocks. Therefore, ring signatures, which are the main factor in block validation, determine the number of TPS.</p>
<p>Next, we summarize the main stages of a consensus protocol and determine the associated computational time complexity. For computing the asymptotic time complexity, we consider the modular exponentiation, employed in RSA and the crafting/verification of a ring signature, as basic units. This operation is the most expensive and the basic construction units of our scheme. Modular exponentiation has a time complexity of <inline-formula id="j_infor440_ineq_061"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n)$]]></tex-math></alternatives></inline-formula> bit operations (Menezes <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_030">1996</xref>), being <italic>n</italic> the input and <inline-formula id="j_infor440_ineq_062"><alternatives>
<mml:math><mml:mo movablelimits="false">log</mml:mo><mml:mi mathvariant="italic">n</mml:mi></mml:math>
<tex-math><![CDATA[$\log n$]]></tex-math></alternatives></inline-formula> its size in bits.</p>
<list>
<list-item id="j_infor440_li_017">
<label>•</label>
<p><bold>Block proposal:</bold> Thanks to PoA, no intensive computation is required to propose a new block, no resource-consuming hashing is employed with respect to Proof-of-Work. Every identified party who receives enough transactions to craft a block may propose a new one. Only a modular exponentation is required to sign the proposed block. Then, the complexity to propose a block can be expressed as <inline-formula id="j_infor440_ineq_063"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_018">
<label>•</label>
<p><bold>Block validation:</bold> The validation of a block requires to check the ring signature of every transaction contained within it. The computational complexity of this validation varies depending on the elliptic curve used and the size of the ring signature employed. Also note that we require all parties to validate all the new blocks, therefore the validation process is also affected by the number of involved parties. To validate the block, the signature of the party who created the block must also be checked. This results in one additional modular exponentiation. The asymptotic complexity of block validation can be expressed as <inline-formula id="j_infor440_ineq_064"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">t</mml:mi><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mi mathvariant="italic">p</mml:mi><mml:mo>+</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(t{r_{v}}p+{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>, where <italic>t</italic> represents the number of transactions, <inline-formula id="j_infor440_ineq_065"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${r_{v}}$]]></tex-math></alternatives></inline-formula> the cost of verifying a ring signature and <italic>p</italic> the number of parties involved in the consensus.</p>
</list-item>
<list-item id="j_infor440_li_019">
<label>•</label>
<p><bold>Information propagation:</bold> Message communication is another crucial factor to determine the throughput of a system. However, since we work with a permissioned blockchain, the number of nodes that send messages is minimal. A simple broadcast between parties is enough to communicate new blocks. Therefore, the number of messages remains linear with respect to the number of blocks <italic>b</italic> and the number of parties. Each message must be signed by the sending party, so the complexity can be regarded as: <inline-formula id="j_infor440_ineq_066"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(bp{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
<list-item id="j_infor440_li_020">
<label>•</label>
<p><bold>Block finalization:</bold> For a block to be finally accepted by all parties, it must be added in the longest chain. If two parties try to add a block at the very same time, a collision occurs. As we mentioned in the previous section, we follow the longest chain rule and each party is responsible for checking whether their blocks are correctly added to the blockchain. As the validation of a block does not depend on the previous block’s hash, adding an already validated block for a second time does not require further computation. However, it is safe to assume that probably the block would be outdated and a new block proposal and its corresponding propagation should be carried out. The complexity can be expressed as <inline-formula id="j_infor440_ineq_067"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">q</mml:mi><mml:mi mathvariant="italic">b</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(qbp{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>, <italic>q</italic> being the number of collisions requiring a new block re-added to the blockchain. The number of collisions is difficult to estimate since it depends on many empirical factors and varies from election to election. The worst case would be an election on which all the electors vote at the same time and the ballots sent are equally distributed between all parties. That would result in many concurrent collisions. Because of the unequal distribution of a real election, we can assume <italic>q</italic> will be low when compared with successful finalized blocks. Nonetheless, if the number of collisions becomes a problem, we could abandon following the longest chain in favour of a byzantine fault tolerance consensus or a round-based writing (Xiao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_051">2020</xref>).</p>
</list-item>
<list-item id="j_infor440_li_021">
<label>•</label>
<p><bold>Reward mechanism:</bold> In our adaptation of PoA, the reward and the purpose of the election scheme are the same thing. Parties are, allegedly, interested in carrying out the election process. Parties are motivated in an adequate election since their public reputations are at stake. Since the reward is abstract it does not affect the computational time complexity.</p>
</list-item>
<list-item id="j_infor440_li_022">
<label>•</label>
<p><bold>Tallying:</bold> For computing the final tally, parties must collaborate to recover the secret key and then proceed to decrypt all the votes. The collaboration requires <italic>p</italic> signed messages and the decryption needs one modular exponentiation per transaction (vote). The complexity of the tally can be expressed as <inline-formula id="j_infor440_ineq_068"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">p</mml:mi><mml:mi mathvariant="italic">t</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(pt{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>.</p>
</list-item>
</list>
<p>Therefore, the total time complexity of the system can be expressed as <inline-formula id="j_infor440_ineq_069"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">t</mml:mi><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mi mathvariant="italic">p</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">b</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">q</mml:mi><mml:mi mathvariant="italic">b</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo>+</mml:mo><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">p</mml:mi><mml:mi mathvariant="italic">t</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n)+\mathcal{O}(t{r_{v}}p)+\mathcal{O}({\log ^{3}}n)+\mathcal{O}(bp{\log ^{3}}n)+\mathcal{O}(qbp{\log ^{3}}n)+\mathcal{O}(pt{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula>. Given that the number of blocks <italic>b</italic> depends linearly on the number of transactions <italic>t</italic> and that <italic>t</italic> dominates <italic>b</italic>, we can substitute <italic>b</italic> for <italic>t</italic>. After grouping some terms, the final complexity can be simplified as <inline-formula id="j_infor440_ineq_070"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">t</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mo>+</mml:mo><mml:mi mathvariant="italic">q</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(tp({r_{v}}+q{\log ^{3}}n))$]]></tex-math></alternatives></inline-formula>. Thus, the system’s time complexity depends on the cost of verifying ring signatures and on the cost of running modular exponentiations, which are both affected by the number of involved parties, the number of collisions and the total transactions processed by the system.</p>
<p>We did not consider the cost of distributely generating the keys for RSA encryption because it can be done offline before the election process and it is carried out off the blockchain. Apart from the initial genesis blocks, which would have only required a pair of modular exponentiations, this process does not affect the complexity of our scheme.</p>
<p>Besides, one elector willing to craft and cast a vote, only needs to perform the encryption of the vote and the associated ring signature. The time complexity for the final user can be expressed as <inline-formula id="j_infor440_ineq_071"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n+{r_{c}})$]]></tex-math></alternatives></inline-formula>, being <inline-formula id="j_infor440_ineq_072"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${r_{c}}$]]></tex-math></alternatives></inline-formula> the cost associated to craft a ring signature.</p>
<sec id="j_infor440_s_018">
<label>5.1</label>
<title>Ring Signature Performance</title>
<p>Unlike modular exponentiation, ring signatures are not an operator. Ring signatures are a quite complex cryptographic construct that includes multiple basic operators, so the comparison is not straightforward and computational time complexity is dominated by ring signatures. Ring signatures time complexity also depends on some parameters apart from the input size such as the size of the ring, or the desired level of security. For these reasons, in Section <xref rid="j_infor440_s_017">5</xref>, we chose to leave the computational complexity associated to craft/verify a signature as a variable to provide a clear view of the time complexity. However, now we also provide an implementation of these signatures to present an empirical result of what the real TPS of the system would be.</p>
<p>The code developed for this performance analysis was implemented using Python 3 and it is publicly available on GitHub.<xref ref-type="fn" rid="j_infor440_fn_002">2</xref><fn id="j_infor440_fn_002"><label><sup>2</sup></label>
<p><uri>https://github.com/Fantoni0/RingCTPerformance</uri>.</p></fn> We provide a framework to test how the different parameters and different elliptic curves affect the performance of ring signatures. Our goal with this framework is to provide a tangible implementation and to obtain real performance time measurements. A low-level implementation in a different language such as C++ would probably benefit the final throughput.</p>
<p>Figures <xref rid="j_infor440_fig_008">6</xref>a and <xref rid="j_infor440_fig_008">6</xref>b represent the elapsed time to craft or verify a signature under different parameters respectively. We chose 4 different elliptic curves for the comparative. Each one provides a different level of security: brainpoolP160r1 provides 80 bits of security; Curve-192 provides 91 bits; Curve-224 provides 112 bits and, Curve-256 provides 128 bits. Brainpool curve provides a security level comparable to use RSA with a 1024 bits modulo (Gallagher, <xref ref-type="bibr" rid="j_infor440_ref_021">2013</xref>), which is more than enough to protect the voter’s privacy.<xref ref-type="fn" rid="j_infor440_fn_003">3</xref><fn id="j_infor440_fn_003"><label><sup>3</sup></label>
<p>A 1024-bit key in RSA is considered safe for the next decades. No key bigger than 829 bits has ever been factored.</p></fn> As expected, the required time grows linearly when we increase the size of the ring or the complexity of the curve. We believe that using brainpool and a ring size of 64 public keys is more than enough to achieve the security needed for our scheme. Specially due to the short term of security required by our proposal: the votes only need to be secret until the final tally is computed.</p>
<fig id="j_infor440_fig_008">
<label>Fig. 6</label>
<caption>
<p>Ring signature performance times for crafting and verifying the same message under different parameters. Experiments carried out on a AMD Ryzen 7 3700X with 8 cores and 16 threads.</p>
</caption>
<graphic xlink:href="infor440_g008.jpg"/>
</fig>
<p>The figures here presented were obtained using a personal computer (AMD Ryzen 7 3700X). Since there are no dependencies between transactions, the verification is a parallelizable task. We use multiple cores to take advantage of this aspect. Using a professional server’s processor and decentralizing the task among multiple servers would yield a great performance improvement. Nonetheless, a single personal computer is capable of verifying 3–4 TPS and 200 in a minute, using immoderate high standard security parameters.</p>
<p>Also note that the times for crafting/verification are very similar. This is because the verification algorithm (see Section <xref rid="j_infor440_s_009">3.3</xref>) requires to re-create the signature to check its validity.</p>
</sec>
<sec id="j_infor440_s_019">
<label>5.2</label>
<title>Comparative Evaluation of Systems</title>
<p>We devote this section to compare the performance of our proposal with those studied in Section <xref rid="j_infor440_s_002">2</xref>. Ring signatures and modular exponentiations determine the time complexity of our approach. Modular exponentiations are a common operator present in most of the related works (except if they are completely based on ECC). For this reason, we consider modular exponentiation, and its associated complexity in bit operations, as the atomic unit in the analysis of the time complexity.</p>
<p>Comparing different e-voting proposals is not trivial: some systems do no disclose all the details, not all the systems are directly comparable and not all the works provide a time complexity analysis. Thus, some of the reviewed works, are left out of the comparison: because they do not provide a performance analysis nor enough information to obtain an asymptotic complexity (Noizat, <xref ref-type="bibr" rid="j_infor440_ref_035">2015</xref>; Lee <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_029">2016</xref>; Ayed, <xref ref-type="bibr" rid="j_infor440_ref_002">2017</xref>; Tarasov and Tewari, <xref ref-type="bibr" rid="j_infor440_ref_046">2017</xref>; Lai and Wu, <xref ref-type="bibr" rid="j_infor440_ref_028">2018</xref>); because, despite providing a thorough analysis, they are based on different problems and the analogy would not hold (Gao <italic>et al.</italic>, <xref ref-type="bibr" rid="j_infor440_ref_022">2019</xref>); or, because they are implementation approaches and the authors only report user timings (Wu, <xref ref-type="bibr" rid="j_infor440_ref_050">2017</xref>).</p>
<p>Let us note, that despite not providing a time analysis, Wei supplies a complexity analysis of the ring signatures employed under different ring sizes and the associated gas (unit for measuring cost of Ethereum transactions) cost of running their voting protocol on the Ethereum blockchain. Also, Wu provides empirical times and sizes of the ring signatures used with varying ring sizes. Unfortunately, neither of them detail the level of security engaged in those tasks.</p>
<p>We compare the asymptotic time complexity of the remaining works to prove the validity of our approach. When the methods do not specify a part of their protocol or do not provide enough information, we introduce a variable in the complexity analysis. Table <xref rid="j_infor440_tab_001">1</xref> summarizes the associated complexity for the elector and for the protocol to process the received votes. For more details, we refer the reader to the original works. Protocols employing different kinds of ring signatures are compared, to provide a fair example we assume the time to craft <inline-formula id="j_infor440_ineq_073"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${r_{c}}$]]></tex-math></alternatives></inline-formula> or to verify <inline-formula id="j_infor440_ineq_074"><alternatives>
<mml:math><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub></mml:math>
<tex-math><![CDATA[${r_{v}}$]]></tex-math></alternatives></inline-formula> signature are comparable and can be agglutinated under the same variable despite their different implementations.</p>
<table-wrap id="j_infor440_tab_001">
<label>Table 1</label>
<caption>
<p>Table representing the asymptotic complexity of the work performed by the elector and the system in number of bit operations. In the table: <italic>r</italic> refers to the number of rounds in the case of round voting, <italic>v</italic> represents the number of votes, <italic>c</italic> represents the number of candidates, <italic>s</italic> references the number of possible scores for each candidate in the case of ranked elections, <italic>t</italic> represents the number of transactions in a blockchain environment, and <italic>p</italic> the number of parties involved.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin"/>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Elector’s cost</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">System’s cost</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Salazar <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_043">2010</xref>)</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_075"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">r</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(r({\log ^{3}}n+{r_{c}}))$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_076"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">v</mml:mi><mml:mi mathvariant="italic">r</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(vr({\log ^{3}}n+{r_{v}}))$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Chen <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_014">2008</xref>)</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_077"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n+{r_{c}})$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_078"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">v</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(vp({\log ^{3}}n+{r_{v}}))$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Yang <italic>et al.</italic> (<xref ref-type="bibr" rid="j_infor440_ref_052">2020</xref>)</td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_079"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">c</mml:mi><mml:mi mathvariant="italic">s</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(cs{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_080"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">c</mml:mi><mml:mi mathvariant="italic">t</mml:mi><mml:mi mathvariant="italic">s</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(cts{\log ^{3}}n)$]]></tex-math></alternatives></inline-formula></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Our proposal</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor440_ineq_081"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">c</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}({\log ^{3}}n+{r_{c}})$]]></tex-math></alternatives></inline-formula></td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin"><inline-formula id="j_infor440_ineq_082"><alternatives>
<mml:math><mml:mi mathvariant="script">O</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">t</mml:mi><mml:mi mathvariant="italic">p</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">q</mml:mi><mml:msup><mml:mrow><mml:mo movablelimits="false">log</mml:mo></mml:mrow><mml:mrow><mml:mn>3</mml:mn></mml:mrow></mml:msup><mml:mi mathvariant="italic">n</mml:mi><mml:mo>+</mml:mo><mml:msub><mml:mrow><mml:mi mathvariant="italic">r</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">v</mml:mi></mml:mrow></mml:msub><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$\mathcal{O}(tp(q{\log ^{3}}n+{r_{v}}))$]]></tex-math></alternatives></inline-formula></td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Note that the number of votes <italic>v</italic> and the number of transactions <italic>t</italic> are semantically equivalent, they both represent the number of processed votes. On the other hand, the number of candidates <italic>c</italic> and the number of parties <italic>p</italic>, not always represent the same partners. Not all protocols directly involve the candidates and some systems include extra authorities to handle credentials or distribute responsibility.</p>
<p>In Table <xref rid="j_infor440_tab_001">1</xref>, the results obtained by our proposal compete with the reviewed systems. Indeed, Chen’s system and our proposal require the minimum effort for the final elector. Regarding system’s complexity; it can be observed that, as for many works, it scales linearly with the number of involved parties and total number of votes. Salazar and Yang’s works are also affected by other factors given that they support round and ranking e-voting respectively. Our proposed e-voting protocol is scalable due to its linear complexity and introduces the blockchain as a distributed public ledger without losing performance with respect to analogous works.</p>
</sec>
</sec>
<sec id="j_infor440_s_020">
<label>6</label>
<title>Properties</title>
<p>A voting scheme can be described by its properties. These properties define what it can provide and under which circumstances. Usually, the desired properties to be held by any electronic voting system are: verifiability, accuracy, democracy, privacy and robustness. We now discuss and prove that our proposal fulfills all of them. Let us note our proposal is based on well-known cryptographic primitives, therefore most of the proofs rely on the underlying problems of those primitives.</p>
<p><bold>Verifiability</bold></p>
<p>Verifiability implies the existence of auditing mechanisms for the election, ensuring that the voting process has been correctly developed. We here distinguish three types of verifiability: 
<list>
<list-item id="j_infor440_li_023">
<label>•</label>
<p>Casted-as-intended: the ballot is sent with the desired vote direction.</p>
</list-item>
<list-item id="j_infor440_li_024">
<label>•</label>
<p>Recorded-as-casted: the ballot is recorded in the blockchain as it was sent.</p>
</list-item>
<list-item id="j_infor440_li_025">
<label>•</label>
<p>Tallied-as-recorded: the ballot will be tallied with the same vote direction as recorded.</p>
</list-item>
</list> 
<statement id="j_infor440_stat_001"><label>Theorem 1.</label>
<p><italic>Our e-voting protocol is end-to-end verifiable.</italic></p></statement><statement id="j_infor440_stat_002"><label>Proof.</label>
<p>Key images (see Section <xref rid="j_infor440_s_008">3.2</xref>) work as a private receipt. Thus, allowing the elector to read from the blockchain to check whether their ballot was casted, recorded and tallied properly. As mentioned above, key images are anonymous and do not compromise elector’s privacy.</p>
<p>In regard to universal verifiability, we note that any person, participant or not in the election process, is able to ensure that every vote has been tallied-as-recorded. This is achieved thanks to the public nature of the blockchain. Note that this does not ensure that the vote has neither been casted-as-intended nor recorded-as-casted because that would violate the privacy property.</p>
<p>In summary, our proposal provides universal verifiability by posting in the blockchain the key to decrypt the orientation of every vote recorded. Anyone can take the key and the votes stored in the blockchain to compute a tally by themselves. Thus, allowing to audit the final result of the election.  □</p></statement><bold>Accuracy</bold></p>
<p>Also known as <italic>correctness</italic>, it demands that the tally correspond with the actual outcome of the election. To achieve this: no one can change anyone else’s vote; all valid votes are included in the final tally; and, no invalid vote will be included in the tally. <statement id="j_infor440_stat_003"><label>Theorem 2.</label>
<p><italic>As RSA encryption system remains secure, the system is auditable by third parties, and ring signatures are unforgeable, then our voting protocol is accurate.</italic></p></statement><statement id="j_infor440_stat_004"><label>Proof.</label>
<p>We divide the proof in three parts: 
<list>
<list-item id="j_infor440_li_026">
<label>(a)</label>
<p><italic>No one can change anyone else’s vote</italic>: votes are encrypted using RSA: assuming that no elector shares their secret key; that at last <italic>k</italic> parties are honest; and, that the Discrete Logarithm Problem (DLP) has no efficient solution for carefully selected parameters, the votes remain unaltered until the final tally.</p>
</list-item>
<list-item id="j_infor440_li_027">
<label>(b)</label>
<p><italic>All valid votes are included in the final tally</italic>: parties are responsible for processing and tallying all received valid votes. Given universal verifiability proved in Theorem <xref rid="j_infor440_stat_001">1</xref>, not including all valid votes would result in an early finalization of the election.</p>
</list-item>
<list-item id="j_infor440_li_028">
<label>(c)</label>
<p><italic>No invalid vote will be included in the tally</italic>: for a vote to be included in the final tally, its ring signature must be valid. Assuming that the Elliptic-Curve-DLP(ECDLP) has no efficient solution, no signature can be forged.</p>
</list-item>
</list> 
 □</p></statement><bold>Democracy</bold></p>
<p>Democracy guarantees that only eligible electors are allowed to cast a vote, and that they can only do it once. <statement id="j_infor440_stat_005"><label>Theorem 3.</label>
<p><italic>If the ECDLP is semantically secure, no one can impersonate a valid elector or perform double voting.</italic></p></statement><statement id="j_infor440_stat_006"><label>Proof.</label>
<p>The proof can be separated in two parts:</p>
<p>
<list>
<list-item id="j_infor440_li_029">
<label>(a)</label>
<p><italic>Eligibility</italic>: only electors listed in the census are able to register their public keys in the registration administration. The list of public keys and elector’s identifier will be stored in the blockchain to prevent the administration from creating fake electors. If the ECDLP problem is computationally secure, only the registered elector can recover their personal <inline-formula id="j_infor440_ineq_083"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula> from the public list.</p>
</list-item>
<list-item id="j_infor440_li_030">
<label>(b)</label>
<p><italic>Double voting</italic>: key images work as a commitment of the private and public key of a elector. As stated previously, if the ECDLP has no efficient solution, then no modification of the key image can be made. Therefore, each elector is authorized, without revealing their real identity, to vote only once.</p>
</list-item>
</list> 
 □</p></statement><bold>Privacy</bold></p>
<p>Privacy refers to the inability of linking an elector’s identity to the direction of her vote. <statement id="j_infor440_stat_007"><label>Theorem 4.</label>
<p><italic>If the ECDLP has no efficient solution, elector’s identity remains private.</italic></p></statement><statement id="j_infor440_stat_008"><label>Proof.</label>
<p>Key images, ring signatures and <inline-formula id="j_infor440_ineq_084"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s are based on ECDLP. These are the only cryptographic constructs related to elector’s identity. Assuming that, under the right parameters, no efficient solution exists for ECDLP, we can conclude there is no method to expose the elector’s identity. Therefore, the elector is protected by the size of the ring signature, because any member of the ring is a possible signer with the same probability. We also stress that even if two equal votes were encrypted using the same ring of public keys, their signature will differ and privacy will be granted.  □</p></statement><bold>Robustness</bold></p>
<p>Robustness implies that no reasonably sized coalition of electors nor authorities would be able to significantly disrupt the election. As mentioned above, in a <inline-formula id="j_infor440_ineq_085"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula>-threshold RSA key sharing scheme <italic>l</italic> represents the total number of involved parties, and <italic>k</italic> represents the minimum of collaborating parties needed to recover the secret key. <statement id="j_infor440_stat_009"><label>Theorem 5.</label>
<p><italic>In a</italic> <inline-formula id="j_infor440_ineq_086"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula><italic>-threshold RSA key sharing scheme, if at least</italic> <inline-formula id="j_infor440_ineq_087"><alternatives>
<mml:math><mml:mi mathvariant="italic">l</mml:mi><mml:mo>−</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo>+</mml:mo><mml:mn>1</mml:mn></mml:math>
<tex-math><![CDATA[$l-k+1$]]></tex-math></alternatives></inline-formula> <italic>parties are honest, our voting protocol is robust.</italic></p></statement><statement id="j_infor440_stat_010"><label>Proof.</label>
<p>Parties are the only ones with write access, thus, electors cannot directly interfere in any of the process stages. To recover the private key and compute the final tally at least <italic>k</italic> parties must cooperate. If a party (or any subset of them lower than <italic>k</italic>) misbehaves, their actions are publicly auditable through the blockchain. Therefore they can be sanctioned and left out of the process without compromising the running election nor the final tally. Let us note, that even in the worst case of <italic>k</italic> malicious parties colliding to recover the secret key before the election ends, elector’s privacy and the integrity of the vote will prevail since they depend on the ring signature bounded to each vote. They will be only capable of knowing the directions of the votes before the tally phase.  □</p></statement><bold>Other properties</bold></p>
<p>Uncoercibility refers to the impossibility of an elector of being coerced to change their vote. It is tightly related with the concept of receipt-freeness: if a voter can not create a receipt to prove how they voted, the coercers will not get any reassurance. Our system does not provide receipt-freeness, an elector can use their key image as a receipt of the direction of their vote. Receipt-freeness can be obtained by letting the authorities generate or manage some part of the credentials. However, this somehow contradicts some basic properties of voting-schemes. We have decided to prioritize and emphasize the properties based on the individual confidence of the system, allowing electors to have a receipt. Nevertheless, note that our proposal allows for multiple-voting, allowing to consider the last vote as the valid one. While this does not provide complete uncoercibility, it provides a bribed or coerced elector with a mechanism to later change their vote.</p>
</sec>
<sec id="j_infor440_s_021">
<label>7</label>
<title>Conclusions</title>
<p>In this paper, we present a new voting protocol. Our proposed scheme is secure and focuses on providing arguments to promote participation and deal with the trust issues. Without renouncing to secure and solid cryptographic proofs, we put the traditional parties of the voting process inside the system. Each political party was given limited capabilities to reach a shared goal. They are accountable for their actions and every misconduct can be detected and audited. The trust is therefore distributed and local misbehaviours are logged and do not compromise the robustness of the system. The signer ambiguity provided by ring signatures and the public and decentralized blockchain, makes a secure, public and universally verifiable voting system possible. All the process is articulated through the blockchain, all the related information is contained in it. When the election ends, the private key is made public and anyone can review the votes, the parties’ actions and the final tally.</p>
<p>We adapt PoA to the problem of electronic voting, as a cheaper consensus algorithm to distribute trust. PoA is intended for situations when, because of the problem definition, a small group requires a special role. It fits perfectly in the electronic voting paradigm. PoA allowed us to introduce political parties as active partners in the voting process to increase confidence in the system as ledger criterium. PoA is also more efficient in terms of computational work and makes it easily scalable to different types of elections. Apart from the <inline-formula id="j_infor440_ineq_088"><alternatives>
<mml:math><mml:mo mathvariant="normal" fence="true" stretchy="false">(</mml:mo><mml:mi mathvariant="italic">k</mml:mi><mml:mo mathvariant="normal">,</mml:mo><mml:mi mathvariant="italic">l</mml:mi><mml:mo mathvariant="normal" fence="true" stretchy="false">)</mml:mo></mml:math>
<tex-math><![CDATA[$(k,l)$]]></tex-math></alternatives></inline-formula>-threshold RSA key sharing scheme, which grows loglinear with the number of involved parties, the rest of the system is linear, since ring signatures scale linearly with the size of the ring and all the computational work done by the parties scales linearly with the number of votes. Note that the threshold RSA sharing is done off-line and its pre-computation does not affect the election performance.</p>
</sec>
</body>
<back>
<app-group>
<app id="j_infor440_app_001"><label>A</label>
<title>Technical Blockchain Specification</title>
<p>We devote this appendix to provide the technical specification of the blockchain described in the article. Our purpose is to provide the specifics and the structure needed to implement the blockchain required to run our voting protocol.</p>
<p>We divide the specification into two sections. First, we detail the data structures that define the blockchain. Secondly, we determine the methods the nodes (parties) will need to operate in a functional blockchain. Some implementation details such as node discovery, size in bytes or network particulars are not considered because they are not in the scope of this appendix. However, we provide enough information for an interested reader to build a functional blockchain.</p>
<sec id="j_infor440_s_022">
<label>A.1</label>
<title>Blockchain Data Structures</title>
<p>Here we define the structure for transactions and blocks. Our protocol is designed for e-voting. Therefore, we could get rid of the monetary tokens, however, we decided to provide the blockchain specification with support for a token. Parties are responsible for supplying the <inline-formula id="j_infor440_ineq_089"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s during the registration phase with enough tokens to create transactions. There must be enough tokens to allow for multiple votes to prevent coercion. If needed, the change to a version without support for tokens is straightforward.</p>
<sec id="j_infor440_s_023">
<label>A.1.1</label>
<title>Transactions</title>
<p>Transactions are the basic unit of information in the blockchain. They are broadcasted into the public network and defined by the set of referenced inputs and outputs. They are used to register votes in our e-voting protocol. In our e-voting scheme, the inputs represent the elector’s <inline-formula id="j_infor440_ineq_090"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>, while the outputs represent the parties’ addresses. The elector decides which party they send the vote to by configuring the outputs of the transaction. Table <xref rid="j_infor440_tab_002">2</xref> discloses the structure of transactions and Table <xref rid="j_infor440_tab_003">3</xref> defines the structure of inputs/outputs.</p>
<table-wrap id="j_infor440_tab_002">
<label>Table 2</label>
<caption>
<p>Transaction structure.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Version</td>
<td style="vertical-align: top; text-align: left">Number version of the protocol</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Inputs</td>
<td style="vertical-align: top; text-align: left">List of referenced inputs</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Outputs</td>
<td style="vertical-align: top; text-align: left">List of outputs</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Vote</td>
<td style="vertical-align: top; text-align: left">Encrypted elector’s vote</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Signature</td>
<td style="vertical-align: top; text-align: left">Ring signature of the transaction</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Transaction ID</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Hash identifying the transaction</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="j_infor440_tab_003">
<label>Table 3</label>
<caption>
<p>Input andoutput structure.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Amount</td>
<td style="vertical-align: top; text-align: left">Amount of tokens in the key</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Address</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Public key identifying the address</td>
</tr>
</tbody>
</table>
</table-wrap>
</sec>
<sec id="j_infor440_s_024">
<label>A.1.2</label>
<title>Blocks</title>
<p>A block is a set of bundled and validated transactions. Blocks constitute the basic building component of a blockchain, because as its name implies, a blockchain is an ordered set of blocks. Table <xref rid="j_infor440_tab_004">4</xref> shows the structure of an ordinary block in our blockchain.</p>
<table-wrap id="j_infor440_tab_004">
<label>Table 4</label>
<caption>
<p>Block structure.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Version</td>
<td style="vertical-align: top; text-align: left">Number version of the protocol</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Timestamp</td>
<td style="vertical-align: top; text-align: left">Time of the block creation</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Previous Hash</td>
<td style="vertical-align: top; text-align: left">Hash identifying the previous block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Height</td>
<td style="vertical-align: top; text-align: left">Distance to the first block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Signature</td>
<td style="vertical-align: top; text-align: left">Digital signature of the block creator</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Transactions</td>
<td style="vertical-align: top; text-align: left">List of the transactions contained</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Merkle Root</td>
<td style="vertical-align: top; text-align: left">Merkle’s root hash of the transactions</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Block ID</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Hash identifying the block</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>Besides from general blocks containing votes, our scheme contains three special blocks. The structure of the first two configuration blocks is detailed in Tables <xref rid="j_infor440_tab_005">5</xref> and <xref rid="j_infor440_tab_006">6</xref>, respectively. And the last tallying block as described in Table <xref rid="j_infor440_tab_007">7</xref>. The first two blocks contain all the public information and parameters needed to properly run the election. The last tallying block contains the secret key needed to decrypt the votes and provides a summary of the results of the election.</p>
<table-wrap id="j_infor440_tab_005">
<label>Table 5</label>
<caption>
<p>First block in the chain describing configuration parameters.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Version</td>
<td style="vertical-align: top; text-align: left">Number version of the protocol</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Timestamp</td>
<td style="vertical-align: top; text-align: left">Time of the block creation</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Height</td>
<td style="vertical-align: top; text-align: left">Distance to the first block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">RSA parameters</td>
<td style="vertical-align: top; text-align: left">Public key <italic>v</italic> and modulus <italic>n</italic></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Private shares</td>
<td style="vertical-align: top; text-align: left">Commitments <inline-formula id="j_infor440_ineq_091"><alternatives>
<mml:math><mml:msup><mml:mrow><mml:mi mathvariant="italic">g</mml:mi></mml:mrow><mml:mrow><mml:msub><mml:mrow><mml:mi mathvariant="italic">s</mml:mi></mml:mrow><mml:mrow><mml:mi mathvariant="italic">i</mml:mi></mml:mrow></mml:msub></mml:mrow></mml:msup></mml:math>
<tex-math><![CDATA[${g^{{s_{i}}}}$]]></tex-math></alternatives></inline-formula> of the private keys for each party</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Public keys</td>
<td style="vertical-align: top; text-align: left">Parties’ public keys</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Block ID</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Hash identifying the block</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="j_infor440_tab_006">
<label>Table 6</label>
<caption>
<p>Second block in the chain describing configuration parameters.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Version</td>
<td style="vertical-align: top; text-align: left">Number version of the protocol</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Timestamp</td>
<td style="vertical-align: top; text-align: left">Time of the block creation</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Previous Hash</td>
<td style="vertical-align: top; text-align: left">Hash identifying the previous block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Height</td>
<td style="vertical-align: top; text-align: left">Distance to the first block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Start Time</td>
<td style="vertical-align: top; text-align: left">Start time of the election</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">End Time</td>
<td style="vertical-align: top; text-align: left">End time of the election</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Ring Size</td>
<td style="vertical-align: top; text-align: left">Minimun accepted ring size for ring signatures</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Options</td>
<td style="vertical-align: top; text-align: left">List of options to vote for in the election</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left"><inline-formula id="j_infor440_ineq_092"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s</td>
<td style="vertical-align: top; text-align: left">List of <inline-formula id="j_infor440_ineq_093"><alternatives>
<mml:math><mml:mtext mathvariant="italic">OTPK</mml:mtext></mml:math>
<tex-math><![CDATA[$\textit{OTPK}$]]></tex-math></alternatives></inline-formula>s and their corresponding random number <italic>R</italic></td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Block ID</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Hash identifying the block</td>
</tr>
</tbody>
</table>
</table-wrap>
<table-wrap id="j_infor440_tab_007">
<label>Table 7</label>
<caption>
<p>Last block in the chain describing the tally results.</p>
</caption>
<table>
<thead>
<tr>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Field</td>
<td style="vertical-align: top; text-align: left; border-top: solid thin; border-bottom: solid thin">Definition</td>
</tr>
</thead>
<tbody>
<tr>
<td style="vertical-align: top; text-align: left">Version</td>
<td style="vertical-align: top; text-align: left">Number version of the protocol</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Timestamp</td>
<td style="vertical-align: top; text-align: left">Time of the block creation</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Previous Hash</td>
<td style="vertical-align: top; text-align: left">Hash identifying the previous block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Height</td>
<td style="vertical-align: top; text-align: left">Distance to the first block</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Secret key</td>
<td style="vertical-align: top; text-align: left">Recovered secret key to decrypt votes</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">Results</td>
<td style="vertical-align: top; text-align: left">Final election tally</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left">List of results</td>
<td style="vertical-align: top; text-align: left">Referenced transactions for each result</td>
</tr>
<tr>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Block ID</td>
<td style="vertical-align: top; text-align: left; border-bottom: solid thin">Hash identifying the block</td>
</tr>
</tbody>
</table>
</table-wrap>
<p>In Fig. <xref rid="j_infor440_fig_009">7</xref>, we can see the structure of a complete blockchain. We can appreciate how the different blocks work and how the different data structures are engaged to build the blockchain.</p>
<fig id="j_infor440_fig_009">
<label>Fig. 7</label>
<caption>
<p>Holistic view of all the data structures involved in the blockchain. We can appreciate the 4 different block types and its inner architecture.</p>
</caption>
<graphic xlink:href="infor440_g009.jpg"/>
</fig>
</sec>
</sec>
<sec id="j_infor440_s_025" sec-type="methods">
<label>A.2</label>
<title>Methods</title>
<p>In this section, we provide a set of algorithms describing the methods the nodes in the blockchain must follow to operate. These methods provide a high-level overview of the different scenarios nodes have to face, such as: process new blocks, handle transactions or follow the longest chain.</p>
<p>We assume the existence of some predefined functions, when no algorithm describes the function, is because we believe the name is self-explanatory (e.g. hash() assumes a function that generates a hash for a given input, verifySignature() assumes a function that verifies the RSA signature of the given input). We also assume some predefined variables such as: time, localBlockchain, and other evident and presumed values.</p>
<p>Now we describe the different triggers and methods that incur from the casting of a vote to its final addition in the blockchain.</p>
<sec id="j_infor440_s_026">
<label>A.2.1</label>
<title>Casting a Vote</title>
<p>The process for an elector node in the blockchain to create and cast a vote is described in Algorithm <xref rid="j_infor440_fig_010">3</xref>. The transaction containing the vote is then added to the pool of unprocessed transactions, where it will be stored there until it is properly verified.</p>
<fig id="j_infor440_fig_010">
<label>Algorithm 3</label>
<caption>
<p>Voting process(Craft vote and send transaction)</p>
</caption>
<graphic xlink:href="infor440_g010.jpg"/>
</fig>
</sec>
<sec id="j_infor440_s_027">
<label>A.2.2</label>
<title>Processing Transactions</title>
<p>Parties must listen for new transactions addressed to them in the pool of unprocessed transactions. They are responsible for validating new transactions addressed to them, as described n Algorithm <xref rid="j_infor440_fig_011">4</xref>. This process includes checking the public keys used in the ring signature are included in the census of authorized electors, verifying the validity ring signature and checking if the inputs have enough tokens to operate in the blockchain.</p>
<fig id="j_infor440_fig_011">
<label>Algorithm 4</label>
<caption>
<p>Validate Transaction</p>
</caption>
<graphic xlink:href="infor440_g011.jpg"/>
</fig>
<p>Once they have received and validated enough transactions, nodes can generate and broadcast new blocks to the rest of parties as described on Algorithm <xref rid="j_infor440_fig_012">5</xref>.</p>
<fig id="j_infor440_fig_012">
<label>Algorithm 5</label>
<caption>
<p>Generating new blocks</p>
</caption>
<graphic xlink:href="infor440_g012.jpg"/>
</fig>
</sec>
<sec id="j_infor440_s_028">
<label>A.2.3</label>
<title>Handling Blocks</title>
<p>Blockchain nodes have to deal with the received blocks from other parties. They have to ensure they follow the longest chain as well as validate the received block and the contained transactions. On the one hand, Algorithm <xref rid="j_infor440_fig_013">6</xref> shows the process the nodes follow to validate received blocks. As it can be seen in Line 9, the verifying node alerts the rest of nodes when it detects an invalid transaction in the block.</p>
<fig id="j_infor440_fig_013">
<label>Algorithm 6</label>
<caption>
<p>Validate block</p>
</caption>
<graphic xlink:href="infor440_g013.jpg"/>
</fig>
<p>On the other hand, Algorithm <xref rid="j_infor440_fig_014">7</xref> describes the process for adding the block to the longest chain. The algorithm shows a logical simplification of how the nodes should follow the longest chain. For a real implementation, we refer the reader to Bitcoin’s open source code. As Lines 10 and 12 exemplify, the node should employ a set of buffers for storing multiple chains. In Line 14, when the node receives a block ahead of his own chain, the node has to ask for the missing blocks to other nodes in the network.</p>
<fig id="j_infor440_fig_014">
<label>Algorithm 7</label>
<caption>
<p>Add Block</p>
</caption>
<graphic xlink:href="infor440_g014.jpg"/>
</fig>
<fig id="j_infor440_fig_015">
<label>Fig. 8</label>
<caption>
<p>Timing and partners’ interaction of the proposed voting scheme. The image shows the different election phases and the processes triggered at different stages. It shows the computations and the interactions needed as a time-interaction diagram.</p>
</caption>
<graphic xlink:href="infor440_g015.jpg"/>
</fig>
<p>Finally, Fig. <xref rid="j_infor440_fig_015">8</xref> illustrates the process for casting and processing a vote as an interaction diagram. The algorithms described above are referenced in the interaction diagram. Some simplifications were made to address the complex interactions between parties and the blockchain on a single image. Despite not being perfectly accurate, the figure succeeds in representing the different election stages, the multiple partners and their interaction during the whole election.</p>
</sec>
</sec>
</app></app-group>
<ref-list id="j_infor440_reflist_001">
<title>References</title>
<ref id="j_infor440_ref_001">
<mixed-citation publication-type="chapter"><string-name><surname>Al-Riyami</surname>, <given-names>S.S.</given-names></string-name>, <string-name><surname>Paterson</surname>, <given-names>K.G.</given-names></string-name> (<year>2003</year>). <chapter-title>Certificateless Public Key Cryptography</chapter-title>. In: <string-name><surname>Laih</surname>, <given-names>C.</given-names></string-name> (Ed.), <source>Advances in Cryptology – ASIACRYPT 2003, 9th International Conference on the Theory and Application of Cryptology and Information Security, Taipei, Taiwan, November 30–December 4, 2003, Proceedings</source>, <series><italic>Lecture Notes in Computer Science</italic></series>, Vol. <volume>2894</volume>. <publisher-name>Springer</publisher-name>, pp. <fpage>452</fpage>–<lpage>473</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1007/978-3-540-40061-5_29" xlink:type="simple">https://doi.org/10.1007/978-3-540-40061-5_29</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_002">
<mixed-citation publication-type="journal"><string-name><surname>Ayed</surname>, <given-names>A.B.</given-names></string-name> (<year>2017</year>). <article-title>A conceptual secure blockchain-based electronic voting system</article-title>. <source>International Journal of Network Security &amp; Its Applications</source>, <volume>9</volume>(<issue>3</issue>), <fpage>01</fpage>–<lpage>09</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_003">
<mixed-citation publication-type="other"><string-name><surname>Back</surname>, <given-names>A.</given-names></string-name> (2015). Ring signature efficiency. Available at: <ext-link ext-link-type="uri" xlink:href="https://bitcointalk.org/index.php?topic=972541.msg10619684#msg10619684">https://bitcointalk.org/index.php?topic=972541.msg10619684#msg10619684</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_004">
<mixed-citation publication-type="other"><string-name><surname>Barinov</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Baranov</surname>, <given-names>V.</given-names></string-name>, <string-name><surname>Khahulin</surname>, <given-names>P.</given-names></string-name> (2018). POA network white paper. <uri>https://github.com/poanetwork/wiki/wiki/POA-Network-Whitepaper</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_005">
<mixed-citation publication-type="chapter"><string-name><surname>Baudron</surname>, <given-names>O.</given-names></string-name>, <string-name><surname>Fouque</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Pointcheval</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Stern</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Poupard</surname>, <given-names>G.</given-names></string-name> (<year>2001</year>). <chapter-title>Practical multi-candidate election system</chapter-title>. In: <source>Proceedings of the Twentieth Annual ACM Symposium on Principles of Distributed Computing, PODC 2001, Newport, Rhode Island, USA, August 26–29, 2001</source>, pp. <fpage>274</fpage>–<lpage>283</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_006">
<mixed-citation publication-type="journal"><string-name><surname>Belotti</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Bozic</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Pujolle</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Secci</surname>, <given-names>S.</given-names></string-name> (<year>2019</year>). <article-title>A vademecum on blockchain technologies: when, which, and how</article-title>. <source>IEEE Communications Surveys and Tutorials</source>, <volume>21</volume>(<issue>4</issue>), <fpage>3796</fpage>–<lpage>3838</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/COMST.2019.2928178" xlink:type="simple">https://doi.org/10.1109/COMST.2019.2928178</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_007">
<mixed-citation publication-type="chapter"><string-name><surname>Bowe</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Gabizon</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Green</surname>, <given-names>M.D.</given-names></string-name> (<year>2018</year>). <chapter-title>A multi-party protocol for constructing the public parameters of the Pinocchio zk-SNARK</chapter-title>. In: <source>Proceedings of the International Conference on Financial Cryptography and Data Security</source>, <series><italic>LNCS</italic></series>, Vol. <volume>10958</volume>, pp. <fpage>64</fpage>–<lpage>77</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_008">
<mixed-citation publication-type="journal"><string-name><surname>Brewer</surname>, <given-names>E.</given-names></string-name> (<year>2012</year>). <article-title>CAP twelve years later: how the “rules” have changed</article-title>. <source>Computer</source>, <volume>45</volume>(<issue>2</issue>), <fpage>23</fpage>–<lpage>29</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_009">
<mixed-citation publication-type="chapter"><string-name><surname>Camenisch</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Piveteau</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Stadler</surname>, <given-names>M.</given-names></string-name> (<year>1994</year>). <chapter-title>Blind signatures based on the discrete logarithm problem</chapter-title>. In: <source>Advances in Cryptology – EUROCRYPT ’94, Workshop on the Theory and Application of Cryptographic Techniques, Perugia, Italy, May 9–12, 1994, Proceedings</source>, pp. <fpage>428</fpage>–<lpage>432</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_010">
<mixed-citation publication-type="journal"><string-name><surname>Chaum</surname>, <given-names>D.</given-names></string-name> (<year>1981</year>). <article-title>Untraceable electronic mail, return addresses, and digital pseudonyms</article-title>. <source>Communications of the ACM</source>, <volume>24</volume>(<issue>2</issue>), <fpage>84</fpage>–<lpage>88</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_011">
<mixed-citation publication-type="chapter"><string-name><surname>Chaum</surname>, <given-names>D.</given-names></string-name> (<year>1982</year>). <chapter-title>Blind signatures for untraceable payments</chapter-title>. In: <source>Advances in Cryptology: Proceedings of CRYPTO ’82, Santa Barbara, California, USA, August 23–25, 1982</source>, pp. <fpage>199</fpage>–<lpage>203</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_012">
<mixed-citation publication-type="chapter"><string-name><surname>Chaum</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>van Heyst</surname>, <given-names>E.</given-names></string-name> (<year>1991</year>). <chapter-title>Group Signatures</chapter-title>. In: <string-name><surname>Davies</surname>, <given-names>D.W.</given-names></string-name> (Ed.), <source>Advances in Cryptology – EUROCRYPT ’91, Workshop on the Theory and Application of of Cryptographic Techniques, Brighton, UK, April 8–11, 1991, Proceedings</source>, <series><italic>Lecture Notes in Computer Science</italic></series>, Vol. <volume>547</volume>. <publisher-name>Springer</publisher-name>, pp. <fpage>257</fpage>–<lpage>265</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_013">
<mixed-citation publication-type="chapter"><string-name><surname>Chaum</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Ryan</surname>, <given-names>P.Y.A.</given-names></string-name>, <string-name><surname>Schneider</surname>, <given-names>S.A.</given-names></string-name> (<year>2005</year>). <chapter-title>A practical voter-verifiable election scheme</chapter-title>. In: <source>Computer Security – ESORICS 2005, 10th European Symposium on Research in Computer Security, Milan, Italy, September 12–14, 2005, Proceedings</source>, pp. <fpage>118</fpage>–<lpage>139</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_014">
<mixed-citation publication-type="chapter"><string-name><surname>Chen</surname>, <given-names>G.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Han</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Chen</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Lee</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Kim</surname>, <given-names>K.</given-names></string-name> (<year>2008</year>). <chapter-title>A new receipt-free voting scheme based on linkable ring signature for designated verifiers</chapter-title>. In: <source>2008 International Conference on Embedded Software and Systems Symposia</source>. <publisher-name>IEEE</publisher-name>, pp. <fpage>18</fpage>–<lpage>23</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_015">
<mixed-citation publication-type="journal"><string-name><surname>Cramer</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Gennaro</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Schoenmakers</surname>, <given-names>B.</given-names></string-name> (<year>1997</year>). <article-title>A secure and optimally efficient multi-authority election scheme</article-title>. <source>European Transactions on Telecommunications</source>, <volume>8</volume>(<issue>5</issue>), <fpage>481</fpage>–<lpage>490</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_016">
<mixed-citation publication-type="chapter"><string-name><surname>Damgård</surname>, <given-names>I.</given-names></string-name>, <string-name><surname>Koprowski</surname>, <given-names>M.</given-names></string-name> (<year>2001</year>). <chapter-title>Practical threshold RSA signatures without a trusted dealer</chapter-title>. In: <source>Advances in Cryptology – EUROCRYPT 2001, International Conference on the Theory and Application of Cryptographic Techniques, Innsbruck, Austria, May 6–10, 2001, Proceeding</source>, pp. <fpage>152</fpage>–<lpage>165</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_017">
<mixed-citation publication-type="journal"><string-name><surname>Diffie</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Hellman</surname>, <given-names>M.E.</given-names></string-name> (<year>1976</year>). <article-title>New directions in cryptography</article-title>. <source>IEEE Transactions on Information Theory</source>, <volume>22</volume>(<issue>6</issue>), <fpage>644</fpage>–<lpage>654</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_018">
<mixed-citation publication-type="journal"><string-name><surname>ElGamal</surname>, <given-names>T.</given-names></string-name> (<year>1985</year>). <article-title>A public key cryptosystem and a signature scheme based on discrete logarithms</article-title>. <source>IEEE Transactions on Information Theory</source>, <volume>31</volume>(<issue>4</issue>), <fpage>469</fpage>–<lpage>472</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/TIT.1985.1057074" xlink:type="simple">https://doi.org/10.1109/TIT.1985.1057074</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_019">
<mixed-citation publication-type="chapter"><string-name><surname>Frankel</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Gemmell</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>MacKenzie</surname>, <given-names>P.D.</given-names></string-name>, <string-name><surname>Yung</surname>, <given-names>M.</given-names></string-name> (<year>1997</year>). <chapter-title>Optimal resilience proactive public-key cryptosystems</chapter-title>. In: <source>38th Annual Symposium on Foundations of Computer Science, FOCS ’97, Miami Beach, Florida, USA, October 19–22, 1997</source>, pp. <fpage>384</fpage>–<lpage>393</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_020">
<mixed-citation publication-type="chapter"><string-name><surname>Frankel</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>MacKenzie</surname>, <given-names>P.D.</given-names></string-name>, <string-name><surname>Yung</surname>, <given-names>M.</given-names></string-name> (<year>1998</year>). <chapter-title>Robust efficient distributed RSA-key generation</chapter-title>. In: <source>Proceedings of the Thirtieth Annual ACM Symposium on the Theory of Computing, Dallas, Texas, USA, May 23–26, 1998</source>, pp. <fpage>663</fpage>–<lpage>672</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_021">
<mixed-citation publication-type="other"><string-name><surname>Gallagher</surname>, <given-names>P.</given-names></string-name> (2013). Digital signature standard (DSS). <italic>Federal Information Processing Standards Publications, volume FIPS</italic>, 186.</mixed-citation>
</ref>
<ref id="j_infor440_ref_022">
<mixed-citation publication-type="journal"><string-name><surname>Gao</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Zheng</surname>, <given-names>D.</given-names></string-name>, <string-name><surname>Guo</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Jing</surname>, <given-names>C.</given-names></string-name>, <string-name><surname>Hu</surname>, <given-names>C.</given-names></string-name> (<year>2019</year>). <article-title>An anti-quantum E-voting protocol in blockchain with audit function</article-title>. <source>IEEE Access</source>, <volume>7</volume>, <fpage>115304</fpage>–<lpage>115316</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/ACCESS.2019.2935895" xlink:type="simple">https://doi.org/10.1109/ACCESS.2019.2935895</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_023">
<mixed-citation publication-type="journal"><string-name><surname>Gennaro</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Jarecki</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Krawczyk</surname>, <given-names>H.</given-names></string-name>, <string-name><surname>Rabin</surname>, <given-names>T.</given-names></string-name> (<year>2007</year>). <article-title>Secure distributed key generation for discrete-log based cryptosystems</article-title>. <source>Journal of Cryptology</source>, <volume>20</volume>(<issue>1</issue>), <fpage>51</fpage>–<lpage>83</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_024">
<mixed-citation publication-type="journal"><string-name><surname>Gilbert</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Lynch</surname>, <given-names>N.A.</given-names></string-name> (<year>2002</year>). <article-title>Brewer’s conjecture and the feasibility of consistent, available, partition-tolerant web services</article-title>. <source>SIGACT News</source>, <volume>33</volume>(<issue>2</issue>), <fpage>51</fpage>–<lpage>59</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_025">
<mixed-citation publication-type="other"><string-name><surname>Hua-jie</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Xiang-hua</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Hai-tao</surname>, <given-names>Z.</given-names></string-name>, <string-name><surname>Yi-ran</surname>, <given-names>L.</given-names></string-name> (2014). Efficient certificateless ring signature scheme with identity tracing. <italic>Information Security and Technology</italic>, (7)9.</mixed-citation>
</ref>
<ref id="j_infor440_ref_026">
<mixed-citation publication-type="chapter"><string-name><surname>Jakobsson</surname>, <given-names>M.</given-names></string-name>, <string-name><surname>Juels</surname>, <given-names>A.</given-names></string-name> (<year>1999</year>). <chapter-title>Proofs of work and bread pudding protocols</chapter-title>. In: <source>Secure Information Networks: Communications and Multimedia Security, IFIP TC6/TC11 Joint Working Conference on Communications and Multimedia Security (CMS ’99), September 20–21, 1999, Leuven, Belgium</source>, pp. <fpage>258</fpage>–<lpage>272</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_027">
<mixed-citation publication-type="other"><string-name><surname>Koe</surname></string-name>, <string-name><surname>Alonso</surname>, <given-names>K.M.</given-names></string-name>, <string-name><surname>Noether</surname>, <given-names>S.</given-names></string-name> (2020). Zero to Monero: Second Edition. Available at: <uri>https://web.getmonero.org/library/Zero-to-Monero-2-0-0.pdf</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_028">
<mixed-citation publication-type="other"><string-name><surname>Lai</surname>, <given-names>W.-J.</given-names></string-name>, <string-name><surname>Wu</surname>, <given-names>J.-L.</given-names></string-name> (2018). An efficient and effective Decentralized Anonymous Voting System. Available at: <uri>https://arxiv.org/abs/1804.06674</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_029">
<mixed-citation publication-type="journal"><string-name><surname>Lee</surname>, <given-names>K.</given-names></string-name>, <string-name><surname>James</surname>, <given-names>J.I.</given-names></string-name>, <string-name><surname>Ejeta</surname>, <given-names>T.G.</given-names></string-name>, <string-name><surname>Kim</surname>, <given-names>H.J.</given-names></string-name> (<year>2016</year>). <article-title>Electronic voting service using block-chain</article-title>. <source>Journal of Digital Forensics, Security and Law</source>, <volume>11</volume>(<issue>2</issue>), <fpage>8</fpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_030">
<mixed-citation publication-type="book"><string-name><surname>Menezes</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>van Oorschot</surname>, <given-names>P.C.</given-names></string-name>, <string-name><surname>Vanstone</surname>, <given-names>S.A.</given-names></string-name> (<year>1996</year>). <source>Handbook of Applied Cryptography</source>. <publisher-name>CRC Press</publisher-name>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_031">
<mixed-citation publication-type="chapter"><string-name><surname>Merkle</surname>, <given-names>R.C.</given-names></string-name> (<year>1980</year>). <chapter-title>Protocols for public key cryptosystems</chapter-title>. In: <source>Proceedings of the 1980 IEEE Symposium on Security and Privacy, Oakland, California, USA, April 14–16, 1980</source>, pp. <fpage>122</fpage>–<lpage>134</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_032">
<mixed-citation publication-type="journal"><string-name><surname>Muñoz-Escoí</surname>, <given-names>F.D.</given-names></string-name>, <string-name><surname>de Juan-Marín</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>García-Escrivá</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>de Mendívil</surname>, <given-names>J.R.G.</given-names></string-name>, <string-name><surname>Bernabéu-Aubán</surname>, <given-names>J.M.</given-names></string-name> (<year>2019</year>). <article-title>CAP theorem: revision of its related consistency models</article-title>. <source>The Computer Journal</source>, <volume>62</volume>(<issue>6</issue>), <fpage>943</fpage>–<lpage>960</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_033">
<mixed-citation publication-type="chapter"><string-name><surname>Niederreiter</surname>, <given-names>H.</given-names></string-name> (<year>1985</year>). <chapter-title>A public-key cryptosystem based on shift register sequences</chapter-title>. In: <source>Workshop on the Theory and Application of of Cryptographic Techniques</source>. <publisher-name>Springer</publisher-name>, pp. <fpage>35</fpage>–<lpage>39</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_034">
<mixed-citation publication-type="other"><string-name><surname>Noether</surname>, <given-names>S.</given-names></string-name> (2015). Ring SIgnature Confidential Transactions for Monero. <italic>IACR Cryptol. ePrint Arch.</italic> Available at: <uri>https://eprint.iacr.org/2015/1098</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_035">
<mixed-citation publication-type="chapter"><string-name><surname>Noizat</surname>, <given-names>P.</given-names></string-name> (<year>2015</year>). <chapter-title>Blockchain electronic vote</chapter-title>. In: <source>Handbook of Digital Currency</source>. <publisher-name>Elsevier</publisher-name>, pp. <fpage>453</fpage>–<lpage>461</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_036">
<mixed-citation publication-type="journal"><string-name><surname>Paulavicius</surname>, <given-names>R.</given-names></string-name>, <string-name><surname>Grigaitis</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Igumenov</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Filatovas</surname>, <given-names>E.</given-names></string-name> (<year>2019</year>). <article-title>A decade of blockchain: review of the current status, challenges, and future directions</article-title>. <source>Informatica</source>, <volume>30</volume>(<issue>4</issue>), <fpage>729</fpage>–<lpage>748</lpage>. <uri>https://content.iospress.com/articles/informatica/inf1245</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_037">
<mixed-citation publication-type="chapter"><string-name><surname>Pedersen</surname>, <given-names>T.P.</given-names></string-name> (<year>1991</year>). <chapter-title>Non-interactive and information-theoretic secure verifiable secret sharing</chapter-title>. In: <source>Advances in Cryptology – CRYPTO ’91, 11th Annual International Cryptology Conference, Santa Barbara, California, USA, August 11–15, 1991, Proceedings</source>, pp. <fpage>129</fpage>–<lpage>140</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_038">
<mixed-citation publication-type="other"><string-name><surname>Rivest</surname>, <given-names>R.L.</given-names></string-name> (2006). <italic>The Threeballot Voting System</italic>. Massachusetts Institute of Technology. Available at: <uri>http://theory.csail.mit.edu/~rivest/Rivest-TheThreeBallotVotingSystem.pdf</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_039">
<mixed-citation publication-type="other"><string-name><surname>Rivest</surname>, <given-names>R.L.</given-names></string-name>, <string-name><surname>Smith</surname>, <given-names>W.D.</given-names></string-name> (2007). Three voting protocols: ThreeBallot, VAV, and Twin. <italic>USENIX/ACCURATE Electronic Voting Technology (EVT 2007)</italic>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_040">
<mixed-citation publication-type="chapter"><string-name><surname>Rivest</surname>, <given-names>R.L.</given-names></string-name>, <string-name><surname>Shamir</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Tauman</surname>, <given-names>Y.</given-names></string-name> (<year>2001</year>). <chapter-title>How to leak a secret</chapter-title>. In: <source>Proceedings Of The 7th International Conference On The Theory And Application Of Cryptology And Information Security: Advances In Cryptology</source>. <publisher-name>Springer-Verlag</publisher-name>, pp. <fpage>554</fpage>–<lpage>567</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_041">
<mixed-citation publication-type="other"><string-name><surname>Rockwell</surname>, <given-names>M.</given-names></string-name> (2017). BitCongress Process For Blockchain Voting &amp; Law. <ext-link ext-link-type="uri" xlink:href="https://cryptochainuni.com/wp-content/uploads/BitCongress-Whitepaper.pdf">https://cryptochainuni.com/wp-content/uploads/BitCongress-Whitepaper.pdf</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_042">
<mixed-citation publication-type="chapter"><string-name><surname>Ruffing</surname>, <given-names>T.</given-names></string-name>, <string-name><surname>Moreno-Sanchez</surname>, <given-names>P.</given-names></string-name> (<year>2017</year>). <chapter-title>Valueshuffle: mixing confidential transactions for comprehensive transaction privacy in bitcoin</chapter-title>. In: <source>Proceedings of the International Conference on Financial Cryptography and Data Security</source>, <series><italic>LNCS</italic></series>, Vol. <volume>10323</volume>, <fpage>133</fpage>–<lpage>154</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_043">
<mixed-citation publication-type="journal"><string-name><surname>Salazar</surname>, <given-names>J.L.</given-names></string-name>, <string-name><surname>Piles</surname>, <given-names>J.J.</given-names></string-name>, <string-name><surname>Ruíz-Mas</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Moreno-Jiménez</surname>, <given-names>J.M.</given-names></string-name> (<year>2010</year>). <article-title>Security approaches in e-cognocracy</article-title>. <source>Computer Standards &amp; Interfaces</source>, <volume>32</volume>(<issue>5–6</issue>), <fpage>256</fpage>–<lpage>265</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_044">
<mixed-citation publication-type="other"><string-name><surname>Satoshi</surname>, <given-names>N.</given-names></string-name> (2008). Bitcoin: a peer-to-peer electronic cash system. Available at: <uri>https://bitcoin.org/bitcoin.pdf</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_045">
<mixed-citation publication-type="journal"><string-name><surname>Shamir</surname>, <given-names>A.</given-names></string-name> (<year>1979</year>). <article-title>How to share a secret</article-title>. <source>Communications of the ACM</source>, <volume>22</volume>(<issue>11</issue>), <fpage>612</fpage>–<lpage>613</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_046">
<mixed-citation publication-type="other"><string-name><surname>Tarasov</surname>, <given-names>P.</given-names></string-name>, <string-name><surname>Tewari</surname>, <given-names>H.</given-names></string-name> (2017). Internet Voting Using Zcash. Available at: <uri>https://dblp.org/rec/bib/journals/iacr/TarasovT17</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_047">
<mixed-citation publication-type="journal"><string-name><surname>Tornos</surname>, <given-names>J.L.</given-names></string-name>, <string-name><surname>Salazar</surname>, <given-names>J.L.</given-names></string-name>, <string-name><surname>Piles</surname>, <given-names>J.J.</given-names></string-name>, <string-name><surname>Saldana</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Casadesus</surname>, <given-names>L.</given-names></string-name>, <string-name><surname>Ruíz-Mas</surname>, <given-names>J.</given-names></string-name>, <string-name><surname>Fernández-Navajas</surname>, <given-names>J.</given-names></string-name> (<year>2014</year>). <article-title>An eVoting system based on ring signatures</article-title>. <source>Network Protocols &amp; Algorithms</source>, <volume>6</volume>(<issue>2</issue>), <fpage>38</fpage>–<lpage>54</lpage>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_048">
<mixed-citation publication-type="journal"><string-name><surname>Tsang</surname>, <given-names>P.P.</given-names></string-name>, <string-name><surname>Wei</surname>, <given-names>V.K.</given-names></string-name> (<year>2004</year>). <article-title>Short linkable ring signatures for E-voting, E-cash and attestation</article-title>. <source>IACR Cryptology ePrint Archive</source>, <volume>2004</volume>, <fpage>281</fpage>. <comment>Available at: <uri>http://eprint.iacr.org/2004/281</uri></comment>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_049">
<mixed-citation publication-type="other"><string-name><surname>Van Saberhagen</surname>, <given-names>N.</given-names></string-name> (2013). CryptoNote. Available at: <uri>https://cryptonote.org/whitepaper.pdf</uri>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_050">
<mixed-citation publication-type="other"><string-name><surname>Wu</surname>, <given-names>Y.</given-names></string-name> (2017). <italic>An e-voting system based on blockchain and ring signature</italic>. Master’s thesis, University of Birmingham.</mixed-citation>
</ref>
<ref id="j_infor440_ref_051">
<mixed-citation publication-type="journal"><string-name><surname>Xiao</surname>, <given-names>Y.</given-names></string-name>, <string-name><surname>Zhang</surname>, <given-names>N.</given-names></string-name>, <string-name><surname>Lou</surname>, <given-names>W.</given-names></string-name>, <string-name><surname>Hou</surname>, <given-names>Y.T.</given-names></string-name> (<year>2020</year>). <article-title>A survey of distributed consensus protocols for blockchain networks</article-title>. <source>IEEE Communications Surveys and Tutorials</source>, <volume>22</volume>(<issue>2</issue>), <fpage>1432</fpage>–<lpage>1465</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1109/COMST.2020.2969706" xlink:type="simple">https://doi.org/10.1109/COMST.2020.2969706</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_052">
<mixed-citation publication-type="journal"><string-name><surname>Yang</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Yi</surname>, <given-names>X.</given-names></string-name>, <string-name><surname>Nepal</surname>, <given-names>S.</given-names></string-name>, <string-name><surname>Kelarev</surname>, <given-names>A.</given-names></string-name>, <string-name><surname>Han</surname>, <given-names>F.</given-names></string-name> (<year>2020</year>). <article-title>Blockchain voting: publicly verifiable online voting protocol without trusted tallying authorities</article-title>. <source>Future Generation Computing Systems</source>, <volume>112</volume>, <fpage>859</fpage>–<lpage>874</lpage>. <ext-link ext-link-type="doi" xlink:href="https://doi.org/10.1016/j.future.2020.06.051" xlink:type="simple">https://doi.org/10.1016/j.future.2020.06.051</ext-link>.</mixed-citation>
</ref>
<ref id="j_infor440_ref_053">
<mixed-citation publication-type="other">(2018). Follow my vote. <uri>https://followmyvote.com/</uri>.</mixed-citation>
</ref>
</ref-list>
</back>
</article>
