** TL ؛ DR **
المشكلات التي يجب إثباتها - الدوائر الحسابية - R1CS - كثيرات الحدود
نظرًا لخصائص كثيرات الحدود ، يتم تقصير وقت التحقق بشكل فعال ، ويتم تحقيق البساطة.
لوضعها ببساطة ، في عملية اشتقاق كثير الحدود ، يتم اختيار رقمين عشوائيين آخرين ، بحيث يمكن لكثير الحدود المشتق أن يمنع المدقق من الحصول على معاملات كثير الحدود الأصلي ، أي المدخلات السرية للمثقف ، وذلك لتحقيق ZK.
قبل أن يبدأ الإثبات ، يتم تقديم طرف ثالث ، أي إعداد موثوق به ، يقوم بتعيين المهمة الأصلية للمدقق لتحديد أرقام عشوائية للإعداد الموثوق به ، وذلك لإدراك عدم التفاعل بين المدقق والمثقف.
جذبت تقنية ZK الكثير من الاهتمام في مجال Web3 في العامين الماضيين. بدءًا من Rollup ، تحاول المزيد والمزيد من المشاريع على مسارات مختلفة استخدام تقنية ZK. من بينها ، SNARK و STARK هما المصطلحان الأكثر شيوعًا. من أجل فهم أفضل لتطبيق تقنية ZK في مرحلة لاحقة ، ** ستعمل هذه المقالة على تبسيط منطق إثبات SNARK من منظور غير تقني ، ثم استخدام * * ** Scroll’s zk Rollup ** ** تستخدم كمثال لتوضيح تشغيل نظام zk proof. **
الغرض من المقال هو شرح المنطق الأساسي الذي يسهل قراءته ، وسيحاول تجنب استخدام المصطلحات ، ولن يدخل في التفاصيل مثل التحولات الرياضية ، أرجو أن يغفر لي أي سهو.
في يناير 2012 ، شارك Alessandro Chiesa ، الأستاذ في جامعة كاليفورنيا ، بيركلي ، في تأليف ورقة بحثية عن SNARK واقترح مصطلح zk-SNARK.
zk-SNARK ، الاسم الكامل حجة المعرفة غير التفاعلية المختصرة الصفرية ، هو نظام إثبات باستخدام تقنية ZK. ** تجدر الإشارة إلى أن SNARK هو اسم فئة المخططات ، وهناك العديد من طرق التجميع المختلفة التي يمكنها تنفيذ SNARK. **
ما يحتاج zk-SNARK إلى حله هو “مشكلة التحقق من الحساب” ، أي ما إذا كان المدقق يمكنه التحقق بكفاءة من نتائج الحساب دون معرفة خصوصية المُثبِّت.
سيستخدم ما يلي عملية البناء المبسطة لـ zk-SNARK لتوضيح كيف يجمع النظام بين المعرفة الصفرية لتحقيق التحقق الفعال. **
** بناء Zk-SNARK **
** حول المشكلة ليتم إثباتها إلى كثير الحدود **
لتوضيح الأمر ببساطة ، فإن فكرة SNARK هي تحويل إثبات ما إذا كانت العبارة صحيحة أم لا إلى دليل على ما إذا كانت المساواة متعددة الحدود صحيحة أم لا.
عملية التحويل بأكملها: مشاكل يجب التحقق منها ➡ دائرة حسابية R1CS ➡ متعدد الحدود ➡ التحويل بين كثيرات الحدود
** السؤال المراد التحقق منه➡ دائرة حسابية **
لإثبات ما إذا كان السؤال صحيحًا من خلال الحساب ، يجب أولاً تحويل السؤال المراد إثباته إلى مشكلة حسابية ، ويمكن وصف أي عملية حسابية بأنها دائرة حسابية.
تتكون الدوائر الحسابية عادة من الثوابت و “بوابات الإضافة” و “بوابات الضرب” ، ومن خلال تراكب البوابات يمكننا بناء كثيرات حدود معقدة.
كثير الحدود التي أنشأتها الدائرة الحسابية في الشكل أعلاه هي: (Inp1 + Inp2) \ * (- 1) = الإخراج
المشكلة في الواقع معقدة للغاية لتتحول إلى دائرة حسابية ، يمكننا ببساطة فهمها على النحو التالي: إدخال بعض المحتوى ، يتم تحويل المحتوى بواسطة الدائرة ، وأخيراً إخراج نتيجة. الآن:
بناءً على مفهوم الدوائر الحسابية ، نقوم ببناء دائرة حسابية لتوليد البراهين ، وهي:
تحتوي الدائرة على مجموعتين من المدخلات ، المدخلات العامة x والمدخلات السرية w. تعني المدخلات العامة x أن المحتوى هو قيمة ثابتة للمشكلة المراد إثباتها ، وهو أمر معروف لكل من المدقق والمُثبِت ، ويعني الإدخال السري w أن المحتوى معروف فقط للمثقف.
الدائرة الحسابية التي أنشأناها هي C (x ، w) = 0 ، أي المدخلات x و w من خلال الدائرة ، والنتيجة النهائية هي 0. عندما يعلم المُثبِت والمحقق أن ناتج الدائرة يساوي 0 وأن المُدخل العام هو x ، يحتاج المُثبِّت إلى إثبات أنه يعرف المُدخلات السرية w.
** الدائرة الحسابية ➡R1CS **
نحتاج أخيرًا إلى كثير الحدود ، لكن الدائرة الحسابية لا يمكن تحويلها مباشرة إلى كثير حدود ، وهناك حاجة إلى R1CS كوسيط بين الاثنين ، لذلك يتم تحويل الدائرة الحسابية إلى R1CS أولاً.
R1CS ، الاسم الكامل قيود الرتبة 1 (نظام القيد من الدرجة الأولى) ، هي لغة لوصف الدوائر ، والتي هي أساسًا معادلة متجه المصفوفة. على وجه التحديد ، R1CS عبارة عن سلسلة من ثلاثة نواقل (أ ، ب ، ج) ، وحل R1CS هو متجه s ، حيث يجب أن تفي s بالمعادلة:
فيما بينها ، يمثل عملية المنتج الداخلي.
نحتاج فقط إلى معرفة أن دور ** R1CS هو تحديد وصف كل بوابة في الدائرة الحسابية ، بحيث تفي المتجهات بين كل بوابة بالعلاقة المذكورة أعلاه. **
** R1CS➡ متعدد الحدود **
بعد الحصول على وسيط R1CS ، يمكننا تحويله إلى مكافئ متعدد الحدود.
يمكن إجراء التحويلات المتكافئة بين المصفوفات ومتعددة الحدود كما هو موضح في الشكل التالي:
متعدد الحدود
تحويل إلى مصفوفة
وفقًا لطبيعة التحويل المكافئ أعلاه ، بالنسبة للمصفوفة التي ترضي R1CS ، يمكننا استخدام طريقة الاستيفاء لاغرانج لاستعادة كل معامل من كثير الحدود. وبناءً على هذه العلاقة ، يمكننا اشتقاق مصفوفة R1CS كعلاقة متعددة الحدود ، وهي:
** ملاحظة: تمثل A ، B ، C كثير الحدود على التوالي **
يتوافق كثير الحدود مع قيد مصفوفة R1CS يتوافق مع المشكلة التي نريد إثباتها. ومن خلال التحويل أعلاه ، يمكننا أن نعرف أنه إذا كانت كثيرات الحدود تفي بالعلاقة أعلاه ، فهذا يعني أن مصفوفة R1CS الخاصة بنا صحيحة ، مما يشير إلى أن المثل في الدائرة الحسابية ، كما أن الإدخال السري لـ صحيح.
حتى هذه النقطة ، تم تبسيط مشكلتنا إلى: يقوم المدقق باختيار رقم x عشوائيًا ، ويطلب من المصدق إثبات أن A (x) \ * B (x) = C (x) صحيح. إذا كان هذا صحيحًا ، فهو يعني أن الإدخال السري الخاص بالمصدق صحيح.
** التحويل بين كثيرات الحدود **
في الدوائر الحسابية المعقدة ، توجد عشرات الآلاف من البوابات ، وعلينا التحقق مما إذا كانت كل بوابة تفي بقيد R1CS. بمعنى آخر ، نحتاج إلى التحقق من المساواة بين A (x) \ * B (x) = C (x) عدة مرات ، لكن كفاءة التحقق المنفصل واحدًا تلو الآخر منخفضة جدًا. كيف يمكننا التحقق من صحة جميع قيود البوابة في وقت واحد؟ الجنس؟
لتسهيل الفهم ، نقدم P (x) ، دعنا P (x) = A (x) \ * B (x) - C (x)
نحن نعلم أن أي كثير حدود يمكن أن تتحلل إلى كثيرات حدود خطية طالما أنها تحتوي على حل. لذلك قمنا بتقسيم P (x) إلى F (x) و H (x) ، وهي:
ثم F (x) عامة ، مما يعني أن هناك H (x) = P (x) / F (x) ، وبالتالي فإن كثير الحدود الذي نريد التحقق منه يتحول أخيرًا إلى:
A (x) \ * B (x) - C (x): يحتوي على معاملات كثير الحدود ، المعروفة فقط للمثقف ، أي المدخلات السرية.
F (x): كثير حدود عام معروف لكل من المدقق والمثقف ، أي المدخلات العامة.
ح (خ): المُثبِت يعرفها من خلال الحساب ، لكن المدقق غير معروف.
** المشكلة الأخيرة التي يجب إثباتها هي: المعادلة متعددة الحدود A (x) \ * B (x) - C (x) = F (x) \ * H (x) ، صحيحة على كل x. **
الآن من الضروري فقط التحقق من كثير الحدود مرة واحدة للتحقق من أن جميع القيود تفي بعلاقات المصفوفة.
** لقد أكملنا هنا تحويل المشكلة ليتم إثباتها إلى كثير حدود لا تحتاج إلا إلى التحقق منها مرة واحدة ، مع إدراك بساطة النظام. **
لكن بساطة هذا التطبيق هو تقصير وقت التحقق من المدقق ، فماذا عن حجم الإثبات؟
** بكل بساطة ، في بروتوكول الإثبات ، يتم استخدام هيكل شجرة Merkle ، مما يقلل بشكل فعال من حجم الإثبات. **
بعد اكتمال عملية التحويل بأكملها ، ستظهر مشكلتان بشكل طبيعي:
لأن كثيرات الحدود تتيح بساطة الإثبات. تكمن مشكلة برهان المعرفة الصفرية في التحقق من أن الحسابات تلبي قيودًا متعددة ، ويمكن للعديد من الحدود التحقق من قيود متعددة عند نقطة واحدة. بمعنى آخر ، يجب على المدقق التحقق من n مرة لتأكيد المشكلة ، ولكنه يحتاج الآن فقط إلى التحقق مرة واحدة لتأكيد صحة الدليل باحتمالية عالية.
يتم تحديد ذلك من خلال خصائص كثيرات الحدود ، أي أن نتيجة حساب كثير الحدود في أي نقطة يمكن اعتبارها تمثيلاً لهويتها الفريدة. بالنسبة لاثنين من كثيرات الحدود ، سوف يتقاطعان فقط عند عدد محدود من النقاط.
بالنسبة إلى كثيرات الحدود أعلاه من الدرجة d: A (x) \ * B (x) - C (x) و F (x) \ * H (x) ، إذا لم تكن متساوية ، فستكون فقط نقطة d على الأكثر تقاطع ، أي أن الحلول عند نقاط d هي نفسها.
بعد إتمام التحويل متعدد الحدود ، سندخل مرحلة إثبات كثير الحدود.
** برهن على أن كثير الحدود يحمل **
من أجل التوضيح ، نستخدم كثير الحدود P (x) = F (x) \ * H (x).
الآن ، المشكلة التي يريد المُثقف إثباتها هي: على كل x ، P (x) = F (x) \ * H (x).
تكون عملية التحقق من كثير الحدود أعلاه بواسطة المُثبِّت والمدقق كما يلي:
لكن إذا فكرنا جيدًا ، سنجد أن هناك بعض المشكلات في العملية المذكورة أعلاه:
لحل المشكلات المذكورة أعلاه ، نقوم بإجراء التحسينات التالية:
بعد التحسين وجدنا أن نظام الإثبات لا يزال يتطلب التفاعل بين المدقق والمثب كيف يمكننا تحقيق عدم التفاعل؟
** تنفيذ غير تفاعلي **
** لتحقيق عدم التفاعل ، تقدم SNARK إعدادات موثوقة (إعداد). **
بعبارة أخرى ، قبل بدء الإثبات ، يتم تسليم حق المدقق في اختيار نقاط التحدي العشوائية إلى طرف ثالث موثوق به. بعد أن يختار الطرف الثالث المعلمة العشوائية λ ، فإنه يضع λ المشفر في دائرة R1CS. في هذا الطريقة ، يتم إنشاء CRS (سلسلة مرجعية عامة ، سلسلة مرجعية عامة). يمكن للمدقق الحصول على Sv الخاص به من CRS ، ويمكن للمثقف الحصول على Sp الخاص به من CRS.
وتجدر الإشارة إلى أن يجب تدميره بعد إنشاء Sv و Sp. إذا تم تسريب λ ، فيمكن استخدامه لتزوير المعاملات من خلال التحقق الخاطئ.
** سير عمل zk-SNARK **
بعد فهم عملية بناء SNARK ، استنادًا إلى الدائرة الحسابية التي أنشأناها والتي يمكن أن تولد البراهين ، فإن عملية إثبات zk-SNARK هي كما يلي:
من خلال الدائرة C والمعلمة العشوائية λ ، يتم إنشاء المعلمات العشوائية Sv و Sp المستخدمة بواسطة المُثبِت والمدقق اللاحقين.
يحسب المُثبُت الإثبات Π من خلال المعلمة العشوائية Sp والمدخلات العامة x والمدخلات السرية w.
يتحقق المدقق مما إذا كانت C (x، w) = 0 موجودة من خلال المعلمة العشوائية Sv والمدخلات العامة x والإثبات Π. في نفس الوقت ، تحقق مما إذا كان الدليل محسوبًا بالدائرة C أم لا.
في هذه المرحلة ، أكملنا شرح zk-SNARK بالكامل. دعنا نلقي نظرة على حالة التطبيق الفعلية.
** الحالة: خذ zk Rollup في Scroll كمثال **
دور نظام الإثبات هو السماح للمُثبِّت بإقناع المحقق بأن يؤمن بشيء واحد ؛
بالنسبة لنظام إثبات ZK ، من الضروري أن يعتقد المدقق أن إثبات المعرفة الصفرية (إثبات المعرفة الصفرية) المحسوب بواسطة خوارزمية zk صحيح.
نحن نأخذ Scroll’s zk Rollup كمثال لتوضيح تشغيل نظام zk proof.
يشير التراكمي إلى الحساب خارج السلسلة والتحقق على السلسلة. بالنسبة إلى zk Rollup ، بعد تنفيذ المعاملة خارج السلسلة ، يحتاج المُثبِت إلى إنشاء شهادة zk لجذر الحالة الجديد الذي تم إنشاؤه بعد تنفيذ المعاملة ، ثم تمرير الشهادة إلى عقد L1 Rollup للتحقق على السلسلة.
وتجدر الإشارة إلى أن هناك نوعين من الكتل في zk Rollup:
فيما يلي سير عمل Scroll’s zk Rollup:
كما يتضح من العملية المذكورة أعلاه ، فإن Roller هو المُثبِّت في النظام ، وعقد التجميع هو المُحقِّق. تقوم Roller بإنشاء دليل zk للمعاملات المنفذة خارج السلسلة ؛ يتحقق عقد التجميع من الإثبات ، وإذا نجح التحقق ، سيعتمد عقد التجميع مباشرة جذر الحالة المقدم باعتباره جذر الحالة الجديد.