paint-brush
ZkDemocracy: უმარტივესი გამოსავალი ნულოვანი ცოდნის მტკიცებულებებზე დაფუძნებული ანონიმური ხმის მიცემისთვისმიერ@thebojda
805 საკითხავი
805 საკითხავი

ZkDemocracy: უმარტივესი გამოსავალი ნულოვანი ცოდნის მტკიცებულებებზე დაფუძნებული ანონიმური ხმის მიცემისთვის

მიერ Laszlo Fazekas6m2024/09/16
Read on Terminal Reader

Ძალიან გრძელი; Წაკითხვა

წარმომადგენლობითი დემოკრატია გამოწვევების წინაშე დგას და საჭიროა ახალი, უფრო პირდაპირი გადაწყვეტილებები. zkDemocracy არის კონცეფციის მტკიცებულება, რომელიც გვიჩვენებს, რომ ჩვენ შეგვიძლია მოვაწყოთ ანონიმური ციფრული ხმის მიცემა ხელმისაწვდომ ფასად, რაც ადამიანებს საშუალებას მისცემს მონაწილეობა მიიღონ გადაწყვეტილების მიღებაში.
featured image - ZkDemocracy: უმარტივესი გამოსავალი ნულოვანი ცოდნის მტკიცებულებებზე დაფუძნებული ანონიმური ხმის მიცემისთვის
Laszlo Fazekas HackerNoon profile picture


ჩვენი დღევანდელი სისტემები, რომლებიც წარმომადგენლობით დემოკრატიაზეა დაფუძნებული, მრავალი პრობლემის წინაშე დგანან. სინამდვილეში, ისინი დისფუნქციურნი არიან იმ თვალსაზრისით, რომ არ ასრულებენ დემოკრატიის ფუნდამენტურ მიზანს, რომელიც არის უმრავლესობის ნების გამარჯვების უზრუნველყოფა.


შემდეგი დიაგრამა ყველასთვის ნაცნობია:

წყარო: https://commons.wikimedia.org/wiki/File:How_to_Steal_an_Election_-_Gerrymandering.svg


საარჩევნო ოლქების სტრატეგიული შერჩევით შეიძლება მოხდეს, რომ პარტიამ გაიმარჯვოს, მიუხედავად იმისა, რომ მას მხოლოდ ამომრჩეველთა უმცირესობა დაუჭირა მხარი. მაგრამ ეს მხოლოდ ერთია მრავალი პრობლემისგან. პოლიტიკაში მონაწილეობა დიდ ფულს მოითხოვს, რაც პოლიტიკურ სისტემას ფინანსური გავლენის მიმართ დაუცველს ხდის. სისტემები, რომლებსაც ჩვენ დემოკრატიულად მივიჩნევთ, რეალურად ემსახურება კერძო ინტერესებს და კორპორაციებს და არა ამომრჩევლებს (იხ. სახელმწიფოს ხელში ჩაგდება ).


გამოსავალი იქნება ხალხის მონაწილეობა გადაწყვეტილების მიღებაში ბევრად უფრო პირდაპირი გზით, პირდაპირი დემოკრატიის ან ლიკვიდური დემოკრატიის გზით. რა თქმა უნდა, რეალურად შეუძლებელია ყველა საკითხზე ქაღალდზე დაფუძნებული რეფერენდუმის ორგანიზება, რადგან ასეთი კენჭისყრა უკიდურესად რესურსზე ინტენსიურია. მაგრამ განა შეუძლებელია ამის გადაჭრა ციფრული გზით, დაბალ ფასად, ქაღალდზე დაფუძნებული ხმის მიცემის ანონიმურობისა და უსაფრთხოების უზრუნველსაყოფად? ამ კითხვაზე პასუხის ძებნა დაახლოებით ორი წლის წინ დავიწყე. ასე შემხვდა მონეტების მიქსერები და ნულოვანი ცოდნის მტკიცებულება ტექნოლოგია.


მონეტების მიქსერების არსი მდგომარეობს იმაში, რომ ბლოკჩეინ ტრანზაქციები მიუკვლეველია. ასეთი მიქსერი მუშაობს როგორც დიდი აუზი. მომხმარებლები დეპონირებენ მონეტებს ერთ მხარეს და ამოიღებენ მეორე მხარეს. მთავარი ის არის, რომ ჩვენ არ ვიცით, ვინ რომელ მონეტას ამოიღებს მეორე მხარეს, ხოლო იმის უზრუნველსაყოფად, რომ ყველას შეუძლია მხოლოდ იმავე თანხის ამოღება, რაც შეიტანა. ზუსტად ასეთი სისტემაა საჭირო ანონიმური ხმის მიცემისთვის. ყველა იღებს ბიულეტენს, რომელზეც შეუძლია ხმის მიცემა. ჩვენ არ ვიცით ვინ რომელ ხმას მისცა, მაგრამ შეგვიძლია დარწმუნებული ვიყოთ, რომ თითოეული ადამიანი მხოლოდ ერთ ხმას აძლევს.


