
السلسلة: Zcash from First Principles . المقال 5 . براهين المعرفة الصفرية الجمهور المستهدف: المبتدئون. نعتمد على كل مقال سابق (الحقول المنتهية، المنحنيات، الالتزامات، أشجار Merkle)، لكننا نستحضر كل فكرة حين نحتاجها. ما ستخرج به: فهم حدسي وصحيح لماهية برهان المعرفة الصفرية، والضمانات الثلاث التي يقدمها، وكيفية إثبات العبارات العامة، وما الذي يمنح Sapling وOrchard في Zcash قوتهما.
هذا هو المقال الذي كانت السلسلة كلها تتجه نحوه. فمنذ المقال 0 وما بعده، واصلنا القول إن الدفعة يتم التحقق من صحتها "خلف ستار"، ويُثبت أنها صحيحة من دون كشف أي شيء. برهان المعرفة الصفرية هو ذلك الستار. إنه الجزء الذي يحل أخيرًا المفارقة التي بدأنا بها: كيف يمكن للعامة التحقق من معاملة لا يُسمح لهم برؤيتها؟
تذكّر التناقض الكامن في صميم Zcash:
يبدو هذان الأمران متنافيين. فالتحقق يبدو وكأنه يتطلب النظر. أما الخصوصية فتـمنع النظر. وإذا لم تستطع التوفيق بينهما، فلن تتمكن من امتلاك نقود خاصة يثق بها الجميع.
إن برهان المعرفة الصفرية (ZKP) هو هذا التوفيق. فهو يتيح لـ المُثبِت أن يقنع المُتحقِّق بأن عبارةً ما صحيحة من دون الكشف عن أي شيء يتجاوز حقيقة أنها صحيحة. لا مبالغ. لا هويات. لا ملاحظة. فقط: "كل ما هنا يلتزم بالقواعد." دعنا نبني الحدس أولًا قبل أي آليات.
إثبات أنك تعرف كلمة مرور من دون أن تقولها. يمكن لموقع ويب أن يتحقق من أنك تعرف كلمة مرورك عبر مراقبتك وأنت تفتح شيئًا لا تفتحه إلا كلمة المرور، من دون أن يرى كلمة المرور نفسها أبدًا. أنت تثبت المعرفة من دون الإفصاح.
الصديق المصاب بعمى الألوان وكرتان. تمسك كرة حمراء وكرة خضراء تبدوان متطابقتين لصديقك المصاب بعمى الألوان. تريد أن تقنعه بأنهما بلونين مختلفين من دون أن تخبره أيهما أيٌّ منهما. يخفي الكرتين خلف ظهره، وقد يبدلهما أو لا، ثم يريك واحدة. فتقول له ما إذا كان قد بدلهما. إذا كانت الكرتان مختلفتين فعلًا، فأنت دائمًا على صواب. أما إذا كانتا متطابقتين، فستكون مجرد مخمّن، ولن تصيب إلا نصف المرات. بعد 20 جولة، يقنعه استمرارك في الإجابة الصحيحة بأنهما مختلفتان، ومع ذلك لا يعرف أبدًا أي كرة هي الحمراء. إنه مقتنع بحقيقة، من دون أن يتعلم أي شيء آخر. هذه هي المعرفة الصفرية في صورة مصغرة.
الكهف. كهفٌ على شكل حلقة له باب سحري في الخلف لا يُفتح إلا بكلمة سرية. أنت تدّعي أنك تعرف الكلمة. ولإثبات ذلك من دون كشفها: ينتظر متحقق خارج الكهف بينما تدخل أنت وتختار عشوائيًا الممر الأيسر أو الأيمن. ثم يصرخ المتحقق بالجهة التي يريدك أن تخرج منها. إذا كنت تعرف الكلمة حقًا، فيمكنك دائمًا الامتثال (إذ يمكنك فتح الباب لتبديل الجهة إذا لزم الأمر). أما إذا كنت تخادع، فلن يمكنك الخروج من الجهة الصحيحة إلا بالحظ، بنسبة 50/50 في كل جولة. كرر ذلك 20 مرة، وستصبح احتمالات نجاتك إن كنت مخادعًا أقل من واحد في المليون.
إن قصة الكهف هذه تُظهر بهدوء الضمانات الثلاث التي يجب أن يقدمها كل برهان معرفة صفرية.

