تقني › FCMP++

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ₖ) يحقق عدة معادلات خطية على النقاط:

Y_j = Σ_k w_k · X_{j,k}    for each equation j

البروتوكول هو نفسه كما في حالة المفتاح الواحد:

  1. اختر α_k عشوائية وانشر A_j = Σ α_k·X_{j,k} لكل معادلة؛
  2. التحدي c = Hs(everything published)؛
  3. الاستجابات s_k = α_k + c·w_k؛
  4. التحقق: Σ 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 النظام التالي:

Õ = x·G + (y + r_o)·T
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.