ملاحظة
اكتمل نشر الشبكة. انظر SPEC للمواصفات الرسمية.
نظرة عامة
هذا الاقتراح يتعلق بتمديد تغذية الاشتراك في العناوين مع الأوامر، لتمكين خوادم الأسماء من بث تحديثات الإدخال من حاملي أسماء النطاقات. تم تنفيذه في الإصدار 0.9.26.
الدافع
حاليًا، تقوم خوادم اشتراك hosts.txt بإرسال البيانات في صيغة hosts.txt، وهي كالتالي:
```text
example.i2p=b64destination
```
هناك عدة مشاكل مع هذا:
- لا يمكن لحاملي أسماء النطاقات تحديث الوجهة المرتبطة بأسمائهم (لترقية مفتاح التوقيع إلى نوع أقوى مثلاً).
- لا يمكن لحاملي أسماء النطاقات التنازل عن أسمائهم عشوائيًا؛ يجب عليهم تقديم مفاتيح الوجهة الخاصة مباشرة إلى الحامل الجديد.
- لا توجد طريقة للمصادقة على أن النطاق الفرعي يتم التحكم به من قبل اسم النطاق الأساسي المقابل؛ حاليًا يتم فرض ذلك بشكل فردي من قبل بعض خوادم الأسماء.
التصميم
يضيف هذا الاقتراح عددًا من سطور الأوامر إلى صيغة hosts.txt. مع هذه الأوامر، يمكن لخوادم الأسماء توسيع خدماتها لتوفير عدد من الميزات الإضافية. سيتمكن العملاء الذين ينفذون هذا الاقتراح من الاستماع لهذه الميزات عبر عملية الاشتراك المنتظمة.
يجب توقيع جميع سطور الأوامر بواسطة الوجهة المقابلة. يضمن هذا أنه يتم إجراء التغييرات فقط بناءً على طلب حامل اسم النطاق.
تداعيات الأمان
لا يحتوي هذا الاقتراح على تداعيات على الخصوصية.
هناك زيادة في المخاطر المرتبطة بفقدان السيطرة على مفتاح الوجهة، حيث يمكن لشخص يحصل عليه استخدام هذه الأوامر لإجراء تغييرات على أي أسماء نطاقات مرتبطة. لكن هذا ليس مشكلة أكبر من الحالة الراهنة، حيث يمكن لأي شخص يحصل على الوجهة انتحال اسم النطاق والسيطرة (جزئيًا) على حركة المرور الخاصة به. كما يتم تعويض الخطر المتزايد بمنح حاملي أسماء النطاقات القدرة على تغيير الوجهة المرتبطة باسم النطاق، في حال اعتقادهم أن الوجهة تعرضت للاختراق؛ وهو ما لا يمكن تحقيقه بالنظام الحالي.
المواصفات
أنواع السطور الجديدة
يضيف هذا الاقتراح نوعين جديدين من السطور:
أوامر الإضافة والتغيير::
example.i2p=b64destination#!key1=val1#key2=val2 …
أوامر الإزالة::
#!key1=val1#key2=val2 …
ترتيب
قد لا يكون للخلاصة ترتيب أو مكتملًا. على سبيل المثال، يمكن أن يكون أمر التغيير في سطر قبل أمر الإضافة، أو بدون أمر الإضافة.
يمكن أن تكون المفاتيح بأي ترتيب. لا يُسمح بالمفاتيح المكررة. جميع المفاتيح والقيم حساسة لحالة الأحرف.
المفاتيح الشائعة
مطلوب في جميع الأوامر:
sig توقيع B64، باستخدام مفتاح التوقيع من الوجهة
إشارات إلى اسم نطاق ثانٍ و / أو وجهة:
oldname اسم نطاق ثانٍ (جديد أو تم تغييره) olddest وجهة b64 ثانية (جديدة أو تم تغييرها) oldsig توقيع b64 ثاني، باستخدام مفتاح التوقيع من nolddest
المفاتيح الشائعة الأخرى:
action أمر name اسم النطاق، موجود فقط إذا لم يكن مسبوقًا بـ example.i2p=b64dest dest الوجهة b64، موجود فقط إذا لم يكن مسبوقًا بـ example.i2p=b64dest date بالثواني منذ بدايات العصر expires بالثواني منذ بدايات العصر
الأوامر
يجب أن تحتوي جميع الأوامر باستثناء أمر “Add” على مفتاح/قيمة “action=command”.
للتوافق مع العملاء الأقدم، تكون معظم الأوامر متبوعة بـ example.i2p=b64dest، كما هو ملاحظ أدناه. بالنسبة للتغييرات، هذه هي دائمًا القيم الجديدة. يتم تضمين أي قيم قديمة في قسم المفتاح/القيمة.
المفاتيح المدرجة مطلوبة. يمكن أن تحتوي جميع الأوامر على عناصر مفتاح/قيمة إضافية غير معرفة هنا.
إضافة اسم نطاق
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم والوجهة الجديدة. action غير مدرج، يُفهم ضمنيًا. sig توقيع
مثال:
example.i2p=b64dest#!sig=b64sig
تغيير اسم النطاق
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم الجديد والوجهة القديمة. action changename oldname الاسم القديم، ليتم استبداله sig توقيع
مثال:
example.i2p=b64dest#!action=changename#oldname=oldhostname#sig=b64sig
تغيير الوجهة
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم القديم والوجهة الجديدة. action changedest olddest الوجهة القديمة، ليتم استبدالها oldsig توقيع باستخدام olddest sig توقيع
مثال:
example.i2p=b64dest#!action=changedest#olddest=oldb64dest#oldsig=b64sig#sig=b64sig
إضافة اسم نطاق بديل
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم الجديد (البديل) والوجهة القديمة. action addname oldname الاسم القديم sig توقيع
مثال:
example.i2p=b64dest#!action=addname#oldname=oldhostname#sig=b64sig
إضافة وجهة بديلة
(تستخدم لترقية التشفير)
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم القديم والوجهة الجديدة (البديلة). action adddest olddest الوجهة القديمة oldsig توقيع باستخدام olddest sig توقيع باستخدام الوجهة
مثال:
example.i2p=b64dest#!action=adddest#olddest=oldb64dest#oldsig=b64sig#sig=b64sig
إضافة نطاق فرعي
متبوعة بـ subdomain.example.i2p=b64dest نعم، هذا هو الاسم الفرعي للنطاق الجديد والوجهة. action addsubdomain oldname الاسم الأعلى للنطاق (example.i2p) olddest الوجهة الأعلى (لـ example.i2p) oldsig توقيع باستخدام olddest sig توقيع باستخدام الوجهة
مثال:
subdomain.example.i2p=b64dest#!action=addsubdomain#oldname=example.i2p#olddest=oldb64dest#oldsig=b64sig#sig=b64sig
تحديث البيانات الوصفية
متبوعة بـ example.i2p=b64dest نعم، هذا هو الاسم القديم والوجهة. action update sig توقيع
(أضف أي مفاتيح محدثة هنا)
مثال:
example.i2p=b64dest#!action=update#k1=v1#k2=v2#sig=b64sig
إزالة اسم نطاق
متبوعة بـ example.i2p=b64dest لا، يتم تحديدها في الخيارات action remove name اسم النطاق dest الوجهة sig توقيع
مثال:
#!action=removeall#name=example.i2p#dest=b64destsig=b64sig
إزالة الكل بهذه الوجهة
متبوعة بـ example.i2p=b64dest لا، يتم تحديدها في الخيارات action removeall name الاسم القديم للنطاق، استشاري فقط dest الوجهة القديمة، يتم إزالة الكل بهذه الوجهة sig توقيع
مثال:
#!action=removeall#name=example.i2p#dest=b64destsig=b64sig
التوقيعات
يجب أن تحتوي جميع الأوامر على مفتاح/قيمة توقيع “sig=b64signature” حيث يتم التوقيع على البيانات الأخرى باستخدام مفتاح التوقيع الوجهة.
بالنسبة للأوامر التي تشمل وجهة قديمة وجديدة، يجب أن يكون هناك أيضًا توقيع oldsig=b64signature، وواحد من الاسم القديم، الوجهة القديمة، أو كليهما.
في أمر الإضافة أو التغيير، يوجد المفتاح العلني للتحقق في الوجهة التي سيتم إضافتها أو تغييرها.
في بعض أوامر الإضافة أو التعديل، قد يتم الإشارة إلى وجهة إضافية، على سبيل المثال عند إضافة اسم بديل، أو تغيير وجهة أو اسم نطاق. في هذه الحالة، يجب تضمين توقيع ثانٍ وكلاهما يجب التحقق منهما. التوقيع الثاني هو التوقيع “الداخلي” ويتم توقيعه والتحقق منه أولاً (باستثناء التوقيع “الخارجي”). يجب على العميل اتخاذ أي إجراءات إضافية ضرورية للتحقق وقبول التغييرات.
oldsig هو دائمًا التوقيع “الداخلي”. التوقيع والتحقق بدون المفاتيح ‘oldsig’ أو ‘sig’. sig هو دائمًا التوقيع “الخارجي”. التوقيع والتحقق مع وجود المفتاح ‘oldsig’ ولكن ليس المفتاح ‘sig’.
إدخال للتوقيعات
لإنشاء تدفق بايت لإنشاء أو التحقق من التوقيع، قم بالتسلسل كما يلي:
- احذف مفتاح “sig”
- إذا كنت تتحقق بـ oldsig، أيضًا احذف مفتاح “oldsig”
- لأوامر الإضافة أو التغيير فقط، أخرج example.i2p=b64dest
- إذا تبقى أي مفاتيح، أخرج “#!”
- قم بفرز الخيارات بواسطة المفتاح UTF-8، ورفض إذا كانت هناك مفاتيح مكررة
- لكل مفتاح/قيمة، أخرج key=value، متبوعة (إذا لم يكن المفتاح/القيمة الأخيرة) بـ ‘#’
ملاحظات
- لا تخرج سطر جديد
- ترميز الإخراج هو UTF-8
- جميع ترميزات الوجهة والتوقيع هي في Base 64 باستخدام الأبجدية I2P
- المفاتيح والقيم حساسة لحالة الأحرف
- يجب أن تكون أسماء المضيف بالأحرف الصغيرة
التوافق
يتم تنفيذ جميع السطور الجديدة في صيغة hosts.txt باستخدام أحرف التعليقات الرائدة، لذلك ستفسر جميع إصدارات I2P القديمة الأوامر الجديدة كتعليقات.
عندما تقوم أجهزة توجيه I2P بالتحديث إلى المواصفة الجديدة، فإنها لن تعيد تفسير التعليقات القديمة، ولكن ستبدأ في الاستماع للأوامر الجديدة في عمليات الجلب اللاحقة لتغذيات اشتراكها. لذلك من المهم أن تستمر خوادم الأسماء في إدخال أوامر في شكل ما، أو تمكين دعم etag بحيث يمكن لأجهزة التوجيه جلب جميع الأوامر السابقة.