کیانوش درتاج
کیانوش درتاج
خواندن ۶ دقیقه·۲ سال پیش

دانش اثبات صفر (ZKP) چیست ؟

سیستم رمزنگاری قدرتمندی است که بدون اینکه جواب سوال ؛ راز ؛ یا مسعله ای را فاش کنید ؛ اثبات کنید که جواب آنرا میدانید . برای مثال در نطر بگیرید شما در حال رانندگی هستید و پلیس شما را متوقف میکند و برای اینکه اثبات کنید که شما گواهینامه دارید و همچین شما صاحب ماشین هستید باید اطلاعات هویتی خود یعنی گواهینامه و سند ماشین را به افسر پلیس ارایه دهید که اثبات کنید ادعایی که دارید درست است .

حالا شما شرایطی را در نظر بگیرید که شما بدون فاش کردن و نشان دادن اطلاعات هویتی خود به افسر پلیس اثبات کنید که شما صاحب ماشین هستید .


سوال پیش میاد که آیا امکان پذیر است ؟

جواب : بله امکان پذیر است .

سوال چطور ؟

جواب : ZKP

برای این کار سه مفهوم مهم وجود دارد که یک پروتکل دانش صفر باید انجام دهد:


1 - ا ( Completeness ) :‌ اگر چیزی که شما سعی می کنید ثابت کنید درست است، پس پروتکل همیشه باید 'True' را برگرداند.


2 - ا ( soundness ) : اگر چیزی که شما سعی می کنید ثابت کنید نادرست است، پس باید غیرممکن باشد که کسی پروتکل را فریب دهد تا 'درست' را برگرداند.


3 - ا ( Zero-knowledge ) : دانش صفر به این معنی است که وقتی کسی ادعایی را ثابت می کند درست است یا نه ، چیزی در مورد خود ادعا نمی داند. آنها فقط یاد می گیرند که آیا ادعا درست است یا نادرست است.


ابتدا باید چند مفهوم از ZKP را یاد بکیریم :


1 - اثبات کننده ( Prover ) :‌ اثبات کننده موجودی است که می خواهد صحت یک ادعا را به تأیید کننده ثابت کند بدون فاش کردن اطلاعاتی در مورد ادعا


2 - تایید کننده ( Verifier ) : تأیید کننده نهادی است که می خواهد صحت ادعای را بدون کسب اطلاعات اضافی از Prover ادعا را تأیید کند. تأیید کننده می خواهد متقاعد شود که اثبات کننده ادعای که دارد صحیح است بدون اینکه نیازی باشد بداند آن ادعا چیست .


3 - ادعا ( Statement ) : بیان ادعایی است که اثبات کننده می خواهد آن را به تأیید کننده ثابت کند. این می تواند هر چیزی باشد که اثبات کننده بخواهد در حین اثبات اعتبار آن را مخفی نگه دارد. به عنوان مثال، این ادعا می تواند "من رمز عبور این حساب را می دانم" یا "من بالای 18 سال دارم" باشد.


سه مفهوم Basic در ZKP وجود دارد :


1 - شاهد (‌ witness ) : وقتی کسی می خواهد ثابت کند که یک راز را می داند بدون اینکه فاش کند چه چیزی است، سوالی را انتخاب می کند که تنها کسی که راز را می داند قادر به پاسخ دادن به آن راز خواهد بود. این راز را «witness» می نامند. آنها به این سوال پاسخ می دهند و پاسخ را برای کسی می فرستند که بررسی خواهد کرد که آیا حقیقت را می گویند یا نه.


2 - چالش ( Challenge )‌ : Verifier یک سوال متفاوت از مجموعه سوالات ممکن را انتخاب می کند و از Prover می خواهد که به آن پاسخ دهد.


3 - پاسخ (‌ Reponse )‌ : Prover چالش را می پذیرد، پاسخ را محاسبه می کند و آن را دوباره به Verifier می فرستد. اگر Prover حقیقت را بگوید و واقعا اطلاعات مخفی را بشناسد، قادر خواهند بود درست پاسخ دهند.

انواع zero-knowledge proofs :

ا ZK-SNARK مخفف Zero-Knowledge Succinct Non-Interactive Argument of Knowledge است. پروتکل ZK-SNARK دارای ویژگی های زیر است:


ا Zero-Knowledge :‌ بررسی درست یا نا درست بودن ادعای اثبات کننده بدون دانستن اطلاعتی اضافی درباره ادعای اثبات کننده .

ا Succinct :‌ فایل proof بسیار کوچک است و در نتیجه verify سریعتر انجام میشود .

ا Non-interactive : به این معنی است که prover و verifier فقط یک بار با هم اطلاعات رد و بدل میکنن