| الضمان | في قصة الكهف | في Zcash |
|---|---|---|
| الاكتمال | إذا كنت تعرف الكلمة، فإنك تخرج دائمًا من الجهة الصحيحة | المعاملة الصحيحة تنتج دائمًا برهانًا مقبولًا |
| السلامة | يُكشف أمر المخادع باحتمال ساحق | لا يمكن لمعاملة احتيالية (تزوير مال، إنفاق مزدوج) أن تنتج برهانًا مقبولًا |
| انعدام المعرفة | لا يسمع المتحقق أبدًا الكلمة السرية | لا تتعلم الشبكة أبدًا المبالغ أو العناوين أو أي ملاحظة |
إذا فشل أي واحد من هذه الشروط، ينهار النظام: من دون اكتمال يُرفَض المستخدمون الصادقون؛ ومن دون سلامة يطبع المزوّرون المال؛ ومن دون انعدام المعرفة تتبخر الخصوصية.
يثبت الكهف حقيقةً لطيفة واحدة. لكن Zcash يحتاج إلى إثبات عبارة غنية: "أنا أعرف ملاحظة غير منفقة في الشجرة، وأنا مخوّل لإنفاقها، وقد حُسب مُبطِلها بشكل صحيح، ومدخلاتي تساوي مخرجاتي." كيف ننتقل من الكرات والكهوف إلى ذلك؟
الجسر هو فكرة تربط هذه السلسلة كلها معًا:
يمكن إعادة كتابة أي عبارة يمكنك التحقق منها بواسطة عملية حسابية على شكل دائرة حسابية: شبكة من عمليات الجمع والضرب على حقل منتهٍ (المقال 1).
فكّر في الدائرة على أنها قائمة من القيود الحسابية التي لا تتحقق كلها إلا إذا كانت العبارة صحيحة. والمدخلات الخاصة التي تجعل كل شيء متسقًا، أي ملاحظتك ومفتاحك ومسار Merkle، تُسمى الشاهد.

ولهذا السبب أمضينا المقال 1 في الحقول المنتهية والمقال 3 في دوال التجزئة الملائمة لـ ZK: فالدائرة تتحدث بلغة الحساب على الحقول، لذا يجب التعبير عن كل عملية داخل العبارة (بما في ذلك التجزئة والصعود في شجرة Merkle في المقال 4) بهذه الطريقة. وكلما كانت كلفة التعبير عن كل عملية أقل، كان البرهان أصغر وأسرع.
احتاج مثال الكهف إلى جولات كثيرة من الأخذ والرد. وهذا غير عملي بالنسبة إلى البلوكشين، حيث يجب نشر البرهان مرة واحدة ثم يتحقق منه الجميع إلى الأبد. ويعالج هذا الأمر تحسينان.
غير تفاعلي (فكرة Fiat-Shamir). بدلًا من مُتحقِّق مباشر يصرخ بتحديات عشوائية، يقوم المُبرهِن بتوليد "التحديات العشوائية" بنفسه عبر hashing البرهان الذي أنجزه حتى تلك اللحظة. وبما أن دالة التجزئة الجيدة غير قابلة للتنبؤ (المقال 3)، فلا يستطيع المُبرهِن تفصيل التحديات بما يخدم مصلحته. وهكذا ينهار الحوار المطوّل إلى برهان واحد مكتفٍ بذاته يمكن لأي شخص التحقق منه لاحقًا، من دون أي تفاعل.
موجز. أفضل الأنظمة تجعل البرهان صغيرًا جدًا وسريع التحقق، مهما كان حجم العبارة. وهذا هو الجزء المدهش حقًا.
برهان Groth16 (النظام الذي يستخدمه Sapling) حجمه يقارب 192 بايت ويجري التحقق منه خلال أجزاء من الثانية، سواء كانت العبارة التي يثبتها صغيرة أم هائلة. فبضع مئات من البايتات يمكن أن تشهد على عملية حسابية تتضمن عدة آلاف من القيود.
عند جمع هذين الأمرين تحصل على الاختصار الذي ستراه في كل مكان:
zk-SNARK = zero-knowledge Succinct Non-interactive ARgument of Knowledge. إثبات معرفة صفري (لا يكشف شيئًا)، موجز (صغير وسريع)، غير تفاعلي (ضربة واحدة)، وحجة معرفة (أي إن المُبرهِن يعرف فعلًا شاهدًا صالحًا).
لا يوجد غداء مجاني. كثير من أنظمة SNARK تحتاج إلى setup لمرة واحدة يُنتج المعلمات العامة للدائرة. وتولِّد عملية الإعداد عشوائية سرية كناتج جانبي، ويجب إتلاف ذلك السر. فإذا احتفظ به أي شخص، فسيكون قادرًا على تزوير البراهين، أي تزوير المال (مع أنه، وهذا مهم، لن يتمكن مع ذلك من كسر الخصوصية).
يُلقَّب هذا السر المتبقي باسم toxic waste. وللتخلص منه بأمان، أجرت Zcash مراسم متعددة الأطراف معقدة، ساهم فيها كثير من المشاركين المستقلين بعشوائية خاصة بهم؛ وما دام حتى مشارك واحد فقط قد أتلف حصته بصدق، يصبح استرجاع الـ toxic waste مستحيلًا.

