شرح العناوين الخفية: كيف تعمل العناوين لمرة واحدة

· مدة القراءة: 5 د

يتيح لك العنوان الخفي (stealth address) أن تنشر عنوانًا واحدًا، ومع ذلك تصل كل دفعة إليك إلى مكان جديد على السلسلة. يشرح هذا الدليل كيف يعمل ذلك، وما يفعله كل من مفتاح العرض ومفتاح الإنفاق، وكيف تعثر المحفظة على مدفوعاتها، مع Blocknet مثالًا تطبيقيًا.

ما هو العنوان الخفي؟

إجابة مختصرة

العنوان الخفي عنوان عام لا يظهر أبدًا على سلسلة الكتل. يحمل مفتاحين عامين، مفتاح إنفاق ومفتاح عرض. ولكل دفعة، تدمجهما محفظة المرسِل مع رقم عشوائي جديد لتُنشئ عنوانًا لمرة واحدة لا يستطيع التعرف عليه والإنفاق منه إلا المستلم.

في سجل عام، يظهر العنوان العادي في كل دفعة يستلمها. وعنوان Bitcoin القياسي يعمل بهذه الطريقة: كل من يعرفه يستطيع البحث عن كل دفعة وجمع الإجمالي. ولهذا تمنح كثير من محافظ Bitcoin عنوانًا جديدًا لكل دفعة.

يؤدي العنوان الخفي هذه المهمة نيابةً عنك. تشارك عنوانًا واحدًا، على موقع أو في ملف شخصي أو كـ @name، ويشتق كل مرسِل منه عنوانًا مختلفًا لمرة واحدة. فتصبح عشر دفعات إليك عشرة مُخرَجات لا يجمعها أي شيء ظاهر فيما بينها أو مع العنوان الذي شاركته. ولا حاجة إلى أي تبادل للرسائل: يحسب المرسِل العنوان لمرة واحدة بمفرده، من عنوانك العام ورقم عشوائي.

من أين جاءت العناوين الخفية؟

يعود تصميم العنوان لمرة واحدة الذي تستخدمه Monero وBlocknet وعملات أخرى إلى الورقة البيضاء CryptoNote v2.0 التي كتبها Nicolas van Saberhagen، والمؤرخة في 17 أكتوبر 2013. تسمي الورقة الفكرة “مدفوعات غير قابلة للربط”، وتصف مرسِلًا يولّد “مفتاحًا عامًا لمرة واحدة” من عنوان المستلم. وتصف وثائق Monero العناوين الخفية بأنها تتيح للمرسلين إنشاء “عناوين عشوائية لمرة واحدة لكل معاملة نيابةً عن المستلم”.

انتشرت الفكرة إلى ما هو أبعد من عملات الخصوصية. فمعيار Bitcoin BIP 352 “Silent Payments” يتيح لعنوان Bitcoin ثابت استلام مدفوعات لا يمكن ربطها على السلسلة، ومعيار Ethereum ERC-5564، الذي أُنشئ في 2022، يوحّد العناوين الخفية لحسابات Ethereum. وكلاهما ميزة اختيارية على تلك السلاسل. أما في Blocknet، فكل دفعة تستخدم عنوانًا لمرة واحدة.

كيف تعمل العناوين الخفية؟

إجابة مختصرة

يختار المرسِل رقمًا عشوائيًا r، وينشر R = r·G في المعاملة، ويدمج r مع مفتاح العرض العام للمستلم في سر مشترك. وإضافة هذا السر إلى مفتاح الإنفاق العام تعطي المفتاح لمرة واحدة. ويعيد المستلم بناء السر نفسه من R ومن مفتاح العرض الخاص به، لذا لا يعثر على الدفعة سواه.

تحمل محفظتك زوجين من المفاتيح. كل مفتاح خاص رقم سري (s للإنفاق، وv للعرض)، وكل مفتاح عام هو ذلك الرقم مضروبًا في نقطة ثابتة على المنحنى G. وعنوانك ليس سوى المفتاحين العامين S وV. وهذا هو التبادل كاملًا:

