"توجيه البصل" في شبكة البرق وكيف يعمل

المؤلف: LORENZO

تتواصل أجهزة الكمبيوتر في الشبكة مع بعضها البعض وفقًا للبروتوكولات. هنا ، يشير "بروتوكول" إلى نظام من القواعد التي تحدد كيفية إرسال الرسائل وتفسيرها. تم وصف جزء إرسال رسائل الدفع من بروتوكول شبكة البرق بواسطة BOLT # 4 ، المعروف أيضًا باسم "بروتوكول توجيه البصل (بروتوكول توجيه البصل)".

توجيه البصل هي تقنية سبقت شبكة Lightning Network بمقدار 25 عامًا. يتم استخدامه أيضًا في Tor ، حيث يأتي اسم "Tor" ("The Onion Router"). تستخدم شبكة Lightning إصدارًا معدلاً قليلاً يسمى "توجيه البصل المستند إلى الأصل" والمختصر "SPHINX". في هذه المقالة ، سنتحدث عن كيفية عمل توجيه البصل.

لماذا نستخدم توجيه البصل؟

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

إذا استخدمت شبكة Lightning نفس بروتوكول الإنترنت ، فسيعرف كل وسيط من هو مرسل الدفع ومن كان المستلم ومن هم الوسطاء الآخرون على طول المسار. يعد توجيه البصل اختيارًا جيدًا لأن خصائصه تضمن العقد الوسيطة:

  • تعرف فقط على العقدة السابقة (التي أرسلت لك رسالة) والعقدة التالية (حيث تريد إعادة توجيه الرسالة).
  • لا يعرف طول المسار بأكمله ؛
  • عدم معرفة مكانك في الطريق.

نظرة عامة على توجيه البصل

دعنا نستخدم الطرد كقياس لشرح كيفية عمل توجيه البصل.

لنفترض أن أليس تريد أن تدفع لـ دينا. أولاً ، تحتاج أليس إلى إيجاد مسار مناسب لدفعها:

أليس ← بوب ← تشان ← دينا

ثم تقوم ببناء "بصلة". تبدأ مع دينا (من نهاية الطريق). تضع رسالة سرية (محتوى الدفع) في طرد ترسل إلى دينا ، وتغلقه بمفتاح لا يعرفه إلا هي ودينا. الآن ، تضع هذه الحزمة في حزمة أخرى لإرسالها إلى Chan ، وتغلق الطرد على Chan بمفتاح معروف لها ولشان فقط. الحق وما إلى ذلك.

ترسل أليس البصل الأخير (الحزمة) إلى الوسيط الأول على الطريق ، بوب. يفتح بوب مجموعته بمفتاحه الخاص ، ويرى أن الحزمة التالية تخص تشان. لذا قام بإرسال الحزمة إلى تشان. الشيء نفسه ينطبق على Chan ، بعد تفريغ الحزمة ، أرسل الطرد من الداخل إلى Dina. أخيرًا ، فتحت دينا الحزمة الخاصة بها ووجدت رسالة الدفع بالداخل.

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

في التوجيه المستند إلى المصدر الخاص بشبكة Lightning Network ، يختار المرسل مسار الدفع ويقوم ببناء بصلة كاملة لهذا المسار ، والتي يمكن اعتبارها فجوة للخصوصية (ملاحظة المترجم: يجب أن يكون موقع شبكة المتلقي مكشوفًا للمرسل). تعمل مخططات التوجيه الأخرى ، مثل "التوجيه الأعمى" (الترجمة الصينية) ، على حل هذه المشكلة عن طريق تشويش جزء من مسار الدفع للمرسل. ومع ذلك ، في هذه المقالة ، نركز حصريًا على SPHINX.

اجمعوا البصل

الآن ، دعونا نلقي نظرة على مواصفات توجيه البصل. في البداية ، نحتاج إلى تحديد هذه الأشياء:

  • المرسل هو "العقدة الأولية" (أليس) ؛
  • المتلقي هو "العقدة النهائية" (دينا) ؛
  • كل عقدة وسيطة في مسار الدفع هي "قفزة" (بوب وتشان) ؛
  • معلومات الاتصال بين كل قفزة تسمى "تحميل القفزة".

إنشاء حمولة القفز

بمجرد أن تختار أليس مسارًا للدفع ، تحصل على المعلومات الخاصة بكل قناة دفع من بروتوكول القيل والقال لإنشاء الحمولة لكل قفزة ، وإخبار كل قفزة بشكل أساسي بكيفية إنشاء HTLC للدفع الذي يتم إعادة توجيهه (عقد تجزئة Timelock).

