تقني › كم؟

التزامات Pedersen

كيف تجمع مبالغ لا يراها أحد وتتحقق من صحة التوازن

باختصار

يُخفى المبلغ v في النقطة C = y·G + v·H، حيث y "قناع" عشوائي. يمكن جمع الالتزامات: مجموع الالتزامات التزام بمجموع المبالغ. تتحقق الشبكة من أن Σ inputs − Σ outputs − fee·H التزام بالصفر دون أن تعرف أي مبلغ.

ما هو الالتزام

الالتزام (commitment) هو "ظرف مختوم بداخله عدد". وله خاصيتان:

  • الإخفاء: لا يمكنك معرفة العدد من الظرف.
  • الإلزام: لا يمكنك فتح الظرف على أنه عدد آخر.

التزام Pedersen على منحنى إهليلجي:

C = y·G + v·H v — المبلغ بالوحدات الذرية (1 XMR = 10¹² وحدة)، y — عامل تعمية عشوائي، G وH — نقطتان مستقلتان

من دون القناع 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 هو بالضبط ما يقوم عليه الإلزام.

التماثل الجبري: الجمع دون رؤية

C₁ + C₂ = (y₁ + y₂)·G + (v₁ + v₂)·H

مجموع ظرفين ظرف بداخله المجموع. لذا تستطيع الشبكة التحقق من حفظ القيمة:

C_in (5 XMR)المبلغ مخفي = C_out1 (3 XMR)إلى المستلم + C_out2 (1.99)الباقي + 0.01·Hالرسم C_in − C_out1 − C_out2 − fee·H = (y_in − y₁ − y₂)·G + 0·H ← التزام بالصفر: نقطة من الشكل z·G

يبقى إثبات أن الفرق فعلًا من الشكل z·G (وليس z·G + something·H). ويكفي التوقيع به كمفتاح عام: فالتوقيع لا ينجح إلا إذا كنت تعرف z ولم يكن هناك مكوّن H. الرسم علني، لذا فالتزامه ببساطة fee·H بلا قناع.

المخرجات الزائفة: كيف يعمل هذا مع الحلقات

ثمة عقبة: المدخل حلقة من 16 مخرجًا، ولا يمكننا القول أي التزام هو الحقيقي. حل RingCT هو التزام المخرج الزائف (pseudo-output) C̃:

  1. لكل مدخل يصنع المرسِل التزامًا جديدًا C̃ = y'·G + v·H بالمبلغ نفسه لكن بقناع جديد؛
  2. تُختار الأقنعة بحيث يكون Σ C̃ = Σ C_out + fee·H تمامًا (يُتحقق من التوازن باستخدام المخرجات الزائفة)؛
  3. في CLSAG، لكل عضو في الحلقة، يُثبت أن C_i − C̃ التزام بالصفر بالنسبة للعضو الحقيقي: C_π − C̃ = (y − y')·G.

وهكذا يُثبت التوقيع الحلقي في آن واحد ملكية المخرج وأن مبلغ المخرج الزائف يساوي مبلغ المدخل الحقيقي.

كيف يعرف المستلم المبلغ والقناع

يتشارك المرسِل والمستلم السر Hs(8rA ‖ i) (انظر العناوين لمرة واحدة). ومنه يشتقان:

y = Hs( "commitment_mask" ‖ 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 من العدم. والالتزامات لا ترى هذا. لهذا يأتي كل مخرج مع برهان نطاق.