# Practical I-Voting on Stellar Blockchain
## 2 Blockchain Technology for I-Voting
### Blockchain Based I-Voting Systems
Voting in the application is not secure and enables the man-in-the-middle attack. Before the vote is saved to the blockchain, it is first sent to the server. Voatz uses Hyperledger Fabric blockchain based on 32 nodes with the Practical Byzantine Fault Tolerance consensus algorithm. As mentioned in the paper [15], blockchain usage may be realized only on the server application. The mobile application does not validate votes with blockchain. The user gets an email confirmation after a successful vote, but the Voatz system does not allow him to validate his vote. TIVI [16] is another voting platform. The system was used in Chile (2015) in the Commune of Maipu and by Utah Republican Party in 2016. There is a lack of information about the details of the used algorithms. Based on the technical documentation, we can distinguish four phases of the election process:  
* Keys distribution;
* Casting a vote and creating a confirmation;
* Decryption of votes;
* Verification and audit of voting. Before starting an election, the system creates a pair of keys (public \(c_{k}\) and private \(d_{k}\)). The public key is embedded in the client's and server's application, and the private key is distributed to the trusted group of people. At the end of the election, the trusted group has to communicate to create the one valid private key and decrypt the election's results. Moreover, we also distinguish the certification authority (CA), which creates an additional pair of keys (\(sk_{CA}\), \(vk_{CA}\)) and send the verification key \(vk_{CA}\) to the count server and the ballot-box server. Each voter has his own pair of keys (\(sk_{VTR}\), \(vk_{VTR}\)) that are used to sign the vote. The pair is then confirmed by the CA. The generated keys \(sk_{VS}\) and \(vk_{VS}\) allow validating the confirmations generated by the Voting server. The \(vk_{VS}\) is saved in the client application to validate the message, and \(sk_{VS}\) is used to sign messages by the Verification server. After the end of the election, all votes are shuffled using the mix-net. After decrypting votes, the results are saved in the read-only bulletin board, and voters can check if his vote was correctly saved through use receipt value \(R\). The detailed description of the methods used by TITI is described here [17]. The solution proposed by [PERSON] et. al [18] focused on the usage of the ZCash protocol, which improves the anonymity of voters with the ability to offer high transparency of the voting process. The system is divided into four parts:  
* Registration/preparation;
* Invitation;
* Voting;
* Tally/audit. In the registration phase, we need to provide all information needed to organize the voting process, including information about eligible users. To identify users, the system uses the CHAP authentication method with X.509 certificates and email addresses. After registration, the system generates a temporary link for each voter. This link follows to the page where the user can obtain the wallet with ZCash. Then, the user can generate a t-address and, after successful authorization, gets access to the ballot page. In the last part of voting, the candidates send all tokens to the trusted Coin Pool wallet using the generated t-address. The number of ZEC tokens in the trusted wallet should be equal to the total issued ZECs. This simple scheme does not mitigate with the ability to break the elections by the candidate with the smallest amount of ZEC. If that candidate does not send all ZECs to the trusted Coin Pool, then we can not validate the election. Moreover, the presented model uses public blockchain with the ZEC tokens that are available for everyone. In some cases, the candidates may buy some amount of ZECs privately and send it to his wallet. Finally, the proposed mechanism does not mitigate with a risk of 51% attack. The person or company that has 51% or more of the blockchain network's computation power may change the history of transactions in a blockchain.