الأنظمة الأحدث تزيل هذا المتطلب بالكامل، وهذا أحد أكبر الأسباب التي جعلت Zcash تطوّر نظام البراهين الخاص بها بمرور الوقت.
| التصميم | نظام البرهان | Trusted setup؟ | مبني على |
|---|---|---|---|
| Sprout (الأقدم) | zk-SNARK مبكر | نعم | المراسم الأصلية |
| Sapling | Groth16 | نعم (مراسم "Powers of Tau" متعددة الأطراف + مراسم Sapling) | BLS12-381 (المقال 2) |
| Orchard (الحالي) | Halo 2 | No trusted setup | Pallas / Vesta (المقال 2) |
إن المسار من Sprout إلى Sapling إلى Orchard هو إلى حد كبير قصة براهين أصبحت أصغر وأسرع، وتخلّصت من trusted setup. لا يحتاج Halo 2، المستخدم في Orchard، إلى أي مراسم على الإطلاق، وهو مصمم لدعم الاستدعاء الذاتي (براهين تتحقق من براهين أخرى)، ولهذا يستخدم Orchard cycle المنحنيات Pallas/Vesta من المقال 2: إذ جرى ضبط كل منحنى ليتحقق من براهين مكتوبة فوق الآخر.
وهذا يغلق أكبر حلقة من المقال 0. إن السحر "خلف الستار" هو zk-SNARK: فهو يثبت أن معاملتك تحقق دائرة حسابية تُشفِّر جميع القواعد، مع عدم كشف أي شيء سوى البت الوحيد "صالح".
إن براهين المعرفة الصفرية مجال عميق، وقد بقينا عمدًا عند مستوى الحدس. لم نعرّف الحدود الاحتمالية الدقيقة في soundness، ولا الشكل الدقيق للدائرة الحسابية (R1CS وPLONKish وما إلى ذلك)، ولا كيف تحوّل كثيرات الحدود والالتزامات الدائرة إلى برهان قصير، ولا البنية الداخلية الفعلية لـ Groth16 وHalo 2. مثال الكهف هو برهان تفاعلي؛ أما الأنظمة الإنتاجية فهي غير تفاعلية وأكثر تعقيدًا بكثير. ولا يغيّر أي من ذلك الجوهر: إثبات أن دائرة ما مُرضاة بواسطة شاهد سري، بالكامل، وبسلامة، ومن دون كشف أي شيء. أما الآليات نفسها فهي سلسلة كاملة تستحق شرحًا مستقلًا.
| المصطلح | المعنى المبسط |
|---|---|
| Zero-knowledge proof | إقناع شخص ما بأن عبارة صحيحة مع عدم كشف أي شيء آخر |
| Prover / Verifier | من يُنشئ البرهان / من يتحقق منه |
| Completeness | العبارات الصحيحة تُقبل دائمًا (من مُبرهِن صادق) |
| Soundness | العبارات الخاطئة تُرفض (ولا يستطيع الغشاشون الفوز إلا بالحظ) |
| Witness | المدخلات السرية التي تجعل العبارة صحيحة |
| Arithmetic circuit | عبارة أُعيدت صياغتها على شكل عمليات جمع وضرب فوق حقل منتهٍ |
| Non-interactive (Fiat-Shamir) | برهان من ضربة واحدة لا يحتاج إلى أخذ ورد مباشر |
| Succinct | البرهان صغير جدًا وسريع التحقق بغض النظر عن حجم العبارة |
| zk-SNARK | Zero-knowledge Succinct Non-interactive ARgument of Knowledge |
| Trusted setup / toxic waste | توليد لمرة واحدة للمعلمات يجب إتلاف سره المتبقي |
إذا كان البرهان لا يكشف شيئًا، فكيف يمكن أن يعني التحقق منه أي شيء؟ لأن الرياضيات مُرتَّبة بحيث إن الشاهد الحقيقي والصالح وحده هو من يستطيع إنتاج برهان يجتاز التحقق. واجتياز التحقق هو الدليل بحد ذاته، من دون الحاجة إلى أي إفصاح.
هل يمكن لشخص ما تزييف برهان؟ تجعل خاصية السلامة هذا غير عملي. والاستثناء الوحيد هو SNARK الذي تم الاحتفاظ فيه بـ toxic waste الخاصة بالإعداد الموثوق؛ ولهذا تحديدًا تكتسب المراسم الخاصة بتدميرها أهمية كبيرة.
هل يؤدي الإعداد الموثوق المعطوب إلى تسريب بياناتي الخاصة؟ لا. قد يتيح ذلك لمهاجم تزوير أموال جديدة، لكنه لا يكشف المبالغ أو العناوين أو الملاحظات. الخصوصية والسلامة ضمانتان منفصلتان.
لماذا غيّرت Zcash أنظمة البرهان بمرور الوقت؟ للحصول على براهين أصغر وأسرع، ومع Halo 2، لإزالة الإعداد الموثوق بالكامل وتمكين العودية.
في الكهف، لماذا من الضروري أن يختار المُتحقِّق جهة الخروج بعد أن يكون المُثبت قد دخل بالفعل، بدلًا من إعلانها مسبقًا؟ (الإجابة أدناه.)
إذا أعلن المُتحقِّق الجهة أولًا، فسيستطيع المخادع الذي لا يعرف الكلمة أن يدخل ببساطة من تلك الجهة منذ البداية ثم يخرج منها مجددًا، من دون أن يحتاج إلى الباب إطلاقًا. إن الاختيار بعد أن يلتزم المُثبت بممر معيّن يجبر المخادع على الاعتماد على الحظ (50/50 في كل جولة)، وهذا هو ما يجعل تكرار الجولات مقنعًا. وهذا الترتيب، "التزم أولًا، ثم تلقَّ التحدي"، هو بالضبط ما يحافظ عليه Fiat-Shamir من خلال اشتقاق التحدي من hash للبرهان الذي التزم به المُثبت مسبقًا.
المقالة 6 . البروتوكول المحمي، من البداية إلى النهاية: الخاتمة. نأخذ كل جزء، الملاحظات، والالتزامات، وشجرة التزام الملاحظات، وnullifiers، وتوازن القيمة، وبرهان المعرفة الصفرية، ونجمّع منها معاملة Zcash محمية كاملة، لنغلق كل حلقة فُتحت سابقًا في المقالة 0.
جزء من سلسلة Zcash from First Principles لصالح ZecHub. مرخّص تحت CC BY-SA 4.0.