paint-brush
ZkDemocracy: ang Pinakamadaling Solusyon para sa Zero-knowledge Proof-based na Anonymous Votingsa pamamagitan ng@thebojda
Bagong kasaysayan

ZkDemocracy: ang Pinakamadaling Solusyon para sa Zero-knowledge Proof-based na Anonymous Voting

sa pamamagitan ng Laszlo Fazekas6m2024/09/16
Read on Terminal Reader

Masyadong mahaba; Upang basahin

Ang demokrasya ng kinatawan ay nahaharap sa mga hamon, at kailangan ang mga bago, mas direktang solusyon. Ang zkDemocracy ay isang patunay ng konsepto na nagpapakita na maaari nating ayusin ang anonymous na digital na pagboto nang abot-kaya, na nagpapahintulot sa mga tao na lumahok sa paggawa ng desisyon.
featured image - ZkDemocracy: ang Pinakamadaling Solusyon para sa Zero-knowledge Proof-based na Anonymous Voting
Laszlo Fazekas HackerNoon profile picture


Ang ating mga kasalukuyang sistema, na nakabatay sa kinatawan ng demokrasya, ay nahaharap sa maraming problema. Sa katunayan, hindi gumagana ang mga ito sa diwa na hindi nila natutupad ang pangunahing layunin ng demokrasya, na tiyaking mananaig ang kagustuhan ng nakararami.


Ang sumusunod na diagram ay pamilyar sa lahat:

pinagmulan: https://commons.wikimedia.org/wiki/File:How_to_Steal_an_Election_-_Gerrymandering.svg


Sa pamamagitan ng estratehikong pagpili ng mga distritong elektoral, maaaring mangyari na ang isang partido ay nanalo kahit na isang minorya lamang ng mga botante ang sumuporta dito. Ngunit ito ay isa lamang sa maraming problema. Ang pakikilahok sa pulitika ay nangangailangan ng maraming pera, na ginagawang mahina ang sistemang pampulitika sa impluwensyang pinansyal. Ang mga sistemang pinaniniwalaan naming demokratiko ay aktwal na nagsisilbi sa mga pribadong interes at korporasyon, hindi sa mga botante (tingnan ang State Capture ).


Ang solusyon ay para sa mga tao na lumahok sa paggawa ng desisyon sa mas direktang paraan, sa pamamagitan ng direktang demokrasya o likidong demokrasya. Siyempre, sa katotohanan, hindi magagawa ang pag-oorganisa ng mga referendum na nakabatay sa papel sa bawat isyu, dahil ang naturang pagboto ay lubhang masinsinang mapagkukunan. Ngunit hindi ba ito posible na lutasin ito nang digital, sa murang halaga, habang tinitiyak ang pagkawala ng lagda at seguridad ng pagboto na nakabatay sa papel? Nagsimula akong maghanap ng sagot sa tanong na ito mga dalawang taon na ang nakararaan. Ganito ako nakatagpo ng mga coin mixer at zero-knowledge-proof na teknolohiya.


Ang kakanyahan ng mga coin mixer ay gawing hindi masusubaybayan ang mga transaksyon sa blockchain. Ang ganitong panghalo ay gumagana tulad ng isang malaking pool. Ang mga gumagamit ay nagdedeposito ng kanilang mga barya sa isang gilid at bawiin ang mga ito sa kabilang panig. Ang susi ay hindi natin alam kung sino ang nag-withdraw ng coin sa kabilang panig habang tinitiyak na ang lahat ay makakapag-withdraw lamang ng parehong halaga na kanilang idineposito. Ito ang eksaktong uri ng sistema na kailangan para sa hindi kilalang pagboto. Ang bawat isa ay tumatanggap ng isang balota kung saan maaari silang bumoto. Hindi namin alam kung sino ang bumoto ng aling boto, ngunit maaari naming tiyakin na ang bawat tao ay bumoto lamang ng isang boto.


Kaya, sinilip ko ang source code ng isa sa pinakasikat na coin mixer, Tornado Cash, para maunawaan kung paano ito gumagana. Ang isang artikulo ay isinulat din tungkol dito. Sa sandaling lubos kong naunawaan ang functionality, pinaghiwalay ko ang mga pangunahing feature at gumawa ako ng library na tinatawag na zk-merkle-tree , na magagamit ng kahit sino para magsagawa ng anonymous na pagboto. Ang isang patunay ng application ng pagboto ng konsepto ay binuo din, na nagpapahintulot sa sinuman na bumuo ng kanilang sariling sistema. Ang sistema ay nakabatay sa blockchain, na ginagawa itong secure, ngunit sa parehong oras, ito rin ay napakahirap gamitin. Kung bubuo tayo sa isang umiiral na blockchain, ang mga gastos sa transaksyon tulad ng smart contract deployment at mga katulad na isyu ay lilitaw, habang ang pagpapatakbo ng sarili nating blockchain ay isang mas malaking hamon. Gusto ko ng solusyon na blockchain-free at madaling i-set up sa loob ng ilang minuto. Ganyan ipinanganak ang zkDemocracy .


