Generalized Bulletproofs والقواسم
ما يقوم عليه برهان المسار في الشجرة — دون إعداد موثوق
برهان العضوية هو برهان على تحقق دارة حسابية: "أعرف مسارًا من ورقة إلى الجذر، ومدخلي يعيد تعشيته". تُثبَت الدارة باستخدام Generalized Bulletproofs (تعميم Bulletproofs على الالتزامات المتجهية)، وتُجعل العمليات على المنحنى داخل الدارة رخيصة بفضل القواسم (divisors) (طريقة Liam Eagen). وكل ذلك يقوم فقط على صعوبة اللوغاريتم المتقطع.
ما هي "الدارة الحسابية"
يمكن تفكيك أي حساب إلى خطوات أولية من نوع "اضرب عددين" و"اجمع بمعاملات" في حقل منتهٍ. ومجموعة هذه الخطوات هي دارة حسابية. ويُظهر برهان المعرفة الصفرية أنني "أعرف قيمًا لجميع أسلاك الدارة بحيث تتحقق جميع المعادلات" دون الكشف عن القيم.
في Bulletproofs الدارة بسيطة وثابتة: "هذه الأعداد الـ64 بتات، ومجموعها يساوي المبلغ". أما في FCMP++ فهي أعقد: في كل مستوى من الشجرة يجب التحقق من أن الابن المختار من بين أبناء العقدة، وأن العقدة محسوبة منهم بشكل صحيح.
Generalized Bulletproofs
تأخذ Bulletproofs العادية التزامات Pedersen منفصلة كمدخلات. أما Generalized Bulletproofs (Eagen وKamp وParker وآخرون) فتتيح إدخال التزامات متجهية في الدارة — نقطة واحدة تُثبّت أعدادًا كثيرة دفعة واحدة. وهذا بالضبط ما تحتاجه الشجرة: "تجزئة" العقدة هي التزام متجهي بإحداثيات أبنائها (انظر Curve Trees). تستقبل الدارة العقدة كمدخل ويمكنها الاستدلال على محتواها.
الخصائص نفسها كما في Bulletproofs:
- لا إعداد موثوق؛
- يكبر حجم البرهان لوغاريتميًا مع حجم الدارة؛
- التحقق خطي في حجم الدارة لكنه يقبل التجميع جيدًا — التحقق من براهين كثيرة معًا أرخص من التحقق منها واحدًا تلو الآخر.
المشكلة: الضرب القياسي داخل الدارة
تتطلب إعادة التعشية التحقق من شيء مثل Õ = O + r_o·T داخل الدارة. وضرب نقطة في عدد قياسي بطول 255 بتًا "مباشرةً" يعني مئات من عمليات مضاعفة النقاط وجمعها، كل منها عدة عمليات ضرب في الحقل. أي آلاف القيود لكل عملية، وسيكون البرهان هائل الحجم.
القواسم: التحقق بدلًا من الحساب
فكرة Liam Eagen ("Zero Knowledge Proofs of Elliptic Curve Inner Products from Principal Divisors and Weil Reciprocity"): للتأكد من أن مجموع النقاط P₁ … Pₙ يساوي الصفر، لا حاجة إلى جمعها. يكفي تقديم دالة كسرية f على المنحنى أصفارها بالضبط عند تلك النقاط (قاسمها) والتحقق من متطابقة جبرية واحدة عند نقطة عشوائية (تحدٍّ من المتحقق).
يُكتب الضرب r·T كمجموع Σ bᵢ·(2ⁱ·T) على بتات r، أي كمجموع نقاط — ويُتحقق منه بقاسم واحد. فينخفض عدد القيود بنحو رتبة عشرية كاملة.
دارتان — منحنيان
تتناوب مستويات الشجرة بين Selene وHelios. حساب كل مستوى طبيعي في حقل أحد المنحنيين، لذا يتكون برهان العضوية من برهاني Generalized Bulletproofs: أحدهما على Selene (مستويات Selene وفحص إعادة تعشية الورقة، التي إحداثياتها عناصر من حقل Ed25519)، والآخر على Helios. ويرتبطان عبر عقد مشتركة معاد تعشيتها.
الحجم والكلفة
يعتمد حجم البرهان على عمق الشجرة وعرض العقد. مع مئات الملايين من المخرجات وعقد بعرض عشرات الأبناء، يكون العمق بضعة مستويات. تقريبًا، يشغل مدخل FCMP++ واحد عدة كيلوبايتات، والتحقق أغلى من CLSAG برتبة عشرية؛ ويواصل المطورون تحسين الأمرين (التحقق الدفعي، البراهين متعددة المدخلات). الأرقام الدقيقة في تقارير القياس الخاصة بالإصدار.
تعطي SNARKs المضغوطة (Groth16، PLONK مع KZG) براهين من بضع مئات من البايتات، لكنها تحتاج إلى إعداد موثوق أو إلى الاقترانات (pairings) — أي افتراضات تشفيرية جديدة. يبقى Monero عمدًا ضمن "اللوغاريتم المتقطع فقط" ودون إعداد — على حساب براهين أكبر.