الگوریتم اثبات دانش صفر (ZKP) چیست؟ چه پروژههایی از آن استفاده میکنند؟

تا به حال به این موضوع فکر کردهاید که چگونه امکان دارد بدون آن که اطلاعاتی در رابطه با یک موضوع ارائه دهید، درستی آن را اثبات کنید؟ یا آیا تا به حال فکر کردید که چگونه امکان دارد یک فرد نابینا، بدون آن که رنگ دو جسم را بداند و یا سوالی در رابطه با رنگ آن دو بپرسد، بفهمد که آیا این دو جسم همرنگ هستند یا خیر؟ یا برای مثال فرض کنید یک جعبه در بسته وجود دارد که محتوا آن مشخص نیست؛ فرد A بدون آن که اطلاعاتی در رابطه با محتوا آن جعبه به فرد B بدهد، به او ثابت میکند که از محتوا آن جعبه آگاهی دارد. اما این کارها چگونه انجام میشود؟ آیا در رابطه با الگوریتم اثبات دانش صفر اطلاعاتی دارید؟
در این مقاله به این الگوریتم خواهیم پرداخت که پاسخ سوالات مطرح شده میباشد.
الگوریتم اثبات دانایی صفر یک همچین امکانی را فراهم میکند تا فردی، درستی موضوعی را بدون ارائه دادن اطلاعات مهم و اصلی، به فرد دیگر ثابت کند. این نوع الگوریتم به دلیل حفاظت از حریم خصوصی، به محبوبیت بالایی دست یافته است و کاربرد فراوانی حتی در پروژههای بلاکچینی کسب کرده است. در ادامه این مقاله به زبان ساده اما به صورت کامل با این الگوریتم آشنا خواهیم شد و سپس به آینده بلاکچینهایی که از این نوع الگوریتم استفاده میکنند خواهیم پرداخت. پس تا آخر این مقاله با ما همراه باشید.
آشنایی با الگوریتم اثبات دانایی صفر
اگر در بازار رمزارزها فعالیت میکنید و به رمزارزهایی که در حوزه حریم خصوصی (Privacy) فعالیت میکنند علاقه دارید، پس احتمالاً تا به حال با واژه ZKP مواجه شدهاید. واژه ZKP مخفف عبارت Zero-Knowledge Proof به معنای “اثبات دانش صفر” است. اثبات دانش صفر یا اثبات هیچ آگاهی نوعی الگوریتم است که به فرد کمک میکند تا صحت موضوعی را اثبات کند، اما بدون آنکه اطلاعاتی در رابطه با آن موضوع ارائه دهد. البته در نظر داشته باشید که اثبات دانایی صفر موضوع جدیدی نیست و حدود ۴۰ سال پیش توسط آقای گلدواسر میکالی (Goldwasser Micali) معرفی شده است. این الگوریتم در مسائل امنیتی، احراز هویت غیرمتمرکز و حفظ حریم خصوصی بیشترین کاربرد را دارد. (الگوریتم اثبات دانش صفر همچنین به عبارتهای اثبات دانایی صفر، اثبات هیچ آگاهی و اثبات آگاهی صفر نیز معروف است)
این موضوع شاید عجیب به نظر برسد که چگونه امکان دارد بدون ارائه دادن اطلاعات از یک موضوع، صحت آن را اثبات کرد. به همین دلیل و برای درک بهتر، به دو مثال ساده و معروف خواهیم پرداخت تا با نحوه کار این الگوریتم (اثبات داناش صفر) بیشتر آشنا شوید. اما قبل از بررسی این دو مثال باید به دو دسته (نقش) اصلی در این الگوریتم، یعنی اثبات کنندگان و تایید کنندگان بپردازیم.
اثبات کننده و تایید کننده در الگوریتم اثبات دانایی صفر
در الگوریتم اثبات دانایی صفر دو نقش اصلی وجود دارد، “تایید کننده (Prover)” و “اثبات کننده (Verifier)”. در مثال جعبه و محتوا آن که در ابتدا مقاله به آن پرداختیم، فرد A در تلاش بود تا به فرد B اثبات کند که از محتوا آن جعبه آگاهی دارد و فرد B بدون آن که اطلاعاتی از محتوا آن جعبه از فرد A بگیرد باید ادعای فرد A را بررسی و سپس تایید یا رد میکرد، در این مثال فرد A اثبات کنند و فرد B تایید کننده بود. درواقع در این نوع الگوریتمها، اثبات کنندگان قصد دارند تا صحت اطلاعاتی که در دست دارند را بدون افشا کردن آن، اثبات کنند و تاییدکنندگان موظف هستند تا بدون دریافت آن اطلاعات، صحت آن اطلاعات را مورد بررسی قرار دهند.
اکنون که با نقش اثبات کننده و تایید کننده آشنا شدید به مثالها بپردازیم تا الگوریتمهای اثبات دانایی صفر را بیشتر درک کنید.
مثال اول: دو توپ همشکل و فرد نابینا
در این مثال فردی وجود دارد (فرد A) که دو توپ کاملاً همشکل در دست دارد و ادعا میکند این دو توپ همرنگ نیستند. در مقابل نیز فردی وجود دارد (فرد B) که نابینا است و باید درستی ادعای فرد A را تایید کند.
فرد A اثبات کننده بوده و باید به فرد B تفاوت رنگی این دو توپ را اثبات کند در مقابل نیز فرد B تایید کننده است و باید بدون آن که اطلاعاتی از رنگ آن دو توپ بگیرد، درستی ادعای فرد A را بررسی کرده و سپس این ادعا را تایید و یا رد کند. از آنجایی که فرد B نابینا است، نتیجه میگیریم که از رنگ توپها هیچ نوع آگاهی ندارد، اما در حالی که هیچ آگاهی از رنگ توپها ندارد، چگونه میتواند ادعای فرد A را بررسی کند؟
فرد B که در این مثال نقش تایید کننده را دارد، در قدم اول یکی از توپها را به فرد A نشان میدهد، سپس توپها را دور از چشم فرد اثبات کننده (فرد A) هم زده و یکی از توپها را مجدد انتخاب میکند. در حالی که خود فرد B آگاهی دارد که توپ انتخاب شده توپ قبلی است یا خیر، توپ انتخاب شده را به فرد A نشان میدهد و از او میپرسد که آیا این توپ، همان توپ قبلی است یا خیر؟
در شرایطی که ادعای فرد A درست باشد و توپها همرنگ نباشند، فرد A از رنگ توپها میتواند بفهمد که آیا فرد B، مجدد توپ قبلی را نمایش میدهد یا خیر و جواب درست را بدهد. فرد B هم اگر جواب درست را بشنود، به این موضوع پی میبرد که توپها همرنگ نبودند و ادعای فرد A (دو رنگ بودن توپها) را تایید میکند.
اما در مقابل اگر ادعای فرد A درست نباشد و توپها همرنگ باشند، دیگر فرد A توانایی شناسایی توپها را ندارد و نمیتواند بفهمد که آیا توپ نمایش داده شده همان توپ قبلی است یا خیر. پس در این شرایط فرد A نمیتواند جواب درست را بدهد و تایید کننده (فرد B) این ادعا را (اختلاف رنگی توپها) رد میکند.
البته این موضوع را در نظر داشته باشید که فرد اثبات کننده (فرد A) در شرایط دوم که ادعا نادرست بود (توپها همرنگ بودند) نیز میتواند شانسی جواب دهد و ۵۰ درصد نیز احتمال دارد جواب شانسی او، درست باشد. اما تایید کننده صرفاً با یکبار سوال کردن ادعای اثبات کننده را تایید نمیکند و آنقدر این سوال را تکرار میکند تا احتمال پاسخ شانسی اثبات کننده بشدت به صفر نزدیک شود (با هر بار هم زدن توپها و مجدد سوال کردن، احتمال درست جواب دادن به تمامی سوالات به صورت شانسی توسط اثبات کننده، نصف میشود).
پس در نتیجه تایید کننده بارها سوال خود را تکرار میکند تا در نهایت احتمال خطا به صفر نزدیک شده و تایید کننده مطمئن شود آیا ادعای اثبات کننده درست بوده است یا خیر تا آن ادعا را تایید و یا رد کند. این بررسی در شرایطی است که تایید کننده نابینا است و هیچ سوالی در رابطه با رنگ دو توپ نپرسیده است و هیچ آگاهی در رابطه با رنگ توپها ندارد، اما همرنگ بودن یا نبودن آنها را بررسی و تایید میکند.
مثال دوم: دو مسیر و در قفل شده
در این مثال نیز مانند مثال قبل یک اثبات کننده (فرد A) و یک تایید کننده (فرد B) وجود دارد. اما در این مثال دو مسیر وجود دارد که این دو مسیر به یک در مشترک میرسند که این در رمز دارد و قفل شده است (مانند شکل زیر). فرد اثبات کننده ادعا میکند که رمز قفل را میداند و فرد تایید کننده بدون آن که اطلاعاتی از آن رمز داشته باشد، باید این ادعا را رد و یا تایید کند.
در این مثال فرد A، یکی از مسیرها را انتخاب کرده و از آن مسیر وارد میشود. سپس در حالی که فرد B اطلاعی از مسیر انتخابی فرد A ندارد، یکی از مسیرها را انتخاب میکند و از فرد A درخواست میکند تا از آن مسیر خارج شود. اگر مسیرهای انتخاب شده توسط فرد اثبات کننده و فرد تایید کننده یکسان باشند، پس فرد اثبات کننده (فرد A) میتواند، بدون مواجه شدن با در و باز کردن قفل، از همان مسیری که رفته و به در قفل شده رسیده است مجدد برگردد. اما اگر مسیرهای انتخاب شده یکسان نباشند، فرد اثبات کننده مجبور است تا با وارد کردن رمز، قفل در را باز کرده و از دیگر مسیر (مسیر انتخابی فرد تایید کننده) خارج شود.
در این مثال اگر ادعای فرد اثبات کننده درست باشد و او رمز قفل را بداند، پس هر تعداد بار فرد تایید کننده (فرد B) این کار را درخواست کند، فرد اثبات کننده میتواند فارغ از این که تایید کننده کدام مسیر را انتخاب کرده است، درخواست او را به درستی اجرا کند و از هر مسیری که اعلام شود، توانایی برگشت از آن مسیر را دارد.
اما اگر این ادعا درست نباشد و اثبات کننده از رمز قفل آگاهی نداشته باشد، در هر بار درخواستی که تایید کننده (فرد B) انجام میدهد، ۵۰ درصد امکان دارد که مسیرهای انتخابی یکسان نباشند و اثبات کننده توانایی برگشت از آن مسیر را نداشته باشد. پس در این شرایط تایید کننده (فرد B) با احتمال ۵۰ درصد میتواند متوجه نادرست بودن ادعای اثبات کننده (فرد A) شود و ادعای او را رد کند.
در این مثال هم دقیقاً مانند مثال قبل، تایید کننده به قدری سوال خود را تکرار میکند تا احتمال خطا به حد قابل قبولی به صفر نزدیک شود و در نهایت بتواند آن ادعا را تایید و یا رد کند. در این مثال نیز فرد تایید کننده بدون کسب هیچ اطلاعاتی در رابطه با رمز قفل، ادعای فرد اثبات کننده را را بررسی میکند تا صحت آن ادعا را تایید و یا رد کند.
الگوریتم اثبات دانایی صفر در بلاکچین
دو مثال ذکر شده، معروف ترین مثالهایی هستند که یک فرد تایید کننده بدون داشتن هیچ آگاهی خاص از یک موضوع، آن موضوع را تایید و یا رد میکند. الگوریتم اثبات دانایی صفر نیز دقیقاً به همین شکل مسائل را بررسی کرده و درستی آنها را تایید و یا رد میکند.
سیستمهای بلاکچینی که از این الگوریتم استفاده میکنند نیز دقیقاً به همین صورت فعالیت میکنند. در این نوع بلاکچینها افراد تایید کننده، همان گرههای (Nodes) بلاکچین هستند و در مقابل افراد اثبات کننده، افرادی هستند که تراکنشی را انجام دادهاند و باید صحت آن تراکنش را بدون در اختیار گذاشتن اطلاعات مهم (مانند آدرس فرستنده، آدرس گیرنده و مقدار ارز انتقال داده شده) برای تایید کنندگان، اثبات کنند و تایید کنندگان یا همان گرههای بلاکچین با حفظ حریم خصوصی آن تراکنش، صحت آن را بررسی و سپس تایید و یا رد کنند.
اما نوع عملکرد الگوریتمهایی که در بلاکچینها استفاده میشود کمی متفاوت با مثالهایی است که ذکر شد. درواقع الگوریتمهایی که بر پایه اثبات دانایی صفر هستند، به دو دسته تقسیم میشوند که در ادامه با این دو دسته بیشتر آشنا خواهیم شد.
انواع روشهای اثبات دانایی صفر
الگوریتمهای اثبات دانایی صفر، به دو روش صورت میگیرند؛ روش اول به صورت تعاملی و روش دوم به صورت غیرتعاملی است که در ادامه هر کدام از آنها بررسی خواهیم کرد.
روش تعاملی
در مثالهایی که بالاتر به آن پرداختیم، اثبات کننده برای اثبات دانش خود باید با تایید کننده تعامل داشته باشد و ارتباط مستقیم با یک تایید کننده برقرار کند و در نهایت آن موضوع را فقط برای آن تایید کننده اثبات کند. در این حالت اثبات کننده برای اثبات دانش خود باید با هر کدام از تایید کنندگان جداگانه تعامل برقرار کند و همان کار را بارها و بارها تکرار کند. این نوع روشها امنیت بالایی دارند اما برای جامعههایی کاربرد دارند که در آن تعداد تایید کنندگان کمتر باشد.
روش غیرتعاملی
در این روش اثبات کننده نیازی به داشتن تعامل با تاییدکننده ندارد و دانش خود را به نحوی اثبات میکند که هر تعداد تاییدکننده که قصد تایید آن را داشته باشند، بتوانند بدون کسب هیچ دانش و آگاهی خاص، و حتی بدون داشتن هیچ تعامل مستقیم با فرد اثبات کننده، ادعای اثبات کننده را تایید کنند.
در پروژههای بلاکچینی نوع دوم (نوع غیرتعاملی) الگوریتمهای اثبات دانایی صفر کاربرد دارد زیرا تعامل داشتن یک انجام دهنده تراکنش (اثبات کننده) با تمامی گرهها (تایید کنندگان) تفریباً غیر ممکن و بسیار وقت گیر است. روشهای غیرتعاملی سعی بر افزایش مقیاسپذیری یک بلاکچین را نیز دارند.
حریم خصوصی در بلاکچین
اگر در بازار رمزارزها فعالیت میکنید، احتمالاً این موضوع را میدانید که رمزارزها را راهی برای حفاظت از حریم خصوصی میدانند. کاربران بلاکچینها و ارزهای دیجیتال یک آدرس عمومی برای رمزارزهای خود دارند که انتقال دارایی به این آدرسها صورت میگیرد. این آدرسهای عمومی به صورت یک تعداد کارکتر تصادفی ایجاد میشوند و مالکیت آدرسهای عمومی مشخص نیست (البته در صورتی که حریم خصوصی آن توسط صاحبان آنها حفط شود). رمزارزها با این کار، از حریم خصوصی کاربران حفاظت میکنند.
اما در حالی که رمزارها را راهی برای حفاظت از حریم خصوصی میدانند، در بلاکچینهایی مانند بیتکوین، تمامی تراکنشها در بلاکچین شفاف بوده و توسط مرورگرهای آن بلاکچین قابل ردیابی هستند و مشخص است چه میزان دارایی از چه آدرسی به چه آدرسی انتقال پیدا کرده است. برای جلوگیری از ردیابی تراکنشها، بلاکچینهایی ایجاد شدند که اولویت خود را بر پایه حفاظت هر چه بیشتر از حریم خصوصی تراکنشها بنا کردهاند و در این بلاکچینها امکان ردیابی تراکنشها وجود ندارد. یکی از محبوبترین تکنیکهای استفاده شده در این نوع بلاکچینها، الگوریتمهای اثبات دانایی صفر هستند و چنین بلاکچینهایی با این کار، حفاظت از حریم خصوصی تراکنشها را تا حد زیادی افزایش میدهند.
یکی از معروفترین بلاکچینهایی که در حوزه حفاظت از حریم خصوصی تراکنشها فعالیت میکنند، بلاکچین Zcash است که با استفاده از الگوریتم ZK-SNARKs که نوعی الگوریتم بر پایه اثبات دانایی صفر است (از نوع غیرتعاملی)، حفاظت از حریم خصوصی تراکنشها را به صورت چشمگیری افزایش داده است.
کدام بلاکچینها از الگوریتمهای اثبات دانش صفر استفاده میکنند؟
بلاکچین Zcash معروفترین بلاکچینی است که از اثبات دانایی صفر (ZKP) استفاده میکند. بلاکچین Zcash با استفاده کردن از ZK-SNARKs محبوبیت زیادی را در بازار رمزارزها بدست آورد و پس از آن بلاکچینهای زیادی از این الگوریتم استفاده کردند.
بلاکچین Mina دیگر پروژه بلاکچینی است که از این نوع الگوریتم استفاده میکند، این بلاکچین با استفاده از اثبات دانایی صفر حجم بلاکچین خود را در حجم بسیار پایینی ثابت نگه میدارد، و همین موضوع باعث محبوبیت بالای این بلاکچین شده است.
دیگر پروژه بلاکچینی که از الگوریتم اثبات دانایی صفر استفاده میکند، بلاکچین توموچین (TomoChain) است. این بلاکچین در یکی از پروتکلهای محبوب خود یعنی TomoP از نوعی تکنیک بر پایه اثبات دانایی صفر استفاده میکند که این تکنیک BulletProof نام دارد (BulletProof تمرکز ویژهای بر افزایش سرعت پردازش تراکنشها و در نتیجه افزایش مقیاس پذیری دارد).
در ادمه نیز میتوان به دیگر بلاکچینهایی مانند Celo , cellframe , Firo و … اشاره کرد که از این الگوریتم استفاده میکنند.
آینده الگوریتم اثبات دانایی صفر
امروزه بحث حفاظت از حریم خصوصی اهمیت خیلی بالایی دارد و اهمیت آن روز به روز افزایش پیدا میکند. الگوریتمهای بر پایه اثبات دانایی صفر عملکرد خیلی خوبی در این حوزه داشتهاند و پروژههایی که به صورت بهینه از این الگوریتمها استفاده کنند، در آینده میتوانند رشد و کاربرد خیلی بالایی داشته باشند.
البته این موضوع را نیز مد نظر داشته باشید که تاییدکنندگان در الگوریتمهای بر پایه اثبات دانایی صفر، احتمال خطا را تا حد زیادی به صفر نزدیک میکنند اما همچنان احتمال خطا، هر چند خیلی کم ولی وجود دارد و این موضوع میتواند به عنوان ریسک این الگوریتمها به حساب آید.
جمعبندی
در الگوریتمهای اثبات دانایی صفر یک نفر به نام اثبات کننده (Prover) قصد دارد که به یک یا چند نفر به نام تایید کنندگان (Verifier)، درستی موضوعی را اثبات کند، اما در شرایطی که هیچ اطلاعاتی در رابطه با اصل آن موضوع ارائه ندهد. این نوع الگوریتمها باعث افزایش حفاظت از حریم خصوصی میشوند و در نتیجه به دلیل اهمیت بالای که در حفاظت از حریم خصوصی وجود دارد، پروژههایی که از این الگوریتمها استفاده میکنند میتوانند آینده خیلی خوبی داشته باشند. به نظر شما کدام یک از بلاکچینهایی که از این نوع الگوریتم استفاده میکنند، میتوانند در آینده شرایط بهتری داشته باشند؟