ا Argument : فایل اثبات بسیار قابل اعتماد و غیر قابل تقلب است .

ا Knowledge : اثبات تنها در صورتی می تواند ایجاد شود که prover به اطلاعات مخفی دسترسی داشته باشد.


به زبان ساده تر، ZK-SNARKs به یک فرد اجازه می دهد تا ثابت کند که قطعه ای از اطلاعات مانند رمز عبور را می داند ؛ بدون اینکه رمز عبور را آشکار کند. این امر از طریق یک فرایند پیچیده ریاضی که شامل ایجاد مدرکی مبنی بر درست بودن اطلاعات است، به دست می آورد که می تواند توسط دیگران بدون نیاز به تعامل تأیید شود.

ا ZK-SNARKs به ویژه برای حفظ حریم خصوصی در سیستم های غیرمتمرکز مانند شبکه های زنجیره بلوکی مفید هستند، جایی که مهم است که بتوانیم صحت داده ها را بدون آشکار کردن اطلاعات حساس تأیید کنیم. آنها در چندین پروژه blockchain، از جمله Zcash و Ethereum، برای ارائه حریم خصوصی افزایش یافته و ویژگی های امنیتی استفاده می شود.


ا ZK-STARK مخفف Zero-Knowledge Scalable Transparent Argument of Knowledge است. این یک سیستم اثبات رمزنگاری است که به یک طرف (اثبات کننده) اجازه می دهد تا به طرف دیگر (تأیید کننده) ثابت کند که راه حلی برای یک مشکل معین می داند، بدون اینکه هیچ اطلاعاتی در مورد خود راه حل نشان دهد. این سیستم به گونه‌ای طراحی شده است که شفاف باشد، به این معنی که هر کسی می‌تواند بدون نیاز به اعتماد به شخصی که اثبات را ارائه کرده است، مدرک را بررسی کند. این برای شرایطی که ممکن است بین طرفین بی اعتمادی وجود داشته باشد، مهم است.


چه تفاوتی بین zk-snarks و zk-starks وجود دارد ؟

ا zk-SNARK ها به یک راه اندازی قابل اعتماد نیاز دارند، به این معنی که قبل از ایجاد و تأیید مدارک، مجموعه ای از پارامترها باید توسط یک شخص مورد اعتماد ایجاد شود. این خطر دستکاری مخرب یا نشت پارامترها را ایجاد می کند که می تواند امنیت و حریم خصوصی سیستم را به خطر بیندازد. zk-STARK ها نیازی به تنظیم قابل اعتماد ندارند، که آنها را شفاف تر و ایمن تر می کند

ا ZK-SNARK ها بایت های اثبات کوچکتری تولید می کنند که فضای کمتری را در بلاک چین اشغال می کند و به Gas کمتری برای اجرا نیاز دارد. با این حال، تولید این اثبات ها به قدرت محاسباتی بیشتری نیاز دارد و زمان بیشتری نسبت به تولید اثبات های ZK-STARKs دارد.
از سوی دیگر، ZK-STARKها، اثبات‌هایی با اندازه بایت بزرگ‌تر ایجاد می‌کنند که فضای بیشتری را در بلاک چین اشغال می‌کنند و به Gas بیشتری برای اجرا نیاز دارند. با این حال، آنها تقاضای محاسباتی کمتری دارند، به این معنی که می توانند مدارک را سریعتر از ZK-SNARK ها تولید کنند.

ا zk-SNARK ها بر elliptic curve cryptography تکیه می کنند، که نوعی رمزنگاری با کلید عمومی است که از mathematical curves برای تولید کلیدها و امضاها استفاده می کند. این امر آنها را در برابر حملات رایانه‌های کوانتومی آسیب‌پذیر می‌کند، که به طور بالقوه می‌تواند امنیت elliptic curve cryptography را از بین ببرد. zk-STARK ها به elliptic curve cryptography متکی نیستند، بلکه از رمزنگاری مبتنی بر هش استفاده می کنند که در برابر حملات کوانتومی مقاوم تر است.

ا zk-SNARK ها به دلیل اندازه بایت کوچکتر و الگوریتم تأیید ساده تر، می توانند اثبات ها را سریعتر از zk-STARK ها تأیید کنند. با این حال، zk-STARK ها می توانند به دلیل تقاضای محاسباتی کمتر و الگوریتم تولید موازی شونده، سریعتر از zk-SNARK ها اثبات تولید کنند.


برای اطلاعات بیشار میتونید عضو کانال تلگرام من بشید . https://t.me/blockchain_information_persian




اثباتحریم خصوصیرمز عبوربلاک چین
Rust | Substrate | Polkadot | Solidity Developer
شاید از این پست‌ها خوشتان بیاید