من أجل إنشاء HTLC مناسب ، تحتاج كل قفزة إلى:

  • المبلغ المطلوب إعادة توجيهه ؛
  • قيمة سرية مدفوعة ؛
  • معرّف قناة الدفع التي تواصل إرسال البصل ؛
  • طول قفل الوقت.

تأتي معظم هذه البيانات من رسائل "تحديث القناة" ، والتي تحتوي على معلومات حول رسوم التوجيه وطلبات الأحداث ومعرفات قنوات الدفع. المبلغ الإجمالي الذي يجب إعادة توجيهه هو مجموع المبلغ المدفوع بالإضافة إلى الرسوم المفروضة على كل قفزة لاحقة ؛ بينما يتم حساب القيمة السرية للدفع بواسطة Dina ويتم تضمينها في فاتورة الدفع (يتم إبلاغها برسالة البصل لكل واحد قفز).

تبدأ أليس بالعقدة الأخيرة دينا. تتضمن مبلغ إعادة التوجيه وقيمة مدة قفل الوقت وقيمة سرية الدفع ومبلغ الدفع في الحزمة. لاحظ أنها لا تحتاج إلى إضافة معرّف القناة ، لأن دينا هي العقدة الأخيرة ولا تحتاج إلى إعادة توجيه الدفعة للآخرين.

للوهلة الأولى ، يبدو أن توفير مبلغ إعادة التوجيه زائد عن الحاجة ، لأن هذا المبلغ هو نفسه مبلغ الدفع. ومع ذلك ، فإن الدفع متعدد المسارات سيرسل مبلغ الدفع عبر مسارات متعددة ، ومن ثم لن تتطابق القيمتان.

في حمولة Chan ، تضيف Alice معرّفات قناة Chan و Dina. كما أضافت كميات إعادة التوجيه وقيم timelock. أخيرًا ، تنشئ أليس حمولة لـ Bob. تتقاضى تشان 100 ساتوشي مقابل الدفع عبر القناة بينها وبين دينا ، لذلك يتعين على أليس أن تخبر بوب أن المبلغ المحول هو الدفع بالإضافة إلى رسوم المناولة. وفقًا لرسالة تحديث القناة الخاصة بـ Chan ، تم أيضًا زيادة قيمة timelock بمقدار 20 (في الكتل). أخيرًا ، تنظر أليس أيضًا في متطلبات رسوم المناولة وقفل الوقت ، وتمنحه HTLC بطول قفل زمني يبلغ 700040 وقيمة 100200 ساتوشي.

القيمة السرية المشتركة وإنشاء المفاتيح

بعد ذلك ، تقوم أليس بإعداد البصل عن طريق إنشاء سر مشترك لكل قفزة (بما في ذلك العقدة النهائية). يمكن إنشاء هذه القيمة السرية المشتركة بواسطة Alice والقفز المستهدف على التوالي عن طريق ضرب مفتاحها الخاص بالمفتاح العام للطرف الآخر.

تعد القيمة السرية المشتركة ضرورية لتوجيه البصل ، مما يسمح لـ Alice وكل قفزة باشتقاق نفس المفتاح. ثم تستخدم أليس هذه المفاتيح لتشويش كل طبقة من البصل ، وتستخدم تلك القفزة المفاتيح لإلغاء التشويش.

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

يحتاج كل من Bob و Chan و Dina إلى الحصول على نفس القيمة السرية مثل Alice ، لذا فهم بحاجة إلى معرفة المفتاح المؤقت لاستخدامه في جلستهم. تضع أليس المفتاح الأول فقط في البصلة لحفظ حجم الرسالة. تقوم كل قفزة بحساب المفتاح المؤقت التالي وتضمينه في البصلة للعقدة التالية. يمكن لكل قفزة استخدام المفتاح العام الخاص بها والقيمة السرية المشتركة لحساب عامل التعمية الذي تستخدمه أليس لتحديد المفتاح المؤقت التالي.

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

** مفتاح رو **

يتم استخدام مفتاح Rho بواسطة Alice لتشفير طبقة من البصل ؛ سيؤدي ذلك إلى تشويش محتويات الحمولة حتى لا يتمكن الغرباء من فك تشفيرها. يمكن لمالك مفتاح rho فقط فك تشفير الحمولة. هذا ما يجب على العقدة التي تتلقى البصل القيام به: استخدم القيمة السرية المشتركة مع Alice لاشتقاق مفتاح rho ، ثم فك تشفير البصل وقراءة المحتويات.

** موكي **

تستخدم أليس مفتاح mu لإنشاء مجموع اختباري لكل حمولة. تقوم أيضًا بتمرير المجموع الاختباري إلى القفزة التي تتلقى البصل. تستخدم هذه القفزة ، بدورها ، مفتاح mu لتوليد مجموع اختباري للحمولة المستلمة ، والتحقق من مطابقتها للحمولة التي قدمتها Alice. هذا للتحقق من سلامة الحمولة ، والتحقق من عدم العبث بها.