Ang zkDemocracy ay isang tradisyonal na NodeJS at MySQL-based na system na maaaring i-set up sa loob lamang ng ilang minuto. Maaari itong gumana sa standalone mode, kung saan nagsisilbi ang zkDemocracy bilang kumpletong backend layer, o bilang isang serbisyong isinama sa isang mas malaking system.


Ang unang tanong na bumangon sa naturang sistema ay: paano masisiguro ang seguridad sa antas ng blockchain sa isang database ng MySQL?


Ang blockchain ay perpekto dahil ito ay isang append-only na solusyon kung saan ang mga pagbabago ay hindi posible, na tumutulong sa pag-filter ng karamihan sa mga uri ng pandaraya. Sa katotohanan, ang tanging paraan para manloko ay para sa isang tao na bumoto sa ngalan ng iba, o para sa isang tao na bumoto na hindi awtorisadong gawin ito. Ang mga posibilidad na ito ay mapipigilan sa pamamagitan ng wastong pagkakakilanlan ng botante. Kung ito ay matiyak, ang pandaraya ay magiging imposible sa teorya. Samakatuwid, kung makakapagtatag kami ng ganoong append-only system sa ibabaw ng MySQL, makakapagbigay kami ng parehong antas ng seguridad na inaalok ng blockchain.


Ang solusyon ng zkDemocracy sa problema ay ang bawat row na ipinasok sa mga talahanayan ng database ay nauugnay sa isang 'checkpoint hash.' Ito ay isang keccak256 hash, na binubuo ng data mula sa mga field at checkpoint hash ng nakaraang row. Katulad ng isang blockchain, ang mga checkpoint na hash ay nakakadena, kaya kung may mabago sa database, ang checkpoint hash ng bawat row pagkatapos ng binagong isa ay magbabago rin.


Kapag ang isang tao ay nagparehistro bilang isang botante o bumoto, ang system ay nagbibigay ng digitally signed, certified na resibo na nagkukumpirma na ang transaksyon ay nakumpleto. Ang resibo na ito ay naglalaman din ng checkpoint hash. Dahil ang parehong listahan ng mga miyembro at ang listahan ng mga boto ay ganap na pampubliko pagkatapos ng pagboto, sinuman ay maaaring suriin kung may anumang mga pagbabago na naganap, at kung gayon, maaari nilang gamitin ang digitally signed na resibo na ibinigay ng server upang patunayan ito.


Ang kasalukuyang listahan ng mga rehistradong botante at ang pinakahuling checkpoint hash ay maaaring makuha mula sa system anumang oras, na ginagawang agad na mapatunayan ang anumang pandaraya. Bukod pa rito, mayroong opsyon na isulat ang checkpoint hash sa blockchain sa mga regular na pagitan (halimbawa, bawat 10 minuto), higit pang tinitiyak na hindi mababago ang database pagkatapos maisulat ang hash sa blockchain. Ang solusyon na ito ay nagbibigay ng ganap na seguridad sa antas ng blockchain, dahil ang anumang pagtatangka na pakialaman ang data ay mangangailangan din ng pagbabago sa hash sa blockchain.


Malinaw na sa solusyon sa itaas, ang parehong antas ng seguridad na ibinigay ng blockchain ay maaaring makamit habang gumagamit ng mga pamilyar na teknolohiya (tulad ng MySQL clusters) upang patakbuhin ang system.


Ginamit ko ang library ng Semaphore para sa pagbuo at pag-verify ng mga patunay ng zero-knowledge. Gumagana ito nang katulad sa zk-merkle-tree ngunit na-audit at may mas malaking base ng developer.


Ang zkDemocracy ay may dalawang pangunahing elemento: grupo at pagboto. Ang isang grupo ay isang hanay ng mga botante, tulad ng mga botante mula sa isang partikular na distrito ng elektoral, mga shareholder ng kumpanya, atbp. Katulad nito, ang pagboto ay kumakatawan sa isang kaganapan sa pagboto, na maaaring isang halalan sa pagkapangulo, isang reperendum, paggawa ng desisyon ng kumpanya, at iba pa. Maraming grupo ang maaaring lumahok sa isang kaganapan sa pagboto; halimbawa, sa isang reperendum, ang lahat ng mga distritong elektoral ay lumahok sa boto, at ang mga resulta ay pinagsama-sama. Gayundin, maaaring lumahok ang isang grupo sa maraming kaganapan sa pagboto. Kaya, kung ang mga grupo para sa mga distritong elektoral ay itinatag, maraming reperendum ang maaaring isagawa kasama ng mga grupong ito. Sa madaling salita, ang mga grupo at pagboto ay may relasyon nm.


