ВИБОРИ ОНЛАЙН: КОНЦЕПЦІЯ (ЧАСТИНА 3)

Частина 3

Ми з вами минулого разу заглянули всередину  естонської системи, дали тверезу оцінку її слабким місцям й перевагам та пояснили, чому ми не рекомендували її для впровадження для електронного голосування в Україні. На цьому ми хотіли би перейти від критики до конструктиву. Перш ніж ми зможемо запропонувати план дій, як ми його бачимо,  поговорімо про таке поняття як “блокчейн”. А саме: що таке “блокчейн”, для чого його використовують та як це може бути корисним для створення електронної системи голосування в Україні.

Кажуть, що голосування варто зробити на блокчейні

Сьогодні блокчейн скоріше “модна”, ніж така, що має практичну користь концепція. Переважна більшість осіб, які вдаються до терміну “блокчейн“, не зовсім розуміють, що це таке та які існують межі для його застосування (в майбутньому ці межі будуть тільки розширюватися, безсумнівно).

Спробуймо розібратися в тому, що таке блокчейн, оперуючи простими словами.

Розберімось спершу в тому, що таке “хеш”.  Це перетворення довільної кількості даних, з якого на виході матимемо рядок із заздалегідь визначеним числом символів. Пропонуємо такий приклад із життя: багато пасажирів складають перші три і останні три цифри квитка міського транспорту. Якщо суми збігаються – то квиток щасливий. Наприклад, номер квитка “923102”. Сума перших трьох цифр – “14”, других – “3”, але ми допишемо 0 на початку, щоб завжди мати двозначне число – “03”. Бачимо, що, на жаль, квиток не є щасливим, але “1403” можна назвати хешем від “923102”. Як видно з цього простого прикладу, в житті багато хто з нас робить те, що можна назвати “хешуванням”, не усвідомлюючи цього.

Звичайно, алгоритмів хешування існує багато – кожен зі своїми перевагами та вадами, проте для розуміння “що є блокчейн” досить знати, що хеш – це перетворення одних даних в інші дані заданої довжини за однозначним алгоритмом.

“Block chain” – ланцюжок блоків. З огляду на назву, блокчейн складається з блоків, які пов’язані між собою певним чином. Якщо бути точнішим, то кожен блок можна розділити умовно на дві частини:

  • у першій частині зберігаються певні дані (наприклад, дані про транзакції, або температуру повітря на Північному полюсі і т. п. – загалом, в цій частині знаходяться важливі дані) і “підпис” попереднього блоку;
  • у другій частині зберігається “підпис”, що відповідає першій частині.

“Підпис” взятий у лапки, оскільки залежно від блокчейну, ним може бути Електронний Цифровий Підпис (надалі: ЕЦП), і певний хеш, що відповідає  визначеним критеріям (наприклад, в ньому повинні бути 5 нулів і 6 одиниць) тощо.

Вся сила блокчейну полягає в тому, що якщо є 1000 блоків, а нам потрібно змінити блок №122, то потрібно поміняти всі блоки, починаючи з блока 122 і закінчуючи останнім (тисячним). Це не так легко, оскільки порахувати хеш, який відповідає визначеним критеріям, надзвичайно складно, а якщо існує ЕЦП, то потрібно (фізично) відібрати приватний ключ у всіх, хто підписував блоки з 122 по 1000 (якщо відповідний блокчейн регламентує, хто який блок підписує).

Таким чином, дані в блоках надзвичайно складно змінити, особливо якщо у блокчейну багато користувачів (наприклад, блокчейни біткойну, ефіру та ін.), а якщо точніше – практично неможливо. Але, якщо блокчейн маленький, то все можливо, і часом, зовсім недорого.

Звідси висновок: якщо і використовувати систему для серйозних проектів, то такий блокчейн повинен бути публічним, з максимальною кількістю користувачів. Використання “маленького” публічного блокчейну – НЕ надійне рішення, оскільки його легко і недорого переписати. Використання “приватного” блокчейну (дані якого закриті від “неучасників“) – теж не надійно, оскільки потрібно вірити на слово учасникам приватного блокчейну, плюс це майже точно буде “маленький” блокчейн, який можна переписати.

