تقني › المفاتيح والعناوين

العناوين الفرعية

عدد غير محدود من العناوين غير القابلة للربط من زوج مفاتيح واحد

باختصار

العنوان الفرعي ذو الفهرس (i, j) هو زوج النقاط D = B + m·G وC = a·D، حيث m = Hs("SubAddr\0" ‖ a ‖ i ‖ j). ومن دون مفتاح العرض a لا يمكنك معرفة أن العناوين الفرعية تعود إلى المحفظة نفسها.

لماذا

إذا أعطيت عنوانًا واحدًا لشخصين مختلفين، فيمكنهما مقارنة ما لديهما واكتشاف أنهما دفعا للمستلم نفسه. العناوين الفرعية تحل هذه المشكلة: عنوان لكل دافع، بينما تبقى المحفظة واحدة ولا يصبح المسح أبطأ.

تشكّل العناوين الفرعية تسلسلًا هرميًا من مستويين: الحساب i (الرئيسي) والفهرس داخل الحساب j (الثانوي). العنوان الفرعي (0, 0) هو العنوان الرئيسي.

لماذا لا يبدأ العنوان (1,0) بالرقم 4؟

للمحفظة عنوان رئيسي واحد فقط — (0,0)، وهو ببساطة B وA مع البادئة 18. أما أي فهرس آخر، بما في ذلك العنوان "الأول" للحساب الثاني (1,0)، فهو عنوان فرعي: تُشتق مفاتيحه عبر m = Hs("SubAddr\0" ‖ a ‖ 1 ‖ 0)، ويُرمَّز بالبادئة 42، ومن هنا 8…. الحساب مجرد وسيلة لتجميع العناوين الفرعية؛ وليس له عنوان "رئيسي" خاص به.

كيف يُحسب

m = Hs( "SubAddr\0" ‖ a ‖ i ‖ j )
D = B + m·G     C = a·D i و j عددان بطول 32 بت بترتيب little-endian؛ و"SubAddr\0" يتكون من 8 بايتات تنتهي ببايت صفري

يُرمَّز العنوان الفرعي مثل العنوان العادي لكن بالبادئة 42 (يبدأ بـ 8 على الشبكة الرئيسية): Base58(42 ‖ D ‖ C ‖ checksum).

لاحظ أن "مفتاح العرض" العام للعنوان الفرعي C ليس a·G بل a·D. هذه الحيلة ضرورية للإرسال.

الإرسال إلى عنوان فرعي

عند الإرسال إلى عنوان عادي يكون مفتاح المعاملة R = r·G. أما عند الإرسال إلى عنوان فرعي فيستخدم المرسِل R = r·D. ثم يحسب المستلم السر المشترك كالمعتاد:

a·R = a·r·D = r·(a·D) = r·C

المرسِل يعرف r وC، والمستلم يعرف a وR، وكلاهما يحصل على النقطة نفسها.

كيف تتعرف المحفظة على عناوينها الفرعية

تحسب المحفظة مسبقًا D لبضع مئات من الفهارس وتحتفظ بجدول D → (i, j). ولكل مخرج تحسب مرشحًا

D' = P − Hs(8·a·R ‖ n)·G

وتبحث عن D' في الجدول. إن وُجد — فالمخرج لنا، ونعرف أيضًا إلى أي عنوان فرعي وصل. ولهذا لا تُبطئ العناوين الفرعية المسح: عملية طرح واحدة وبحث في جدول تجزئة.

دقيقة: العناوين الفرعية والمخرجات المتعددة

إذا احتوت المعاملة على مخرج إلى عنوان فرعي، تستخدم المحفظة المرسِلة مفتاح معاملة منفصلًا لكل مخرج (مفاتيح إضافية في tx_extra). وإلا لاستطاع المستلم اختبار ما إذا كان الباقي (الفكة) العائد إلى المرسِل ينتمي إلى عنوان ما.