paint-brush
ZkDemocracy: ساده ترین راه حل برای رای گیری ناشناس مبتنی بر مدرک بدون دانشتوسط@thebojda
603 قرائت
603 قرائت

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) برای راه اندازی سیستم، می توان به همان سطح امنیت ارائه شده توسط بلاک چین دست یافت.


من از کتابخانه Semaphore برای تولید و تأیید مدارک دانش صفر استفاده کردم. شبیه به zk-merkle-tree کار می کند، اما ممیزی شده است و پایگاه توسعه دهندگان بزرگ تری دارد.


zkDemocracy دارای دو عنصر اساسی است: گروه و رای دادن. یک گروه مجموعه ای از رای دهندگان است، مانند رای دهندگان یک حوزه انتخاباتی خاص، سهامداران شرکت و غیره. به همین ترتیب، رای دادن نشان دهنده یک رویداد رای گیری است که می تواند انتخابات ریاست جمهوری، رفراندوم، تصمیم گیری شرکتی و غیره باشد. چندین گروه می توانند در یک رویداد رای گیری شرکت کنند. به عنوان مثال، در یک همه پرسی، همه حوزه های انتخاباتی در رای گیری شرکت می کنند و نتایج جمع آوری می شود. به همین ترتیب، یک گروه می تواند در چندین رویداد رای گیری شرکت کند. بنابراین، اگر گروه‌های حوزه‌های انتخاباتی ایجاد شود، می‌توان با این گروه‌ها رفراندوم‌های متعدد برگزار کرد. به عبارت دیگر، گروه ها و رای گیری ها یک رابطه nm دارند.


اکنون بیایید نگاهی به نحوه عملکرد یک رفراندوم زمانی که بر اساس سیستم zkDemocracy ساخته می شود، بیاندازیم.


اولین قدم شناسایی افراد واجد شرایط رای دادن است. در یک سیستم رای گیری مبتنی بر کاغذ، این کار با ارائه فهرستی از واجدین شرایط برای هر حوزه انتخاباتی برای آن ناحیه انجام می شود. هنگامی که شخصی برای رای دادن ظاهر می شود، نام او از لیست خط زده می شود و اطمینان حاصل می شود که فقط یک بار می تواند رای دهد.


در رای گیری دیجیتال یا آنلاین، این فرآیند بسیار ساده تر است. اگر ایالت نوعی شناسایی دیجیتالی را ارائه دهد، تأیید می‌تواند کاملاً خودکار باشد. رای دهنده یک تعهد منحصر به فرد ارائه می دهد که با نام خود در پایگاه داده ثبت می شود. این نیمی از اثبات دانش صفر است. فهرست رای دهندگان و تعهدات عمومی است، با هش ایست بازرسی محافظت می شود و هر زمان که بخواهید می توان فهرست تایید شده دیجیتالی را درخواست کرد. بنابراین، اگر سیستم شناسایی امن باشد، کلاهبرداری در این مرحله از نظر نظری غیرممکن می شود.


اگر مدرک شناسایی دیجیتال ارائه نشده باشد، شناسایی دستی مورد نیاز است. این را می توان شخصا یا حتی از طریق یک سیستم ویدئو کنفرانس انجام داد (اگرچه شناسایی آنلاین به دلیل فناوری پیشرفته جعلی عمیق خطرات خود را دارد). شناسایی می تواند توسط یک نفر انجام شود، اما اگر توسط چندین نفر به طور تصادفی انتخاب شده انجام شود، ایمن تر است. در صورتی که ضبط ویدیویی شناسایی برای مدت محدودی انجام شود و ذخیره شود، امنیت بیشتری فراهم می شود. در طول این مدت، یک سازمان مستقل می تواند بررسی های تصادفی ضبط شده را انجام دهد تا احتمال تقلب را به حداقل برساند. این سیستم شناسایی به همان اندازه ایمن است یا حتی از سیستمی که در رای گیری کاغذی فعلی استفاده می شود، ایمن تر است.


پس از تکمیل موفقیت آمیز ثبت نام، فرآیند بسیار ساده می شود، زیرا رای دهنده می تواند هر تعداد که بخواهد در رای گیری شرکت کند. با توجه به هش ایست بازرسی و لیست رای دهندگان در دسترس عموم، اطمینان حاصل می شود که فقط افراد واجد شرایط می توانند رای دهند. کل پایگاه داده برای هر رویداد رأی گیری نیز عمومی است و توسط هش ایست بازرسی محافظت می شود. هرکسی می‌تواند با استفاده از شواهد دانش صفر تأیید کند که آیا رای داده شده از یک رأی‌دهنده معتبر است یا خیر، و هر رأی‌دهنده می‌تواند هر زمان که بخواهد بررسی کند که رأی خودش به درستی در پایگاه داده ثبت شده است یا خیر. رای دهندگان می توانند به راحتی هرگونه تقلب را با استفاده از رسید امضا شده دیجیتالی ارائه شده توسط سیستم ثابت کنند.


واضح است که با سیستم zkDemocracy، می توان اطمینان حاصل کرد که پایگاه های اطلاعاتی عمومی و قابل دسترسی برای همه هستند و سازگاری پایگاه داده قابل اثبات است و در عین حال ناشناس ماندن رأی دهندگان نیز حفظ می شود.


این سیستم در GitHub در آدرس زیر در دسترس است: https://github.com/TheBojda/zkdemocracy


من همچنین قصد دارم مقاله دیگری را به طور خاص برای توسعه دهندگان بنویسم. در عین حال، مستندات دقیق توسعه دهنده و کد نمونه برای استفاده از سیستم را می توان در GitHub یافت.


هدف من از این پیشرفت این است که ثابت کنم شرایط فن آوری برای بهبود سیستم های دموکراتیک ما فراهم است. این به ما بستگی دارد که چگونه از این فرصت ها استفاده کنیم...

L O A D I N G
. . . comments & more!

About Author

Laszlo Fazekas HackerNoon profile picture
Laszlo Fazekas@thebojda
Developer, Tech Writer, my GitHub profile: https://github.com/TheBojda

برچسب ها را آویزان کنید

این مقاله در ارائه شده است...