Саме до такого висновку багато прихильників блокчейну забувають дійти, коли пропонують той чи інший проект зробити на ньому. В результаті такі проекти нічим не закінчуються (крім зміни рук для грошей).

Друга проблема блокчейну – його розмір. Наприклад, блокчейн біткоїну, на момент написання цієї статті, має розмір, який перевищує 270 Гігабайт, блокчейн ефіру – 420 Гігабайт. Очевидно, що не можна використовувати блокчейн в якості бази даних для будь-якого проекту (чи то для голосування чи проведення онлайн-аукціону), оскільки дані в блокчейні – це блоки, які зберігають хеш або підпис.

Той, хто віднайде хеш/поставить підпис (назвімо його “майнер”), і вирішує, які дані потраплять до блоку. Щоб стимулювати майнерів брати дані до блоку, їм пропонується винагорода від тих, хто хоче записати дані до блоку. За умови, що інші невідомі рівні, майнер візьме до блоку дані, які принесуть йому більше грошей. Таким чином, зберігання інформації в блокчейні коштує гроші і часто – чималі, особливо, якщо у блокчейна низька пропускна здатність, тоді вартість потрапляння до блоку може досягати десятків  доларів. До того ж, зазвичай, блок має обмежений розмір у вигляді декількох мегабайт. Тому зберегти, наприклад, 1 Гб даних у блокчейні може виявитись надзвичайно дорого. Що стосується електронних виборів, то за кожен «голос» потрібно заплатити, щоб він потрапив до блоку. При кількості голосів у 18 млн., вартість голосування може вимірюватися сотнями мільйонів, а то й мільярдом доларів (в окремих блокчейнах).

Деякі проекти вирішують такі проблеми шляхом створення “власного” блокчейну (переважно “на одному комп’ютері”). Періодично хеш від даних “власного” блокчейну публікується в більшому  блокчейні (наприклад блокчейні біткоїну). Між періодичними публікаціями такий блокчейн у повному обсязі є вразливим для маніпуляцій, оскільки перебуває під керуванням малої кількості серверів.
В цілому, коли мова йде про проект на блокчейні, завжди варто пересвідчитись: “на якому саме блокчейні?”

Якщо блокчейн приватний – до нього немає довіри (хіба що цей блокчейн використовується для внутрішніх потреб компанії і повністю нею оперується і контролюється). Якщо блокчейн публічний, але його копія є тільки на одному-двох-трьох серверах, то це не блокчейн, а система з резервними копіями, яка керується принципами блокчейну.

Дійсно, уявімо державний блокчейн, наприклад, майнових прав. Якщо буде два сервери під державним контролем, то мало хто буде довіряти такій системі, оскільки такий блокчейн можна легко підправити.

На жаль, для більшості проектів, які обіцяють реалізувати на блокчейні, не опубліковується назва блокчейну, а знаючи уже лише назву, можна визначити, чи є відповідний проект реальним, або ж це лише черговий “дерибан коштів під шумок модної теми”.

Наприклад, з опису електронного голосування проектів e-Vox або Polys відразу видно, що такі проекти не можуть бути винесені на загальнодержавний рівень, оскільки вони були реалізовані на блокчейні Ethereum, пропускна здатність якого 20 транзакцій в секунду, а для голосування на національному рівні потрібно розглядати блокчейни з пропускною здатністю від 200 транзакцій в секунду (про це буде сказано в наступній частині), а краще – від 400.

Або, наприклад, хтось захоче організувати голосування на приватному блокчейні Exonum від компанії Bitfury. Мало того, що в розпорядженні у Bitfury дуже багато потужностей, і вони теоретично можуть переписати переважну більшість публічних bitcoin-подібних блокчейнів (крім, можливо, ТОП-10 або ТОП-20 найбільших), так хеш блокчейна Exonum записується в блокчейн біткоїну. А блокчейн біткоїну влаштований таким чином, що новий блок потрапляє в блокчейн в середньому 1 раз у 12 хвилин. Звідси виходить, що між оновленнями хешів блокчейну Exonum в блокчейні біткоїну проходить 12 хвилин, а цього часу більш ніж достатньо для маніпуляцій даними, особливо якщо в зловмисника у розпорядженнівеличезні технічні ресурси.