Receiver publishes:   S = s·G   and   V = v·G
Sender picks r:       R = r·G                 (stored in the transaction)
One-time key:         P = H(r·V)·G + S
Receiver checks:      H(v·R)·G + S == P       (true because r·V = v·R)
Key to spend it:      x = H(v·R) + s          (so P = x·G)

الحيلة هي تبادل Diffie-Hellman. يحسب المرسِل r·V ويحسب المستلم v·R، فيصل كلاهما إلى النقطة نفسها، لأن كلًا منهما يساوي r·v·G. ولا أحد غيرهما يعرف r أو v، لذا لا يستطيع أحد غيرهما حسابها. وتجزئة هذه النقطة (H) تعطي سرًا مشتركًا، والمفتاح لمرة واحدة P هو هذا السر، في صورة نقطة، مضافًا إلى مفتاح الإنفاق العام الخاص بك.

عندما تفحص المحفظة السلسلة، تعيد حساب السر من R ومن مفتاح العرض الخاص بك وتتحقق مما إذا كان يُنتج P. فإن أنتجه، يكون المُخرَج لك. ولإنفاقه، تضيف محفظتك السر نفسه إلى مفتاح الإنفاق الخاص بك، فتحصل على المفتاح الخاص x لذلك المُخرَج وحده.

تتبع Blocknet هذا التصميم على مجموعة Ristretto فوق Curve25519، مع تجزئة SHA-256 تحت وسم نطاق خاص بـ Blocknet. كما تمزج موضع كل مُخرَج في المعاملة داخل التجزئة، لذا يحصل مُخرَجان إلى الشخص نفسه في معاملة واحدة على مفتاحين غير مرتبطين. ومن السر المشترك نفسه يُشتق أيضًا عامل التعمية الذي يُخفي مبلغ المُخرَج والمفتاح الذي يشفّر مذكرته، وبهذا يقرأ المستلم الاثنين.

ماذا يفعل مفتاح العرض ومفتاح الإنفاق؟

يمنحك فصل المفتاحين مستويين من الوصول:

هذا الفصل يجعل محافظ المراقبة فقط ممكنة. في محفظة سطر الأوامر لـ Blocknet، يُنشئ الأمر viewkeys ملف محفظة منفصلًا من مفاتيح العرض. وتصفه تعليمات المساعدة في المحفظة بأنه ملف “يستطيع المراقبة لكنه لا يستطيع الإنفاق”، ومفيد عندما “تريد وصولًا للمراقبة فقط على جهاز آخر”. وعند تشغيله، تشرح المحفظة ما تُنشئه:

# View Keys
  This will create a view-only wallet that can monitor incoming
  funds but CANNOT spend. Anyone with this file can see your
  balance and transaction history.

لا تعطِ محفظة العرض فقط إلا لشخص ستُطلعه على سجلك، مثل محاسبك، أو احتفظ بها على حاسوب ثانٍ لك. وفي الحالتين، تستطيع مراقبة وصول الأموال بينما يبقى مفتاح الإنفاق على الجهاز الذي تثق به.

كيف تعثر المحفظة على مدفوعاتها؟

لأن المفاتيح لمرة واحدة تبدو غير مرتبطة بعنوانك، لا شيء على السلسلة يحدد أي المُخرَجات لك. فتتحقق محفظتك بنفسها. لكل معاملة في كل كتلة جديدة، تأخذ R، وتحسب السر المشترك بمفتاح العرض الخاص بك، وتختبر كل مُخرَج وفق الصيغة أعلاه. وهذا ما تفعله المحفظة عندما تتزامن.

يُبقي الفاحص في Blocknet هذه العملية سريعة. فالخطوة المكلفة، أي ضرب R في مفتاح العرض، تجري مرة واحدة لكل معاملة، ثم يُختبر كل مُخرَج في تلك المعاملة مقابل النتيجة. وعندما يتطابق مُخرَج، تفك المحفظة تشفير المبلغ وتتحقق منه مقابل التزام Pedersen الخاص بالمُخرَج قبل إضافته إلى رصيدك.

