العناوين لمرة واحدة
العناوين الخفية: إرسال المال إلى عنوان دون كتابته على سلسلة الكتل
يختار المرسِل r عشوائيًا، وينشر R = r·G، ويرسل المال إلى المفتاح لمرة واحدة P = Hs(8·r·A ‖ i)·G + B. ويعثر عليه المستلم بحساب الشيء نفسه عبر a: Hs(8·a·R ‖ i)·G + B. وينفقه بالمفتاح الخاص x = Hs(8·a·R ‖ i) + b.
المهمة
نريد:
- ألا يظهر على سلسلة الكتل عنوان المستلم ولا أي شيء يتكرر عبر المدفوعات إلى الشخص نفسه؛
- أن يعثر المستلم على مخرجاته بنفسه، دون التواصل مع المرسِل؛
- ألا يستطيع إنفاق المخرج إلا المستلم.
الحل هو تبادل مفاتيح Diffie–Hellman مدمج في كل معاملة.
خطوة بخطوة
1. يختار المرسِل r عشوائيًا
r عشوائي جديد (المفتاح الخاص للمعاملة) لكل معاملة. وتُكتب نسخته العامة R = r·G (المفتاح العام للمعاملة) في حقل tx_extra الخاص بالمعاملة.
2. السر المشترك
يحسب المرسِل 8·r·A (حيث A هو مفتاح العرض العام من العنوان). ولاحقًا يحسب المستلم 8·a·R. إنها النقطة نفسها، لأن a·R = a·r·G = r·a·G = r·A. وفي شيفرة Monero تُسمّى اشتقاق المفتاح (key derivation).
العامل 8 (العامل المرافق) "ينظّف" النقطة من أي مكوّن ذي رتبة صغيرة: فحتى لو قدّم أحدهم R خبيثًا، تقع النتيجة في الزمرة الجزئية الصحيحة.
3. المفتاح لمرة واحدة
هذا هو العنوان لمرة واحدة (المفتاح العام للمخرج). يبدو كنقطة عشوائية: فمن دون a أو r لا يوجد ما يُقارَن به.
4. المستلم يمسح
لكل معاملة جديدة ولكل مخرج i تحسب المحفظة Hs(8·a·R ‖ i)·G + B وتقارنه بـ P. إذا تطابقا — فالمخرج لنا. ولا يحتاج هذا إلا إلى مفتاح العرض a والمفتاح العام B — لذا تستطيع محفظة العرض فقط العثور على المدفوعات الواردة.
5. المستلم ينفق
المفتاح الخاص للمخرج لمرة واحدة:
يتطلب هذا مفتاح الإنفاق b. يوقّع المفتاح x عملية الإنفاق، ومنه تُحسب key image.
المبلغ أيضًا مشفّر بالسر المشترك
يُشتق قناع للمبلغ من السر المشترك نفسه. يُخزَّن مبلغ المخرج (8 بايتات) على شكل amount ⊕ Keccak("amount" ‖ Hs(8rA ‖ i))[0..8]، وعامل التعمية للالتزام على شكل Hs("commitment_mask" ‖ Hs(8rA ‖ i)). يحسب المستلم الشيء نفسه ويفك تشفير المبلغ. المزيد في التزامات Pedersen.
نقاط الضعف
- المسح مكلف: عملية ضرب نقطة لكل مخرج في كل معاملة. عولج ذلك جزئيًا بـ view tags.
- هجوم Janus: المرسِل الذي يشك في أن عنوانين فرعيين يعودان لشخص واحد يمكنه بناء مخرج من أجزاء الاثنين ومعرفة ما إذا كان المستلم "سيلاحظ" الدفعة. لدى المحافظ حماية جزئية؛ وCarrot يسدّها تمامًا.
- المرسِل يعرف r ويستطيع أن يُثبت لطرف ثالث أنه دفع إلى عنوان معيّن (وهذا مفيد أحيانًا — "إثبات الدفع").