Наші нинішні системи, які базуються на представницькій демократії, стикаються з багатьма проблемами. Насправді вони нефункціональні в тому сенсі, що не виконують фундаментальної мети демократії, яка полягає в тому, щоб воля більшості переважала.
Наступна схема знайома всім:
При стратегічному виборі виборчих округів може статися так, що партія виграє, навіть якщо її підтримала лише меншість виборців. Але це лише одна з багатьох проблем. Участь у політиці вимагає великих грошей, що робить політичну систему вразливою для фінансового впливу. Системи, які ми вважаємо демократичними, насправді служать приватним інтересам і корпораціям, а не виборцям (див. Захоплення держави ).
Рішення полягало б у тому, щоб люди брали участь у прийнятті рішень набагато більш прямим шляхом через пряму демократію або ліквідну демократію. Звичайно, насправді організувати паперові референдуми з кожного питання неможливо, оскільки таке голосування є надзвичайно ресурсомістким. Але хіба неможливо вирішити це цифровим способом, за низькі витрати, забезпечуючи при цьому анонімність і безпеку паперового голосування? Я почав шукати відповідь на це питання близько двох років тому. Ось як я зіткнувся з монетними міксерами та технологією з нульовим знанням.
Суть міксерів монет полягає в тому, щоб зробити блокчейн-транзакції невідстежуваними. Такий міксер працює як великий басейн. Користувачі вносять свої монети з одного боку та знімають їх з іншого. Ключовим є те, що ми не знаємо, хто знімає яку монету з іншого боку, гарантуючи, що кожен може зняти лише ту саму суму, яку він вніс. Саме така система потрібна для анонімного голосування. Кожен отримує бюлетень, на якому може віддати свій голос. Ми не знаємо, хто який голос віддав, але ми можемо бути впевнені, що кожна людина віддає лише один голос.
Отже, я заглибився у вихідний код одного з найпопулярніших міксерів монет Tornado Cash, щоб зрозуміти, як він працює. Про це теж була написана стаття . Коли я повністю зрозумів функціональні можливості, я розділив основні функції та створив бібліотеку під назвою zk-merkle-tree , яку кожен може використовувати для проведення анонімного голосування. Було також розроблено додаток для голосування підтвердження концепції , який дозволяє будь-кому створювати власну систему. Система базується на блокчейні, що робить її безпечною, але водночас дуже ускладнює її використання. Якщо ми будуємо на існуючому блокчейні, виникають транзакційні витрати, такі як розгортання смарт-контракту та подібні проблеми, тоді як експлуатація власного блокчейну є ще більшим викликом. Мені хотілося рішення без блокчейну, яке легко налаштувати за кілька хвилин. Так народилася zkDemocracy .
zkDemocracy — традиційна система на основі NodeJS і MySQL, яку можна налаштувати всього за кілька хвилин. Він може працювати в автономному режимі, де zkDemocracy служить повним серверним рівнем, або як сервіс, інтегрований у більшу систему.
Перше питання, яке виникає з такою системою: як можна забезпечити безпеку на рівні блокчейну для бази даних MySQL?
Блокчейн ідеальний, оскільки це рішення лише для додавання, де модифікації неможливі, що допомагає відфільтрувати більшість типів шахрайства. Насправді єдиний спосіб обману — це голосувати за інших або голосувати не уповноважені люди. Цим можливостям можна запобігти за допомогою належної ідентифікації виборців. Якщо це буде забезпечено, шахрайство стає теоретично неможливим. Таким чином, якщо ми зможемо встановити таку систему лише для додавання поверх MySQL, ми зможемо забезпечити той самий рівень безпеки, який пропонує блокчейн.
Рішення проблеми zkDemocracy полягає в тому, що кожен рядок, вставлений у таблиці бази даних, асоціюється з «хешом контрольної точки». Це хеш keccak256, який складається з даних із полів і хешу контрольної точки попереднього рядка. Подібно до блокчейну, хеші контрольних точок з’єднані в ланцюжок, тому, якщо щось змінено в базі даних, хеш контрольних точок кожного рядка після зміненого також зміниться.
Коли хтось реєструється як виборець або голосує, система надає завірену квитанцію з цифровим підписом, яка підтверджує, що транзакцію було завершено. Ця квитанція також містить хеш контрольної точки. Оскільки як список учасників, так і список голосів є повністю відкритими після голосування, будь-хто може перевірити, чи відбулися будь-які зміни, і якщо так, він може використати квитанцію з цифровим підписом, надану сервером, щоб підтвердити це.
Поточний список зареєстрованих виборців і останній хеш контрольних точок можна отримати з системи в будь-який час, що робить будь-яке шахрайство миттєво доказовим. Крім того, існує можливість записувати хеш контрольної точки в блокчейн через регулярні проміжки часу (наприклад, кожні 10 хвилин), додатково гарантуючи, що база даних не може бути змінена після того, як хеш було записано в блокчейн. Це рішення забезпечує повну безпеку на рівні блокчейну, оскільки будь-яка спроба підробити дані потребуватиме також зміни хешу в блокчейні.
Зрозуміло, що за допомогою вищевказаного рішення можна досягти такого ж рівня безпеки, який забезпечує блокчейн, використовуючи для роботи системи звичні технології (такі як кластери MySQL).
Я використовував бібліотеку Semaphore для створення та перевірки доказів із нульовим знанням. Він працює подібно до zk-merkle-tree, але пройшов аудит і має більшу базу розробників.
zkДемократія має два основні елементи: групу та голосування. Група – це набір виборців, таких як виборці з певного виборчого округу, акціонери компанії тощо. Подібним чином голосування представляє подію голосування, якою можуть бути президентські вибори, референдум, прийняття корпоративних рішень тощо. Кілька груп можуть брати участь в одному голосуванні; наприклад, на референдумі в голосуванні беруть участь усі виборчі округи, а результати підсумовуються. Так само група може брати участь у кількох подіях голосування. Отже, якщо створені групи по виборчих округах, з цими групами можна проводити багаторазові референдуми. Іншими словами, групи та голосування мають відношення nm.
Давайте тепер подивимося, як працював би референдум, побудований на системі zkDemocracy.
Перший крок – визначити людей, які мають право голосу. У системі паперового голосування це робиться шляхом надання кожному виборчому округу списку виборців, які мають право голосу для цього округу. Коли хтось з’являється для голосування, його ім’я викреслюється зі списку, що гарантує, що він може проголосувати лише один раз.
У цифровому чи онлайн-голосуванні цей процес набагато простіший. Якщо держава забезпечить певну форму цифрової ідентифікації, перевірка може бути повністю автоматизована. Виборець подає унікальне зобов’язання, яке разом із його ім’ям фіксується в базі даних. Це половина доказу нульового знання. Список виборців і зобов’язань є відкритим, захищеним хешем контрольної точки, і в будь-який час можна запросити сертифікований список із цифровим підписом. Тому, якщо система ідентифікації безпечна, шахрайство на цьому етапі стає теоретично неможливим.
Якщо цифровий ідентифікаційний документ не надається, потрібна ручна ідентифікація. Це можна зробити особисто або навіть за допомогою системи відеоконференцій (хоча онлайн-ідентифікація має свої ризики через передову технологію глибокого фейку). Ідентифікація може бути здійснена однією особою, але це безпечніше, якщо це робиться кількома випадково вибраними особами. Додаткова безпека забезпечується, якщо здійснюється відеозапис ідентифікації та зберігається протягом обмеженого часу. Протягом цього періоду незалежна організація може проводити випадкові перевірки записів, щоб мінімізувати ймовірність шахрайства. Ця система ідентифікації є такою ж безпечною, або навіть безпечнішою, ніж та, яка використовується в нинішньому паперовому голосуванні.
Після успішного завершення реєстрації процес стає дуже простим, оскільки виборець може брати участь у скільки завгодно голосуваннях. Завдяки хешу контрольно-пропускного пункту та загальнодоступному списку виборців гарантується, що голосувати можуть лише особи, які мають право. Уся база даних для кожної події голосування також є загальнодоступною та захищена хешем контрольної точки. Будь-хто може перевірити, використовуючи докази з нульовим знанням, чи даний голос походить від дійсного виборця, і кожен виборець може в будь-який час перевірити, чи його власний голос правильно зареєстровано в базі даних. Виборці можуть легко довести будь-яке шахрайство за допомогою квитанції з цифровим підписом, яку надає система.
Зрозуміло, що за допомогою системи zkDemocracy можна гарантувати, що бази даних є публічними та доступними для всіх, а узгодженість бази даних можна довести, водночас зберігаючи анонімність виборців.
Система доступна на GitHub за такою URL-адресою: https://github.com/TheBojda/zkdemocracy
Я також планую написати ще одну статтю спеціально для розробників. Тим часом детальну документацію для розробників і зразок коду для використання системи можна знайти на GitHub.
Моя мета цієї розробки — довести, що існують технологічні умови для вдосконалення наших демократичних систем. Від нас залежить, як ми зможемо використати ці можливості...