Вся сила блокчейну полягає в наявності безлічі вузлів. Немає вузлів – немає сенсу для організації проекту такого рівня як “електронні вибори”.

Як повинна виглядати ефективна система електронних виборів в Україні?

Що потрібно робити для успішного створення сталої, відкритої та надійної системи онлайн-голосування. Відповідь проста – потрібно взяти найкраще з двох світів: від блокчейну та від традиційних IT-систем.

Якою повинна бути система електронного голосування?

Вимог до системи електронного голосування може існувати безліч, проте необхідний мінімум для України (відповідно до діючого законодавства і здорового глузду) повинен складатися з наступних пунктів:

  • Ніхто, крім самого виборця, не повинен знати про його вибір;
  • Тільки законні учасники можуть проголосувати і тільки за одного кандидата / партію;
  • Рішення виборця не може бути таємно чи явно ніким змінено (крім, можливо, самого виборця);
  • Кожний легітимний учасник голосування може перевірити, чи правильно був зарахований його голос;

Опціонально можна додати:

  • Будь-який технічно грамотний користувач може перевірити правильність результатів голосування, а саме: чи правильно був проведений підрахунок голосів, чи не проводилось видалення/додавання чи оновлення голосів поза рамками голосування;
  • Хід голосування  (точніше, його проміжні результати) повинен залишатися невідомим до завершення виборів.

З чого почати?

Голосування буде відбуватися за допомогою Android-смартфона, що підтримує технологію NFC, та продукція компанії Apple з версією iOS 13 і вище. Крім смартфонів, можна проголосувати на компютері, придбавши додатково кард-рідер.

Можливість голосувати за допомогою смартфона відкриває неймовірно широкі можливості для залучення наших громадян у виборчий процес та має безліч переваг над традиційною системою голосування:

  • кожен виборець може голосувати, не виходячи з дому/офісу/кафе/лісу/…;
  • виборцю не потрібно ходити в територіальні виборчі комісії, щоб отримати “відкріпний” талон для голосування не за місцем прописки;
  • виборець не позбавляється можливості проголосувати за кандидата\партію за округом\територією своєї реєстрації (наприклад, на останніх парламентських виборах, після отримання “відкріпного”, виборець міг голосувати тільки за партію, а вибір мажоритарника був недоступний);
  • проголосувати зможуть і “заробітчани”, що тимчасово знаходяться поза межами території України (у відпустці, відрядженні тощо), а також люди, що проживають не за місцем реєстрації;
  • за необхідності право на голосування можна надати жителям Криму та/або жителям ОРДЛО;
  • зменшується навантаження на співробітників територіальних виборчих комісій (менше людей будуть звертатися за “відкріпними” талонами);
  • підрахунок голосів відбувається автоматично та майже миттєво;
  • необхідно друкувати меншу кількість бюлетенів та використовувати менше паперу;

Запропонована концепція електронного голосування є поєднанням традиційних технологій голосування та блокчейну. Однак, систему можна реалізувати і без блокчейну. Останній був обраний лише з тих причин, що він може бути великим та публічно-доступним, і будь-який бажаючий може в будь-який момент перевірити коректність даних на предмет несанкціонованих змін, які у великий блокчейн внести вкрай складно.

Система є достатньо складною і описати її непросто. Тому почнімо з кінця (з підрахунку голосів) та перейдемо до початку процесу (реєстрації бажаючого проголосувати онлайн).

Як відбувається підрахунок голосів?

Існує блокчейн, що містить так звані “гаманці” кандидатів. Кожен виборець відправляє “монету” (надалі: голос) зі свого гаманця на гаманець обраного кандидата. Після голосування підраховується число унікальних транзакцій (не сума, а саме число!) за кожного кандидата.