ასე რომ, მე ჩავუღრმავდი ერთ-ერთი ყველაზე პოპულარული მონეტის მიქსერის, Tornado Cash-ის საწყის კოდს, რათა გავიგო, როგორ მუშაობს იგი. ამის შესახებ სტატიაც დაიწერა. მას შემდეგ რაც სრულად გავიგე ფუნქციონალობა, გამოვყავი ძირითადი ფუნქციები და შევქმენი ბიბლიოთეკა სახელწოდებით zk-merkle-tree , რომელიც ნებისმიერს შეუძლია გამოიყენოს ანონიმური ხმის ჩასატარებლად. ასევე შემუშავდა ხმის მიცემის კონცეფციის დამადასტურებელი აპლიკაცია , რომელიც ნებისმიერს საშუალებას აძლევს შექმნას საკუთარი სისტემა. სისტემა დაფუძნებულია ბლოკჩეინზე, რაც მის უსაფრთხოებას ხდის, მაგრამ ამავე დროს, ძალიან ართულებს მის გამოყენებას. თუ ჩვენ ავაშენებთ არსებულ ბლოკჩეინს, წარმოიქმნება ტრანზაქციის ხარჯები, როგორიცაა ჭკვიანი კონტრაქტის განლაგება და მსგავსი საკითხები, მაშინ როცა ჩვენი საკუთარი ბლოკჩეინის ოპერირება კიდევ უფრო დიდი გამოწვევაა. მე მინდოდა გადაწყვეტა, რომელიც ბლოკჩეინისგან თავისუფალია და მარტივი დასაყენებელია რამდენიმე წუთში. ასე დაიბადა zkDemocracy .


zkDemocracy არის NodeJS და MySQL-ზე დაფუძნებული ტრადიციული სისტემა, რომლის დაყენება შესაძლებელია სულ რამდენიმე წუთში. მას შეუძლია იმუშაოს დამოუკიდებელ რეჟიმში, სადაც zkDemocracy ემსახურება როგორც სრული უკანა ფენა, ან როგორც სერვისი ინტეგრირებული უფრო დიდ სისტემაში.


პირველი კითხვა, რომელიც ჩნდება ასეთ სისტემასთან დაკავშირებით, არის: როგორ შეიძლება იყოს უზრუნველყოფილი ბლოკჩეინის დონის უსაფრთხოება MySQL მონაცემთა ბაზაში?


ბლოკჩეინი იდეალურია, რადგან ის არის მხოლოდ დანართი გადაწყვეტა, სადაც ცვლილებები შეუძლებელია, რაც ხელს უწყობს თაღლითობის უმეტესობის გაფილტვრას. სინამდვილეში, მოტყუების ერთადერთი გზა არის ის, რომ ვინმემ ხმა მისცეს სხვისი სახელით, ან ვინმემ მისცეს ხმა, რომელიც არ არის ამის უფლება. ამ შესაძლებლობების თავიდან აცილება შესაძლებელია ამომრჩეველთა სათანადო იდენტიფიკაციით. თუ ეს უზრუნველყოფილია, თაღლითობა თეორიულად შეუძლებელი ხდება. ამიტომ, თუ ჩვენ შეგვიძლია დავამყაროთ ასეთი მხოლოდ დამატებული სისტემა MySQL-ზე, ჩვენ შეგვიძლია უზრუნველვყოთ უსაფრთხოების იგივე დონე, რასაც ბლოკჩეინი გვთავაზობს.


zkDemocracy-ის პრობლემის გადაწყვეტა არის ის, რომ მონაცემთა ბაზის ცხრილებში ჩასმული თითოეული მწკრივი ასოცირდება "გამშვებ პუნქტთან ჰეშთან". ეს არის keccak256 ჰეში, რომელიც შედგება ველებიდან და წინა რიგის საკონტროლო პუნქტის ჰეშისგან. ბლოკჩეინის მსგავსად, გამშვები პუნქტის ჰეშები ჯაჭვურია, ასე რომ, თუ მონაცემთა ბაზაში რაიმე შეიცვლება, შეცვლილი მწკრივის შემდეგ ყოველი სტრიქონის ჰეშიც შეიცვლება.