** مفتاح الوسادة **

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

مفتاح

يستخدم هذا المفتاح أيضًا للتحقق من سلامة البيانات الموجودة داخل البصل ، ولكن فقط في حالة إرجاع خطأ. نعم ، إنها تسمى "um" لأن كلمة "mu" مكتوبة بشكل معكوس. في حالة حدوث خطأ في الدفع ، فإن القفزة التي تعثر على الخطأ ستستخدم مفتاح um لإنشاء مجموع اختباري ، وعندما تتلقى العقدة السابقة تقرير الخطأ ، فإنها ستستخدم أيضًا مفتاح um للتحقق من سلامة الرسالة.

تغليف طبقة البصل

تبدو لفائف البصل النهائية كما يلي:

تمتلك Alice الآن الحمولة لكل قفزة وقيمة السر المشتركة لكل قفزة. دعونا نرى كيف تحول أليس هذه المعلومات إلى بصلة نهائية. تبدأ بالعقدة الأخيرة وتعمل في طريقها إلى الوراء خطوة بخطوة.

قامت أولاً بإنشاء حقل فارغ بطول 1300 بايت ، وهو الطول الإجمالي لجميع حمولات البصل. ثم تستخدم مفتاح اللوحة لإنشاء سلسلة عشوائية يبلغ طولها 1300 بايت ، وهي عبارة عن قمامة غير مجدية لأي قفزة. تتم هذه الخطوة للتأكد من أن كل طبقة من البصل تبدو متشابهة ، لذلك لا يمكنك رؤية الطول الإجمالي للمسار (عدد القفزات) ، ولا من هو المرسل ومن هو المستقبل.

تقوم بعد ذلك بإنشاء مجموع اختباري للحمولة التي يجب استخدامها وتضعها في نهاية الحمولة. في الرسالة إلى العقدة الأخيرة ، يكون المجموع الاختباري هو 0 لإبلاغ دينا بأنها المتلقي النهائي لهذه البصلة. بعد إضافة المجموع الاختباري إلى نهاية الحمولة ، تضع Alice الحمولة (والمجموع الاختباري) في بداية القمامة ، وتحذف جزء الرسالة بالكامل الذي يتجاوز 1300 بايت ، بحيث يكون طول الرسالة بالكامل 1300 بايت.

بعد ذلك ، تستخدم Alice مفتاح rho لإنشاء سلسلة بايت عشوائية ، وتستخدم عملية حصرية أو (XOR) على حمولة البصل التي تم الحصول عليها في الخطوة السابقة للحصول على الحمولة المبهمة. يمكن الحصول على النص الأصلي للحمولة باستخدام عملية XOR لسلسلة البايت العشوائية هذه على النص المبهم (ملاحظة المترجم: بمعنى آخر ، XOR هنا هي خوارزمية التشفير المتماثل ، وسلسلة البايت العشوائية هي المفتاح). تقارن عملية XOR حمولة البصل مقابل سلسلة البايت العشوائية (التي تم إنشاؤها بواسطة مفتاح rho) شيئًا فشيئًا ، ولا يتم إخراج 1 إلا إذا كانت إحدى بتات البيانات هي 1 ؛ ينتج عن ذلك حمولة مشوشة. الشيء الذكي في عملية XOR هو أنه طالما تحصل على سلسلة البايت العشوائية الصحيحة والحمولة المشوشة ، ما عليك سوى تشغيل عملية XOR مع الاثنين مرة أخرى للحصول على الحمولة المبهمة.

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

بعد تحضير البصل المشوش لقفزة واحدة ، تكرر أليس نفس الخطوات للعقدة التالية. الفرق الرئيسي هو أنه بمجرد نضج بصل دينا ، لم تعد بحاجة إلى إنتاج القمامة. إنها تقوم فقط بإلحاق البصل المبهم من الخطوة السابقة بعد الحمولة المفيدة والمجموع الاختباري ، وتقوم بقص أي شيء يزيد عن 1300 بايت.

أخيرًا ، تأخذ أليس البصلة المبهمة النهائية وتضيف مجموعًا اختباريًا حتى يتمكن بوب من التحقق من سلامة البصل. ثم تضيف أليس المفتاح العام للجلسة حتى يتمكن بوب من استخدام هذا المفتاح العام لحساب قيمة السر المشتركة. أخيرًا ، تضيف أيضًا بايتًا يمثل الإصدار ، لإخبار العقد الأخرى بكيفية تفسير البيانات الموجودة فيه. بالنسبة للإصدار الموصوف بواسطة BOLT # 4 ، يجب أن تكون بايت الإصدار 0.