ويجعل الفحص الاستعادة بسيطة أيضًا. فزوجا مفاتيح Blocknet يأتيان من عبارة الاسترداد المكونة من 12 كلمة، لذا تعيد استعادة العبارة على حاسوب جديد بناء المفاتيح، وتعيد المحفظة فحص السلسلة للعثور على كل مُخرَج يخصك. ويوضح دليل محفظة Blocknet كيف تنسخ العبارة احتياطيًا وتستعيدها.

العناوين الخفية في Blocknet

في Blocknet، العنوان الخفي هو ببساطة عنوانك. وهو ترميز base58 لمفتاح الإنفاق العام ومفتاح العرض العام ومجموع اختباري بطول 4 بايت، ويبلغ طوله 92 أو 93 حرفًا. تستخدمه كل دفعة إليك، لأن تنسيق المعاملات لا يتضمن وضعًا شفافًا. وتذهب مكافآت الكتل أيضًا إلى مفاتيح لمرة واحدة، لذا يُعثر على مُخرَج coinbase الخاص بالمعدِّن الفردي بالفحص نفسه.

تتكامل العناوين الخفية مع بقية طبقات الخصوصية في Blocknet: حلقة من 16 تُخفي المُخرَج الذي يأتي منه الإنفاق، والالتزامات تُخفي المبالغ، وDandelion++ يُخفي النقطة التي دخلت منها المعاملة إلى الشبكة. ويشرح دليل الخصوصية في Blocknet كل طبقة.

وهي تعمل أيضًا مع الأسماء. فـ الاسم المختصر في Blocknet ID مثل @yourname يرتبط علنًا بعنوانك، فيستطيع المرسلون البحث عنه في blocknet.id. أما المدفوعات نفسها فتذهب إلى مفاتيح جديدة لمرة واحدة، لذا لا يكشف اسمك شيئًا عما استلمته.

وهذا يجعل الاسم المختصر عنوان دفع مناسبًا للتعدين. شغّل seine، وأدخل عنوانك أو @yourname عند الطلب واقبل مجمع التعدين الافتراضي، bntpool.com. ويغطي دليل التعدين بقية الخطوات، وتعثر محفظتك على BNT التي تكسبها بفحص مفتاح العرض نفسه الموصوف أعلاه.

الأسئلة الشائعة

هل العنوان الخفي هو نفسه العنوان لمرة واحدة؟

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

هل يستطيع أحد رؤية رصيدي إذا عرف عنواني الخفي؟

لا. معرفة عنوانك المنشور لا تتيح لأحد العثور على مدفوعاتك، لأن كل دفعة تصل إلى مفتاح لمرة واحدة يبدو غير مرتبط به. والعثور عليها يتطلب مفتاح العرض الخاص بك، لذا لا تستطيع سرد ما استلمته إلا محفظتك. وفي Blocknet تكون المبالغ مخفية أيضًا، فحتى المُخرَجات نفسها لا تُظهر أي قيمة.

ماذا يستطيع شخص أن يفعل بمفتاح العرض الخاص بي؟

يتيح مفتاح العرض الخاص لحامله العثور على المدفوعات المرسلة إليك وقراءة مبالغها ومذكراتها. ولا يستطيع إنفاق أي شيء، لأن الإنفاق يتطلب مفتاح الإنفاق الخاص. في Blocknet، يحوّل الأمر viewkeys مفتاح العرض إلى محفظة للعرض فقط، وهي مفيدة لمراقبة الأموال على حاسوب ثانٍ. لا تشاركه إلا مع أشخاص تثق بهم.

هل يجب أن أفعّل العناوين الخفية في Blocknet؟

لا. تذهب كل دفعة في Blocknet إلى عنوان خفي لمرة واحدة تلقائيًا، لأن تنسيق المعاملات لا يتضمن وضعًا شفافًا. تُنشئ محفظتك المفتاح لمرة واحدة عندما ترسل، وتعثر على المدفوعات الواردة بمفتاح العرض عندما تتزامن. لا شيء تحتاج إلى ضبطه، سواء دفعت إلى عنوان أو إلى @name.