نظرة عامة
لقد استخدمت I2P بروتوكول نقل عبر UDP مقاومًا للرقابة يُسمّى “SSU” منذ عام 2005. لم نتلقَّ سوى عدد قليل، إن وُجد، من التقارير عن حجب SSU على مدى 17 عامًا. ومع ذلك، وفقًا لمعايير اليوم من حيث الأمان ومقاومة الحجب والأداء، يمكننا أن نقدّم ما هو أفضل. أفضل بكثير.
لهذا السبب، وبالتعاون مع i2pd project، قمنا بإنشاء وتنفيذ “SSU2”، وهو بروتوكول UDP حديث صُمِّم وفق أعلى معايير الأمان ومقاومة الحجب. سيحلّ هذا البروتوكول محل SSU.
لقد جمعنا بين التشفير القياسي على مستوى الصناعة وأفضل ميزات بروتوكولَي UDP WireGuard وQUIC، إلى جانب ميزات مقاومة الرقابة في بروتوكول TCP الخاص بنا “NTCP2”. قد يكون SSU2 واحدًا من أكثر بروتوكولات النقل أمانًا التي تم تصميمها على الإطلاق.
توشك فرق Java I2P و i2pd على إكمال بروتوكول النقل SSU2، وسنُمكّنه لجميع routers في الإصدار القادم. وبذلك تكتمل خطتنا الممتدة لعقد من الزمن لترقية جميع آليات التشفير من التنفيذ الأصلي لـ Java I2P الذي يعود إلى عام 2003. سيحل SSU2 محل SSU، وهو استخدامنا الوحيد المتبقي لتشفير ElGamal.
- Signature types and ECDSA signatures (0.9.8, 2013)
- Ed25519 signatures and leasesets (0.9.15, 2014)
- Ed25519 routers (0.9.22, 2015)
- Destination encryption types and X25519 leasesets (0.9.46, 2020)
- Router encryption types and X25519 routers (0.9.49, 2021)
بعد الانتقال إلى SSU2، سنكون قد نقلنا جميع بروتوكولاتنا المصادق عليها والمشفرة إلى مصافحات معيارية لـNoise Protocol:
- NTCP2 (0.9.36, 2018)
- ECIES-X25519-Ratchet end-to-end protocol (0.9.46, 2020)
- ECIES-X25519 tunnel build messages (1.5.0, 2021)
- SSU2 (2.0.0, 2022)
تستخدم جميع بروتوكولات I2P Noise خوارزميات التشفير القياسية التالية:
الأهداف
- Upgrade the asymmetric cryptography to the much faster X25519
- Use standard symmetric authenticated encryption ChaCha20/Poly1305
- Improve the obfuscation and blocking resistance features of SSU
- Improve the resistance to spoofed addresses by adapting strategies from QUIC
- Improved handshake CPU efficiency
- Improved bandwidth efficiency via smaller handshakes and acknowledgements
- Improve the security of the peer test and relay features of SSU
- Improve the handling of peer IP and port changes by adapting the “connection migration” feature of QUIC
- Move away from heuristic code for packet handling to documented, algorithmic processing
- Support a gradual network transition from SSU to SSU2
- Easy extensibility using the block concept from NTCP2
التصميم
تستخدم I2P طبقات متعددة من التشفير لحماية حركة البيانات من المهاجمين. أدنى طبقة هي طبقة بروتوكول النقل، وتُستخدم للوصلات من نقطة إلى نقطة بين اثنين من routers. لدينا حاليًا بروتوكولا نقل: NTCP2، وهو بروتوكول TCP حديث قُدِّم في عام 2018، وSSU، وهو بروتوكول UDP طُوِّر في عام 2005.
SSU2، شأنه شأن بروتوكولات نقل I2P السابقة، ليس قناةً عامة الأغراض للبيانات. تتمثل مهمته الأساسية في إيصال رسائل I2NP منخفضة المستوى الخاصة بـ I2P بأمان من router إلى الذي يليه. كل اتصال من هذه الاتصالات نقطة-إلى-نقطة يشكّل قفزة واحدة في I2P tunnel. تعمل بروتوكولات I2P ذات الطبقة الأعلى عبر هذه الاتصالات نقطة-إلى-نقطة لإيصال garlic messages (رسائل وفق تقنية Garlic) من طرف إلى طرف بين وجهات I2P.
يطرح تصميم نقل عبر UDP تحديات فريدة ومعقّدة غير موجودة في بروتوكولات TCP. يجب على بروتوكول UDP التعامل مع مشكلات أمنية ناجمة عن انتحال العناوين، وأن يطبّق آلية تحكّم في الازدحام الخاصة به. بالإضافة إلى ذلك، يجب تجزئة جميع الرسائل لتتلاءم مع الحد الأقصى لحجم الحزمة (MTU) على مسار الشبكة، ثم إعادة تجميعها لدى المستقبل.
اعتمدنا أولاً بشكل كبير على خبرتنا السابقة مع بروتوكولاتنا NTCP2 وSSU والبث. ثم، راجعنا بعناية واقتبسنا بشكل كبير من بروتوكولين لـ UDP طُوِّرا مؤخراً:
إن تصنيف البروتوكولات وحجبها من قبل مهاجمين عدائيين على المسار (on-path attackers) مثل جدران حماية تابعة لدول قومية ليس جزءًا صريحًا من نموذج التهديد لتلك البروتوكولات. ومع ذلك، فإنه يشكّل جزءًا مهمًا من نموذج التهديد الخاص بـ I2P، إذ تتمثل مهمتنا في توفير نظام اتصالات مجهول الهوية ومقاوم للرقابة للمستخدمين المعرّضين للخطر في جميع أنحاء العالم. لذلك، اشتمل جزء كبير من عملنا التصميمي على دمج الدروس المستفادة من NTCP2 وSSU مع الميزات والأمان المدعومين من قِبل QUIC وWireGuard.
الأداء
شبكة I2P هي مزيج معقد من routers متنوعة. هناك تنفيذان أساسيان يعملان في جميع أنحاء العالم على أجهزة تتراوح من حواسيب مراكز بيانات عالية الأداء إلى أجهزة Raspberry Pi وهواتف Android. تستخدم routers بروتوكولات النقل TCP وUDP كليهما. على الرغم من أن تحسينات SSU2 كبيرة، لا نتوقع أن تكون ملحوظة للمستخدم، سواء محلياً أو في سرعات النقل من طرف إلى طرف.
فيما يلي بعض أبرز التحسينات المُقدَّرة لـ SSU2 مقارنةً بـ SSU:
- 40% reduction in total handshake packet size
- 50% or more reduction in handshake CPU
- 90% or more reduction in ACK overhead
- 50% reduction in packet fragmentation
- 10% reduction in data phase overhead
خطة الانتقال
يسعى I2P إلى الحفاظ على التوافق مع الإصدارات السابقة، وذلك لضمان استقرار الشبكة، وللسماح لـ routers الأقدم بأن تظل مفيدة وآمنة. ومع ذلك، توجد حدود، لأن التوافق يزيد من تعقيد الشيفرة البرمجية ومتطلبات الصيانة.
سيقوم كلٌ من مشروعي Java I2P وi2pd بتفعيل SSU2 افتراضياً في إصداراتهما القادمة (2.0.0 و2.44.0) في أواخر نوفمبر 2022. ومع ذلك، لديهما خطط مختلفة لتعطيل SSU. سيعطّل i2pd SSU فوراً، لأن SSU2 يشكّل تحسّناً كبيراً مقارنة بتنفيذهم لـSSU. يخطط Java I2P لتعطيل SSU في منتصف 2023، لدعم انتقال تدريجي وإتاحة الوقت لـrouters (الموجّهات) الأقدم للترقية.
ملخص
كان على مؤسسي I2P اتخاذ عدة خيارات تخص الخوارزميات والبروتوكولات التشفيرية. كانت بعض تلك الخيارات أفضل من غيرها، ولكن بعد مرور عشرين عاماً، باتت تظهر على معظمها علامات التقادم. بالطبع، كنا نعلم أن هذا سيحدث، وقد أمضينا العقد الماضي في التخطيط وتنفيذ ترقيات تشفيرية.
كان SSU2 آخر بروتوكول وأعقده تطويرًا ضمن مسار الترقية الطويل لدينا. يتسم UDP بمجموعة صعبة للغاية من الافتراضات ونموذج تهديد معقد. قمنا أولًا بتصميم وإطلاق ثلاث تنويعات أخرى من بروتوكولات Noise، واكتسبنا خبرة وفهمًا أعمق لقضايا الأمن وتصميم البروتوكولات.
من المتوقع تمكين SSU2 في إصدارات i2pd وJava I2P المقرر طرحها في أواخر نوفمبر 2022. إذا سار التحديث على ما يرام، فلن يلاحظ أحد أي اختلاف على الإطلاق. أما فوائد الأداء، ورغم أنها كبيرة، فربما لن تكون قابلة للقياس لدى معظم المستخدمين.
نوصي كالمعتاد بالتحديث إلى الإصدار الجديد عند توفره. أفضل طريقة للحفاظ على الأمان ومساعدة الشبكة هي تشغيل أحدث إصدار.