Простими словами, за аналогією, уявімо, що всі кандидати вишикувалися в один ряд у метро та грають на музичних інструментах, і перед кожним лежить шапка, в яку громадяни (“виборці”) кидають монетки або купюри (“голосують”). Для простоти, припустимо, що громадяни кидають гроші тільки одному музиканту (“кандидату”). Таким чином, перемагає не той, хто зібрав більше грошей, а той, у кого більше сумарне число монет і купюр, незалежно від їх номінації.

По суті, як тільки транзакція доходить до гаманця “кандидата”, вже видно результат голосування. Необхідно уточнити, що в залежності від блокчейну транзакція може здійснюватися від “майже миттєво” до декількох годин або днів. Тому результат голосування може бути доступний одразу, або зайняти до декількох годин або днів після голосування, в залежності від обраного блокчейну.

Чи можливо приховати результати до кінця голосування?

Упродовж останніх кількох років результати голосування і так часто стають відомими ще до його закінчення, оскільки окремі журналісти/депутати публікують різні так звані “алкогольні” підсумки протягом дня голосування, що в результаті виявляються такими ж, як і дані екзит-полів. Таким чином, хід голосування, фактичноне є секретом.Проте в межах електронної системи голосування секретність зберегти можливо. Пропонуємо продовжити аналогію з музикантами. Крім добропорядних громадян існують і недобропорядні, які кидають кандидатам якісні фальшиві “монети”, що неозброєним оком не відрізниш від справжніх. Сторонній спостерігач може підрахувати, скільки монет/купюр було кинуто музикантам чи/або конкретному музиканту, проте він не може знати, скільки з цих монет були фальшивими. До того ж, добропорядних громадян може виявитися набагато менше, ніж не особливо добропорядних.

У межах електронної системи голосування це означає, що на гаманці кандидатів повинні надходити фальшиві “голоси” з гаманців, які не є прикріпленими до жодного виборця. Процес голосування фальшивими “голосами” можна автоматизувати. Майже точно можна припустити, що знайдуться бажаючі відправити кілька зайвих монет і спробувати скомпрометувати систему підрахунку. Тому, так чи інакше, необхідно вести реєстр виборців у вигляді гаманців, транзакції (“голоси”) яких будуть враховуватися. Таким чином, поки не оприлюднено реєстр гаманців (по суті – “виборців”), голоси яких враховуються, ніхто не може зрозуміти, як проходить голосування.

Де зберігається реєстр гаманців (“виборців”)?

Реєстр формується ЦВК (яким саме чином – буде згадано нижче), яка підписує його і вираховує хеш кількома способами. Підпис і хеші публікуються до початку голосування. Їх можна опублікувати як на сайті ЦВК, так і в будь-якому блокчейні для фіксування факту, що підписи і хеші було опубліковано у незмінному вигляді.
Таким чином, опубліковані підпис і хеш служать для гарантії  того, що реєстр, коли його оприлюднять, є саме початковим реєстром, що не зазнав змін на користь жодного кандидата. Дійсно, змінити реєстр так, щоб у нього збереглися цифровий підпис і залишилися незмінними кілька видів хешів, – практично неможливо, а теоретична можливість цього становить мізерну частку (набагато менше імовірну, ніж підробка цифрового підпису або хешу окремо один від одного).

Як взяти участь у виборах?

Виборцю потрібно зареєструватися (тобто надати ідентифікаційні дані) в ЦВК. Ідентифікаційні дані – це, наприклад, номер паспорта + поточний час, підписані (обов’язково!) сертифікатом з ID-карти, оскільки тільки власник ID-картки володіє усіма необхідними даними для цього (PIN1/2, PUK1/2).
Для забезпечення анонімності голосу, виборець разом з ідентифікаційними даними надсилає 
до ЦВК випадково згенеровану публічну адресу гаманця, з якого він буде голосувати. Цю електронну адресу буде зашифровано та підписано т. зв.
“сліпим підписом”.

Що таке сліпий підпис?

