According to local reports, the blockchain-based system allowed constituents to decipher their own private votes or let third-parties do so.
Russia’s blockchain-based voting system for the constitutional amendments had a vulnerability that reportedly made it possible to decipher votes before the official count.
Could Constituents decipher own private keys?
This is an implementation of "Networking and Cryptography," or NaCi, cryptography library created by mathematician Daniel J. Bernstein and two other contributing cryptographers Tanja Lange and Peter Schwabe.
Per Meduza, the voting system relied on the deterministic encryption, meaning that using the same parameters lead to identical ciphertexts. Both the sender and the receiver received a shared key, which could be used for encryption or decryption of the message.
That means that any constituent could theoretically decipher their own vote before it would be decrypted by the electoral commission, could even allow third parties to do so in their place. In order to do that, the voter had to save their private keys.
To retrieve the private key, the constituent had to go to the e-bulletin page, and open the developer console in their browser and make minor adjustment to the election.js library (add logpoint, enter: voter secret key is', encryptor.keyPair.secretKey) and then cast their vote.
Meduza conducted an experiment where all participants retrieved their private keys, and were reportedly able to decipher all the votes and data as a result.
Is there a positive side to the current bug?
According to the publication, the vulnerability theoretically allows employers to ensure that their employees voted, even check their votes after inducing them to save their private keys. There have been reports suggesting that state-funded entities in Russia pushed their employees to vote at the government’s request.
On the other hand, the same bug could be used to increase transparency of the vote in the scenario where the electoral commission refuses to publish the decryption of each vote (as it did after Moscow City Duma election in 2019, where blockchain was also supposedly used).
Meduza elaborated, “For example, supporters of one specific candidate may agree to install the same browser extension. That way, they can track the minimum number of votes that their candidate should definitely get after the count”.
77.9% voted for the amendments, apparently allowing Putin to rule until 2036
The E-voting commenced from June 25 to June 30 for residents of Moscow and Nizhniy Novgorod, and was based on the Exonum blockchain platform developed by Bitfury. The remaining regions could only vote offline.
The referendum itself ended yesterday, on July 1. With all the ballots counted earlier today, with 77.9% votes for the reform package and 21.3% against, according to the electoral commission earlier today.
As for the e-vote results, 62.33% of the Moscow voters supported the amendments and 37.37% opposed it. In Nizhniy Novgorod, the results were somewhat similar: 59.69% and 40.31% of the constituents voted “for” and “against” respectively.
Notably, one e-bulletin was deemed invalid. As explained by a Moscow government official, the voting user stopped "the transaction between a mouse click and getting it into the crypto library of his computer." Since the blockchain can only take “yes” or “no” for an answer, the system allegedly marked the said vote as invalid during decryption process.
Citing the Constitutional amendments, Vladimir Putin’s term limits will be reset in 2024, meaning that he may remain president until 2036.