SA+L: صلاحية الإنفاق وkey image
بروتوكول Schnorr المعمَّم الذي يحل محل "التوقيع" في FCMP++
SA+L (تفويض الإنفاق + قابلية الربط، Spend Authorization + Linkability) برهان صغير على Ed25519 لكل مدخل. وهو يُظهر: "أعرف x وy للمفتاح المُعاد تعشيته Õ، وkey image المنشور L يساوي x·I للمخرج نفسه". تقنيًا هو بروتوكول Schnorr معمَّم (GSP) — عدة معادلات Schnorr مربوطة ببعضها بأسرار مشتركة.
Schnorr المعمَّم في دقيقة
يُثبت Schnorr العادي معرفة x واحد في معادلة واحدة P = x·G. أما النسخة المعمَّمة فتثبت معرفة متجه من الأسرار (w₁, …, wₖ) يحقق عدة معادلات خطية على النقاط:
البروتوكول هو نفسه كما في حالة المفتاح الواحد:
- اختر
α_kعشوائية وانشرA_j = Σ α_k·X_{j,k}لكل معادلة؛ - التحدي
c = Hs(everything published)؛ - الاستجابات
s_k = α_k + c·w_k؛ - التحقق:
Σ s_k·X_{j,k} = A_j + c·Y_jلكلj.
التفصيلة الأساسية: تُستخدم الاستجابة نفسها s_k في كل معادلة يظهر فيها w_k. لذا لا يعلم المتحقق فقط أن المُثبِت "يعرف بعض الأسرار"، بل إنه "يعرف الأسرار نفسها لكل المعادلات". وهكذا تُربط صلاحية الإنفاق بـ key image.
أي معادلات يثبتها SA+L
العلنية: Õ, Ĩ, R, L والمولّدات G, T, U, V. وأسرار المُنفِق: x, y (مفتاح المخرج) وr_o, r_i, r_r_i ("طلاء" إعادة التعشية). بتبسيط، يثبت SA+L النظام التالي:
R = r_i·V + r_r_i·T
L = x·Ĩ − (x·r_i)·U الأخيرة هي L = x·(Ĩ − r_i·U) = x·I؛ ويُدخَل حاصل الضرب x·r_i كسر منفصل، والارتباط بـ R يمنع تزييفه
تختلف المعادلات الدقيقة في المواصفات قليلًا (فهي تعالج بعناية أي حواصل ضرب للأسرار لازمة وكيف تُتجنب التسريبات)، لكن الفكرة هي هذه بالضبط: برهان واحد يكون فيه x هو ما "يفتح" Õ وما "ينتج" L معًا.
لماذا ليس مجرد توقيع
في RingCT كان CLSAG يؤدي ثلاث مهام دفعة واحدة: إخفاء المدخل في حلقة، وإثبات صلاحية الإنفاق، وربط key image. في FCMP++ يتولى برهان العضوية المهمة الأولى. وتبقى مهمتان — تُحلّان ببروتوكول أبسط بكثير. وهذا يمنح:
- حجمًا صغيرًا — بضع نقاط وأعداد قياسية لكل مدخل؛
- فصل الأدوار — الجهاز الذي يحمل المفتاح (محفظة أجهزة) يمكنه حساب SA+L، بينما يبني حاسوب لا يملك المفتاح برهان العضوية الثقيل؛
- السرية المستقبلية (forward secrecy) — بفضل
y·Tفي المفتاح (انظر النظرة العامة)؛ - تمهيدًا للتوقيع المتعدد — البنية الخطية لـ GSP تنقسم بسلاسة بين عدة موقّعين (مخططات شبيهة بـ FROST).
ما الذي يُوقَّع
يتضمن التحدي c تجزئة المعاملة كاملة (البادئة، المخرجات، الالتزامات)، كما في CLSAG. لذا يعمل SA+L أيضًا كتوقيع: غيّر بايتًا واحدًا من المعاملة بعد التوقيع ولن يعود البرهان صالحًا.
التعريفات الرسمية موجودة في ورقة Luke Parker عن FCMP++ وفي التنفيذ بلغة Rust (مشروع monero-oxide). خضع البروتوكول والتنفيذ لتدقيقات خارجية؛ وروابط التقارير مجمّعة في نقاشات Monero Research Lab على GitHub.