التزامات Pedersen
كيف تجمع مبالغ لا يراها أحد وتتحقق من صحة التوازن
يُخفى المبلغ v في النقطة C = y·G + v·H، حيث y "قناع" عشوائي. يمكن جمع الالتزامات: مجموع الالتزامات التزام بمجموع المبالغ. تتحقق الشبكة من أن Σ inputs − Σ outputs − fee·H التزام بالصفر دون أن تعرف أي مبلغ.
ما هو الالتزام
الالتزام (commitment) هو "ظرف مختوم بداخله عدد". وله خاصيتان:
- الإخفاء: لا يمكنك معرفة العدد من الظرف.
- الإلزام: لا يمكنك فتح الظرف على أنه عدد آخر.
التزام Pedersen على منحنى إهليلجي:
من دون القناع y لكان C = v·H، ولسهُل تخمين المبلغ بالقوة الغاشمة (فعدد المبالغ الممكنة ليس كبيرًا). القناع يجعل C غير قابل للتمييز عن نقطة عشوائية.
لماذا يهم المولّد الثاني H
يُحصل على H بتجزئة G إلى نقطة، لذا لا أحد يعرف k بحيث H = k·G. لو عرف أحدٌ k لاستطاع "إعادة فتح" الالتزام: y·G + v·H = (y + k(v − v'))·G + v'·H — وطباعة المال من العدم. وعدم معرفة k هو بالضبط ما يقوم عليه الإلزام.
التماثل الجبري: الجمع دون رؤية
مجموع ظرفين ظرف بداخله المجموع. لذا تستطيع الشبكة التحقق من حفظ القيمة:
يبقى إثبات أن الفرق فعلًا من الشكل z·G (وليس z·G + something·H). ويكفي التوقيع به كمفتاح عام: فالتوقيع لا ينجح إلا إذا كنت تعرف z ولم يكن هناك مكوّن H. الرسم علني، لذا فالتزامه ببساطة fee·H بلا قناع.
المخرجات الزائفة: كيف يعمل هذا مع الحلقات
ثمة عقبة: المدخل حلقة من 16 مخرجًا، ولا يمكننا القول أي التزام هو الحقيقي. حل RingCT هو التزام المخرج الزائف (pseudo-output) C̃:
- لكل مدخل يصنع المرسِل التزامًا جديدًا
C̃ = y'·G + v·Hبالمبلغ نفسه لكن بقناع جديد؛ - تُختار الأقنعة بحيث يكون
Σ C̃ = Σ C_out + fee·Hتمامًا (يُتحقق من التوازن باستخدام المخرجات الزائفة)؛ - في CLSAG، لكل عضو في الحلقة، يُثبت أن
C_i − C̃التزام بالصفر بالنسبة للعضو الحقيقي:C_π − C̃ = (y − y')·G.
وهكذا يُثبت التوقيع الحلقي في آن واحد ملكية المخرج وأن مبلغ المخرج الزائف يساوي مبلغ المدخل الحقيقي.
كيف يعرف المستلم المبلغ والقناع
يتشارك المرسِل والمستلم السر Hs(8rA ‖ i) (انظر العناوين لمرة واحدة). ومنه يشتقان:
amount_enc = v ⊕ Keccak( "amount" ‖ Hs(8rA ‖ i) )[0..8]
يوجد المبلغ المشفّر (8 بايتات) في المعاملة. يفك المستلم تشفير v، ويحسب y، ويتحقق من أن y·G + v·H يطابق C على سلسلة الكتل.
ما الذي يمنع المبلغ السالب؟
كل الحسابات تجري بترديد l. و"−1" هو l − 1، عدد هائل. يمكنك صنع مخرج بقيمة 1000 XMR ومخرج بقيمة "−999 XMR"، فيصح التوازن، وتظهر 999 XMR من العدم. والالتزامات لا ترى هذا. لهذا يأتي كل مخرج مع برهان نطاق.