Сліпий підпис найкраще (хоча і не зовсім вичерпно) можна описати за допомогою такої аналогії: людина ставить свій підпис на запечатаний конверт, абсолютно не знаючи, що в ньому. Проте, будь-хто інший може побачити її підпис на конверті. При розпечатуванні конверта (і оприлюдненні вмісту), все одно видно, що підпис на ньому стоїть саме тієї людини.

Навіщо потрібен сліпий підпис?

Для забезпечення анонімності голосування, а саме для гарантії того, що неможливо буде пов’язати конкретного виборця з гаманцем, з якого той буде голосувати. Щоб зрозуміти “як саме?”, пропонуємо розглянути наступний алгоритм:

  • виборець підключається до ЦВК і  отримує від неї дані, необхідні для сліпого підпису (необхідні математичні дані для аглоритму);
  • виборець посилає в ЦВК свої ідентифікаційні дані, завірені ЕЦП, і захищену сліпим підписом публічну адресу гаманця, з якого буде відбуватися голосування;
  • ЦВК перевіряє ідентифікаційні дані виборця і визначає, чи можна йому голосувати, при цьому не володіючи інформацією щодо публічної адреси гаманця користувача («конверт ще запечатаний»);
  • ЦВК формує список виборців і в час Ч його публікує (з відповідною транзакцією в блокчейні або просто на сайті ЦВК, з підписом ЦВК цього списку і кількома наборами хешів, вирахуваних різними алгоритмами);
  • виборець відправляє розпечатаний конверт в ЦВК, фактично – публічну адресу гаманця, що бере участь у голосуванні;
  • ЦВК відправляє на публічну адресу гаманця, що бере участь в голосуванні, «монету»;
  • виборець «голосує монетою» за обраного кандидата/партію і т. п..

Цей алгоритм допомагає вирішити проблему анонімності користувача за допомогою сліпого цифрового підпису Шнорра. Серед усіх алгоритмів сліпих підписів алгоритм Шнорра виділяється тим, що після розпечатування «конверта» сторона, що підписувала конверт, не може впізнати сторону, що дала конверт на підпис. Однак у сторони, що підписувала конверт, залишаються IT-механізми для ідентифікації (cookiesip, модель телефона/комп’ютера тощо). Ця проблема також вирішується, про що буде сказано додатково пізніше.

Яким чином сліпий підпис Шнорра приховує користувача?

Коли ЦВК отримує «розпечатаний» конверт (публічну адресу гаманця виборця), то вона бачить, що цей «конверт» підписувався саме ЦВК (тобто вміст конверта не змінився і залишився тим же, що і після сліпого підпису, хоча ЦВК до вмісту “конверта” доступу не мала), і витягує «гаманець виборця», не маючи змоги зіставити цей гаманець з конкретним виборцем. Таким чином, створюється реєстр «голосуючих гаманців», що має наступні властивості:

– кожен виборець може переконатися, що він є в реєстрі (так як виборець знає свій гаманець);
– кожен виборець може перевірити свій або будь-який чужий сліпий підпис і переконатися, що «конверт» був запечатаний ним або конкретною іншою людиною (наприклад за ідентифікаційним номером).

Таким чином, кожен може переконатися не тільки у тому, що його було включено до реєстру, а і в тому, що в реєстрі відсутні т.зв. “мертві душі”.

Як захистити користувача від деанонімізації в ЦВК?

За своїм алгоритмом сліпий підпис Шнорра не дозволяє ЦВК ідентифікувати користувача в момент відкриття конверта, проте залишаються непрямі методи з деанонімізації виборця, наприклад:

А) у короткий проміжок часу між реєстрацією виборця і розкриттям конверта;
Б) за допомогою ip-адреси, cookies, характеристик пристрою і т. д.

Щоб запобігти першій загрозі, необхідно розділити голосування на 5 послідовних процесів, розділені один від одного за часом (всі “тижні” умовні, числа вказані для прикладу):