** بصل إلى الأمام **

لإرسال حزمة البصل هذه ، يقوم المرسل بإنشاء رسالة update_add_htlc بالحقول التالية:

  • معرف القناة: القناة المحددة التي تتعلق بها هذه الرسالة.
  • المعرف: معرف HTLC هذا.
  • المبلغ: قيمة HTLC هذه.
  • تجزئة الدفع: أنشأها مستلم الدفعة.
  • وقت انتهاء الصلاحية: ستنتهي صلاحية HTLC بعد حظر معين.
  • طرد البصل: البصل الذي تم إنشاؤه لهذه الدفعة وهو ما تم ذكره أعلاه.
  • بيانات إضافية: تستخدم لتحديد بيانات إضافية.

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

مسلحًا بقيمة السر المشتركة ، ينشئ بوب مفتاح mu للتحقق من المجموع الاختباري للحمولة المضمنة في حزمة البصل. إذا لم يتم العبث بالحمولة ، يجب أن تتطابق المجاميع الاختبارية.

لمنع العقد الأخرى في المسار من معرفة طول المسار ، يضيف بوب حقلاً بحجم 1300 بايت مليئًا بالأصفار إلى حزمة البصل. يقوم بوب بعد ذلك بإنشاء سلسلة بايت عشوائية بطول 2600 بايت من مفتاح rho. يستخدم بوب سلسلة البايت العشوائية هذه لـ XOR حمولة البصل المملوءة بصفر.

هل تتذكر كيف أخبرتك عن خلط أحمال البصل؟ استخدم حمولة البصل المبهمة كإدخال ، وقم بتشغيل عملية "XOR" بنفس سلسلة البايت للحصول على حمولة البصل قبل التعتيم. نظرًا لأن Alice و Bob يستخدمان نفس القيمة السرية المشتركة ، لتوليد نفس مفتاح rho ، يمكن لـ Bob إلغاء التفتت. وهذا له ميزة إضافية تتمثل في تحويل أحرف اللوحة الطويلة التي يبلغ حجمها 1300 بايت إلى وحدات بايت عشوائية.

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

ستستمر هذه العملية حتى يتم إرسال الرسالة إلى العقدة الأخيرة ، دينا. عندما تتلقى دينا رسالة update_add_htlc ، يمكنها إدخال قيمة التجزئة للقيمة السرية التي أنشأتها بنفسها ، مما يعني أن HTLC هذا مخصص لها. لذلك تحتاج دينا فقط إلى التحقق من بصمات الأصابع وكشف رسائل البصل والكشف عن حمولتها الخاصة.

استكشاف الأخطاء وإصلاحها

نحن نتحدث عن قصة نجاح ، حالة يسير فيها كل شيء وفقًا للخطة ، ولكن إذا حدث خطأ ما على طول الطريق ، فيجب عليك إرسال رسالة مرة أخرى على طول الطريق لإخطار جميع العقد بحدوث خطأ ما. هذه العملية مشابهة لتوجيه البصل العادي. يتطلب اكتشاف عقدة خاطئة اشتقاق مفتاح um من القيمة السرية المشتركة ، واستخدامه لإنشاء سلسلة بايت عشوائية ، واستخدام عملية XOR للتعتيم على طرد البصل المرتجع.

العقدة التي تعثر على خطأ سترسل رسالة إلى العقدة السابقة في مسار الدفع. تستخدم كل قفزة مفتاح um ومفتاح amag للقيام بنفس العملية حتى يتلقى المرسل الحزمة. أخيرًا ، يستخدم المرسل مفتاح amag ومفتاح um لإلغاء التفكك والتحقق من الحزمة.

يمكن أن تحدث الأخطاء بسبب حزم البصل أو العقد أو القنوات. إذا كنت تستخدم Lightning Network كثيرًا ، فقد تكون قد واجهت أخطاء مثل "القناة غير متوفرة" أو "الرسوم غير كافية".

شاهد النسخة الأصلية
المحتوى هو للمرجعية فقط، وليس دعوة أو عرضًا. لا يتم تقديم أي مشورة استثمارية أو ضريبية أو قانونية. للمزيد من الإفصاحات حول المخاطر، يُرجى الاطلاع على إخلاء المسؤولية.
  • أعجبني
  • تعليق
  • مشاركة
تعليق
0/400
لا توجد تعليقات
  • تثبيت
تداول العملات الرقمية في أي مكان وفي أي وقت
qrCode
امسح لتنزيل تطبيق Gate.io
المنتدى
بالعربية
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • ไทย
  • Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)