როდესაც ვინმე დარეგისტრირდება როგორც ამომრჩეველი ან აძლევს ხმას, სისტემა იძლევა ციფრულად ხელმოწერილ, დამოწმებულ ქვითარს, რომელიც ადასტურებს, რომ გარიგება დასრულდა. ეს ქვითარი ასევე შეიცავს საგუშაგოს ჰეშს. ვინაიდან წევრთა სია და ხმების სია სრულად საჯაროა კენჭისყრის შემდეგ, ნებისმიერს შეუძლია შეამოწმოს მოხდა თუ არა რაიმე ცვლილება და თუ ასეა, მათ შეუძლიათ გამოიყენონ სერვერის მიერ მოწოდებული ციფრულად ხელმოწერილი ქვითარი ამის დასამტკიცებლად.


რეგისტრირებულ ამომრჩეველთა ამჟამინდელი სია და უახლესი საგუშაგო ჰეშის ამოღება შესაძლებელია სისტემიდან ნებისმიერ დროს, რაც ნებისმიერ თაღლითობას მყისიერად დასამტკიცებლად ხდის. გარდა ამისა, არსებობს შესაძლებლობა, ჩაწეროთ გამშვები პუნქტის ჰეში ბლოკჩეინში რეგულარულად (მაგალითად, ყოველ 10 წუთში), რაც კიდევ უფრო უზრუნველყოფს, რომ მონაცემთა ბაზა არ შეიცვალოს მას შემდეგ, რაც ჰეში ჩაიწერება ბლოკჩეინში. ეს გადაწყვეტა უზრუნველყოფს ბლოკჩეინის დონის სრულ უსაფრთხოებას, რადგან მონაცემების ხელყოფის ნებისმიერი მცდელობა მოითხოვს ბლოკჩეინზე ჰეშის შეცვლასაც.


ნათელია, რომ ზემოაღნიშნული გადაწყვეტით, ბლოკჩეინის მიერ უზრუნველყოფილი უსაფრთხოების იგივე დონის მიღწევა შესაძლებელია სისტემის მუშაობისთვის ნაცნობი ტექნოლოგიების (როგორიცაა MySQL კლასტერების) გამოყენებისას.


მე გამოვიყენე სემაფორის ბიბლიოთეკა ნულოვანი ცოდნის მტკიცებულებების გენერირებისთვის და გადამოწმებისთვის. ის მუშაობს zk-merkle-tree-ის მსგავსად, მაგრამ ჩატარდა აუდიტი და აქვს უფრო დიდი დეველოპერული ბაზა.


zkDemocracy აქვს ორი ფუნდამენტური ელემენტი: ჯგუფი და ხმის მიცემა. ჯგუფი არის ამომრჩეველთა ნაკრები, როგორიცაა ამომრჩევლები კონკრეტული საარჩევნო ოლქიდან, კომპანიის აქციონერები და ა.შ. ანალოგიურად, ხმის მიცემა წარმოადგენს ხმის მიცემის მოვლენას, რომელიც შეიძლება იყოს საპრეზიდენტო არჩევნები, რეფერენდუმი, კორპორატიული გადაწყვეტილების მიღება და ა.შ. მრავალ ჯგუფს შეუძლია მონაწილეობა მიიღოს ერთ ხმის მიცემაში; მაგალითად, რეფერენდუმში კენჭისყრაში მონაწილეობს ყველა საარჩევნო ოლქი და ხდება შედეგების გაერთიანება. ანალოგიურად, ჯგუფს შეუძლია მონაწილეობა მიიღოს მრავალ ხმის მიცემაში. ასე რომ, თუ საარჩევნო ოლქების ჯგუფები შეიქმნა, ამ ჯგუფებთან შეიძლება ჩატარდეს მრავალჯერადი რეფერენდუმი. სხვა სიტყვებით რომ ვთქვათ, ჯგუფებს და კენჭისყრებს აქვთ nm ურთიერთობა.


მოდით ახლა გადავხედოთ, თუ როგორ იმუშავებს რეფერენდუმი zkDemocracy სისტემაზე აგებული.


პირველი ნაბიჯი არის ხმის მიცემის უფლებამოსილი ადამიანების იდენტიფიცირება. ქაღალდზე დაფუძნებული ხმის მიცემის სისტემაში, ეს ხდება თითოეული საარჩევნო ოლქის მიწოდებით ამ ოლქისთვის ამომრჩეველთა სიით. როდესაც ვინმე გამოჩნდება ხმის მისაცემად, მისი სახელი ამოიწერება სიიდან, რაც უზრუნველყოფს ხმის მიცემას მხოლოდ ერთხელ.