1) Реєстрація для онлайн голосування – до 2-х тижнів перед виборами;
2) «розкриття» конвертів – від 2-х до одного тижня перед виборами;
3) після розкриття конвертів ЦВК знає гаманці, які будуть голосувати, і розсилає на них певну суму монет – від тижня до одного дня перед початком голосування;
4) одночасно з п. 3 ЦВК надсилає монети на “фальшиві” гаманці, з яких надходитимуть транзакції з метою приховати результат голосування до його закінчення;
5) власне, сам процес голосування.

Щоб вирішити другу загрозу, необхідно створити мережу проксі-серверів, які будуть маскувати ІР-адресу та інші характеристики пристроїв користувачів. Проксі-сервер можна розробити, викласти для доступу вихідні коди та виконувані файли, запустити рекламну кампанію, щоб звичайні виборці встановили у себе відповідні програми та самі стали проксі-серверами. Проксі-сервер буде реєструватися в хмарі, а додаток виборця буде з хмари брати список всіх серверів і вибирати випадковий (або кілька випадкових). Таким чином, ЦВК буде повністю позбавлена можливості деанонімізувати виборця вже при наявності 5-10 проксі-серверів, а якщо їх будуть сотні, то гарантія анонімності досягає майже 100%.

З іншого боку, проксі-сервер може стати вектором атаки на систему, тому доцільно обмінюватися однією і тією ж інформацією через кілька проксі-серверів, а перевіряти наявність себе в реєстрі виборців через інші проксі-сервери,  зафіксовуючи при цьому відповідь кожного. Звичайно, вся передана інформація зашифровується публічним ключем ЦВК, а також разом з інформацією передається для кожної сесії випадково згенерований публічний ключ виборця, щоб ЦВК могла зашифрувати відповідь. Таким чином,  проксі-сервер не зможе прочитати, яку інформацію було через нього надіслано.

Шкідливий проксі-сервер може, по суті, лише:

1) не пересилати інформації до ЦВК та\або
2) не пересилати виборцю відповіді від ЦВК;
3) збирати інформацію про ІР-адресу та технічні дані  виборця
4) надсилати ЦВК некоректну інформацію;
5) надсилати виборцю некоректну інформацію.

Перші дві й останні дві загрози вирішуються шляхом надсилання однієї тієї ж інформації через безліч проксі-серверів, а також коректної програмної реалізації серверної частини ЦВК і клієнтського ПЗ для голосування.

Залишається загроза №3. Вся інформація, яку можна зібрати, не має жодного сенсу, якщо нею не поділитися з ЦВК. Уникнути цього складно, якщо держава буде розвиватися в авторитарному напрямі. Захиститися від цього можливо, скориставшись принципами даркнету (всі про нього чули, але мало хто із законослухняних громадян бачив і користується TOR-браузерами для подорожей всередині даркнету), а саме – повідомлення від виборця до ЦВК має пройти через кілька проксі-серверів.

Опишімо цей процес детальніше:

1) додаток виборця отримує список проксі-серверів та їх публічні ключі з хмари;
2) додаток формує, скажімо, 5-10 груп (випадкове число) по 2-10 серверів (випадкове число) в кожній з груп довільно. При цьому сервери можуть повторюватися як між різними групами, так і всередині однієї групи;
3) у кожній групі вибудовуємо сервери у довільний ланцюжок;
4) зашифровуємо повідомлення для ЦВК публічним ключем ЦВК;
5) для кожної групи серверів отримуємо шифрограму для ЦВК, додаємо ознаку “відправити до ЦВК” і шифруємо публічним ключем останнього сервера в групі серверів;
6) до отриманого повідомлення додаємо адресу останнього сервера в групі та шифруємо публічним ключем попереднього сервера в групі;
7) таким чином, продовжуючи процес, аналогічний до описаного в п. 6, доходимо до першого сервера в групі;
8) отримані шифрограми відправляються на проксі-сервери, які стоять на першому місці у своїх групах.

У свою чергу, проксі-сервер:

1) отримує повідомлення і розшифровує його за допомогою свого приватного ключа;
2) якщо у розшифрованому повідомленні міститься ознака “Відправити до ЦВК”, то сервер відправляє дане повідомлення до ЦВК;
3) якщо у розшифрованому повідомленні вказана адреса іншого проксі-сервера, то це повідомлення автоматично надсилається до вказаного проксі-сервера.

Таким чином, додаток виборця безліч разів шифрує повідомлення для ЦВК, а кожен проксі-сервер розшифровує один шар шифрування (за класичним принципом TOR-мережі, яку часто асоціюють з цибулиною). Якщо в ланцюжку серверів буде хоча б один нешкідливий сервер, то єдиний варіант деанонімізувати користувача, – це стежити за трафіком інтернет-провайдера цього нешкідливого проксі-сервера. Але і в цьому випадку є рішення – проксі-сервери можуть не миттєво відправляти повідомлення, а з деякою випадковою затримкою аж до кількох годин/днів і зіставити трафік інтернет-провайдера стане вкрай складно. А якщо в ланцюжку є мінімум два нешкідливих проксі-сервери, то і відстежування трафіку інтернет-провайдера втрачає будь-який сенс.

Імовірно, також слід створити сервіс, який буде перевіряти статуси проксі-серверів, відправляючи їм повідомлення для ЦВК і намагаючись перевірити статус його відправлення. Такий сервер потрібен, щоб оперативно виключати зі списку відключені проксі-сервери, а також/або ті, які спотворюють повідомлення. Його можна назвати “Сервісом перевірки проксі-серверів”.

Процес підрахунку голосів

Коли голосування закінчиться, ЦВК публікує реєстр гаманців, що “беруть участь у голосуванні”. Опублікувати цей реєстр можна на сайті ЦВК, оскільки цифровий підпис і хеші до нього були вже опубліковані раніше. Будь-який бажаючий може перевірити відповідність цифрового підпису та хешів до раніше опублікованих (як за допомогою спеціально розробленого під вибори ПЗ, так і власноруч написавши невелику програмку. Крім того ж, для підрахунку різних видів хешів вже зараз можна скористатися багатьма веб-сервісами).

Як тільки реєстр гаманців, що “беруть участь у голосуванні”, буде опублікований, залишається підрахувати “голоси”, віддані з гаманців, які містяться у цьому реєстрі. Підрахунок цей відбувається практично миттєво (за декілька секунд/часток секунд) – відсіюються усі транзакції з гаманців, що не попали в реєстр, або ті, що були відправлені повторно. Залишкова кількість транзакцій і є число тих, хто проголосував.

До того ж, кожен може перевірити, чи правильно врахований його голос (оскільки виборець знає свій гаманець), а також, чи є інший конкретний гаманець у реєстрі виборців. Процес підрахунку є більш ніж прозорим.
Для підрахунку можна розробити відповідне ПЗ, а вихідні коди викласти публічно, щоб кожен технічно грамотний користувач міг власноруч перевірити ще раз або навіть написати своє ПЗ для підрахунку.

Що в сухому залишку?

Отже, існують рішення для всіх технічних викликів для запуску онлайн-голосування. Нагадаймо їх ще раз:

  • Ніхто, крім самого виборця, не повинен знати про його вибір (звичайно, якщо виборець сам не опублікував свій “гаманець”);
  • тільки законні учасники можуть проголосувати і тільки за одного кандидата\партію (в залежності від законодавства, яке буде прийнято, правильним голосом буде вважатися той, який був першим або останнім за часом);
  • рішення виборця не може бути таємно чи явно кимось змінено (крім, можливо, самого виборця, – в залежності від обраного блокчейна, адже деякі транзакції йдуть досить довго, й ініціатор може їх скасувати, поки вони не дійшли до адресата);
  • кожен законний учасник може перевірити, чи правильно був зарахований його голос;
  • будь-який технічно грамотний користувач може перевірити правильність результатів голосування, а саме: чи правильно був проведений підрахунок голосів, чи мало місце видалення/додавання/оновлення голосів поза рамками голосування;
  • до закінчення голосування його хід, а точніше проміжні результати, залишаються невідомими.