Tingnan natin ngayon kung paano gagana ang isang referendum kapag binuo sa zkDemocracy system.


Ang unang hakbang ay kilalanin ang mga taong karapat-dapat na bumoto. Sa isang paper-based na sistema ng pagboto, ito ay ginagawa sa pamamagitan ng pagbibigay sa bawat distrito ng elektoral ng listahan ng mga karapat-dapat na botante para sa distritong iyon. Kapag may nagpakita upang bumoto, ang kanilang pangalan ay i-cross sa listahan, na tinitiyak na maaari lang silang bumoto nang isang beses.


Sa digital o online na pagboto, ang prosesong ito ay mas simple. Kung ang estado ay nagbibigay ng ilang anyo ng digital na pagkakakilanlan, ang pag-verify ay maaaring ganap na awtomatiko. Ang botante ay nagsusumite ng isang natatanging pangako, na naitala kasama ang kanilang pangalan sa database. Ito ay kalahati ng zero-knowledge proof. Ang listahan ng mga botante at mga pangako ay pampubliko, protektado ng isang checkpoint hash, at isang digitally signed, certified na listahan ay maaaring hilingin anumang oras. Samakatuwid, kung ligtas ang sistema ng pagkakakilanlan, ang pandaraya sa yugtong ito ay magiging imposible sa teorya.


Kung ang isang digital na dokumento ng pagkakakilanlan ay hindi ibinigay, ang manu-manong pagkakakilanlan ay kinakailangan. Magagawa ito nang personal o kahit na sa pamamagitan ng isang video conferencing system (bagama't ang online na pagkakakilanlan ay may mga panganib dahil sa advanced na malalim na pekeng teknolohiya). Ang pagkakakilanlan ay maaaring isagawa ng isang tao, ngunit ito ay mas secure kung gagawin ng maraming random na piniling indibidwal. Ang karagdagang seguridad ay ibinibigay kung ang isang video recording ng pagkakakilanlan ay ginawa at nakaimbak sa isang limitadong oras. Sa panahong ito, ang isang independiyenteng organisasyon ay maaaring magsagawa ng mga random na pagsusuri sa mga pag-record upang higit pang mabawasan ang pagkakataon ng panloloko. Ang sistema ng pagkakakilanlan na ito ay kasing-secure gaya ng, o mas secure pa kaysa, ang ginagamit sa kasalukuyang pagboto na nakabatay sa papel.


Sa sandaling matagumpay na nakumpleto ang pagpaparehistro, ang proseso ay magiging napakasimple, dahil ang botante ay maaaring lumahok sa pinakamaraming boto hangga't gusto nila. Dahil sa checkpoint hash at sa listahan ng mga botante na naa-access ng publiko, tinitiyak na ang mga karapat-dapat na indibidwal lamang ang makakaboto. Ang buong database para sa bawat kaganapan sa pagboto ay pampubliko din at pinoprotektahan ng isang checkpoint hash. Kahit sino ay maaaring mag-verify, gamit ang zero-knowledge proofs, kung ang isang ibinigay na boto ay nagmula sa isang wastong botante, at ang bawat botante ay maaaring suriin anumang oras kung ang kanilang sariling boto ay tama na naitala sa database. Madaling mapatunayan ng mga botante ang anumang pandaraya gamit ang digitally signed receipt na ibinigay ng system.


Malinaw na sa sistema ng zkDemocracy, posibleng matiyak na ang mga database ay pampubliko at naa-access ng lahat at na ang pagkakapare-pareho ng database ay mapapatunayan, habang sa parehong oras ay pinapanatili ang hindi pagkakakilanlan ng botante.


Available ang system sa GitHub sa sumusunod na URL: https://github.com/TheBojda/zkdemocracy


Nagpaplano din akong magsulat ng isa pang artikulo partikular para sa mga developer. Pansamantala, ang detalyadong dokumentasyon ng developer at sample code para sa paggamit ng system ay makikita sa GitHub.


Ang layunin ko sa pag-unlad na ito ay patunayan na ang mga teknolohikal na kondisyon ay nasa lugar upang mapabuti ang ating mga demokratikong sistema. Nasa atin na kung paano natin magagamit ang mga pagkakataong ito...