ციფრული თუ ონლაინ ხმის მიცემისას ეს პროცესი გაცილებით მარტივია. თუ სახელმწიფო უზრუნველყოფს ციფრული იდენტიფიკაციის რაიმე ფორმას, გადამოწმება შეიძლება იყოს სრულად ავტომატიზირებული. ამომრჩეველი წარადგენს უნიკალურ ვალდებულებას, რომელიც დაფიქსირებულია მისი სახელწოდებით მონაცემთა ბაზაში. ეს არის ნულოვანი ცოდნის მტკიცებულების ნახევარი. ამომრჩეველთა სია და ვალდებულებები საჯაროა, დაცულია საგუშაგოს ჰეშით და ციფრულად ხელმოწერილი, დამოწმებული სიის მოთხოვნა ნებისმიერ დროს შეიძლება. ამიტომ, თუ იდენტიფიკაციის სისტემა უსაფრთხოა, თაღლითობა ამ ეტაპზე თეორიულად შეუძლებელი ხდება.


თუ ციფრული საიდენტიფიკაციო დოკუმენტი არ არის მოწოდებული, საჭიროა ხელით იდენტიფიკაცია. ეს შეიძლება გაკეთდეს პირადად ან თუნდაც ვიდეო კონფერენციის სისტემის საშუალებით (თუმცა ონლაინ იდენტიფიკაციას აქვს თავისი რისკები მოწინავე ღრმა ყალბი ტექნოლოგიის გამო). იდენტიფიკაცია შეიძლება განხორციელდეს ერთი ადამიანის მიერ, მაგრამ ეს უფრო უსაფრთხოა, თუ ეს მოხდება რამდენიმე შემთხვევით შერჩეული ინდივიდის მიერ. დამატებითი უსაფრთხოება უზრუნველყოფილია, თუ იდენტიფიკაციის ვიდეოჩანაწერი მზადდება და ინახება შეზღუდული დროით. ამ პერიოდის განმავლობაში, დამოუკიდებელ ორგანიზაციას შეუძლია ჩაატაროს შემთხვევითი შემოწმებები ჩანაწერებზე, რათა მინიმუმამდე დაიყვანოს თაღლითობის შანსი. ეს საიდენტიფიკაციო სისტემა ისეთივე უსაფრთხოა, როგორც ან კიდევ უფრო უსაფრთხო, ვიდრე ის, რომელიც გამოიყენება მიმდინარე ქაღალდზე დაფუძნებული ხმის მიცემისას.


რეგისტრაციის წარმატებით დასრულების შემდეგ პროცესი ძალიან მარტივი ხდება, რადგან ამომრჩეველს შეუძლია მონაწილეობა მიიღოს იმდენ ხმის მიცემაში, რამდენიც სურს. საგუშაგოს ჰეშისა და საჯაროდ ხელმისაწვდომი ამომრჩეველთა სიის გამო, უზრუნველყოფილია ხმის მიცემის უფლება მხოლოდ უფლებამოსილ პირებს. თითოეული ხმის მიცემის ღონისძიების მთელი მონაცემთა ბაზა ასევე საჯაროა და დაცულია გამშვები პუნქტის ჰეშით. ნებისმიერს შეუძლია გადაამოწმოს ნულოვანი ცოდნის მტკიცებულებების გამოყენებით, არის თუ არა მოცემული ხმა სწორი ამომრჩევლისგან და თითოეულ ამომრჩეველს შეუძლია ნებისმიერ დროს შეამოწმოს, სწორად არის თუ არა მათი ხმა ჩაწერილი მონაცემთა ბაზაში. ამომრჩეველს შეუძლია მარტივად დაამტკიცოს ნებისმიერი თაღლითობა სისტემის მიერ მოწოდებული ციფრული ხელმოწერის ქვითრის გამოყენებით.


ცხადია, რომ zkDemocracy სისტემით შესაძლებელია უზრუნველყოფილი იყოს მონაცემთა ბაზების საჯარო და ხელმისაწვდომი ყველასთვის და მონაცემთა ბაზის თანმიმდევრულობა დასამტკიცებელი, ამავდროულად, ამომრჩეველთა ანონიმურობის შენარჩუნება.


სისტემა ხელმისაწვდომია GitHub-ზე შემდეგ URL-ზე: https://github.com/TheBojda/zkdemocracy


ასევე ვაპირებ კიდევ ერთი სტატიის დაწერას სპეციალურად დეველოპერებისთვის. იმავდროულად, დეტალური დეველოპერის დოკუმენტაცია და სისტემის გამოყენების კოდის ნიმუში შეგიძლიათ იხილოთ GitHub-ზე.


ჩემი მიზანი ამ განვითარებით არის იმის დამტკიცება, რომ არსებობს ტექნოლოგიური პირობები ჩვენი დემოკრატიული სისტემების გასაუმჯობესებლად. ჩვენზეა დამოკიდებული, როგორ გამოვიყენოთ ეს შესაძლებლობები...