GNUnet

كريستيان غروثوف، القائم على صيانة GNUnet، في برلين في 1 أغسطس 2013، في فعالية " #لقد حطمتم الإنترنت. سنصنع لأنفسنا GNU " .

GNUnet هو إطار برمجي لشبكات الند للند اللامركزية ، وهو حزمة رسمية من حزم GNU . يوفر هذا الإطار تشفير الروابط ، واكتشاف النظراء ، وتخصيص الموارد ، والتواصل عبر العديد من بروتوكولات النقل (مثل TCP و UDP و HTTP و HTTPS و WLAN و Bluetooth )، بالإضافة إلى خوارزميات أساسية متنوعة للند للند للتوجيه والبث المتعدد وتقدير حجم الشبكة. [ 5 ] [ 6 ]

تعتمد بنية شبكة GNUnet الأساسية على بنية الشبكة المتشابكة . تتضمن GNUnet جدول تجزئة موزع (DHT)، وهو نسخة عشوائية من Kademlia ، قادرة على توجيه البيانات بكفاءة في شبكات العالم الصغير . توفر GNUnet خيار " بنية F2F " لتقييد الاتصالات بأصدقاء المستخدم الموثوق بهم فقط. وبذلك، يستطيع أصدقاء أصدقاء المستخدم (وهكذا) تبادل الملفات بشكل غير مباشر مع جهاز المستخدم، دون استخدام عنوان IP الخاص به مباشرةً.

يستخدم GNUnet مُعرّفات الموارد الموحدة (غير معتمدة من قِبل هيئة IANA ، على الرغم من تقديم طلب بذلك). تتكون مُعرّفات GNUnet من جزأين رئيسيين: اسم الوحدة ومعرّفها الخاص. يكون مُعرّف GNUnet على الشكل التالي: حيث يُمثّل اسم الوحدة، بينما يُمثّل المعرّف سلسلة نصية خاصة بها.gnunet://module/identifier

كُتبت قاعدة الشفرة الأساسية بلغة C ، ولكن توجد روابط بلغات أخرى لتوفير واجهة برمجة تطبيقات (API) لتطوير إضافات بتلك اللغات. يُعدّ GNUnet جزءًا من مشروع GNU ، وقد اكتسب اهتمامًا في أوساط مجتمع المبرمجين بعد الكشف عن ثغرة PRISM . [ 7 ]

يتألف نظام GNUnet من عدة أنظمة فرعية، من أهمها نظام النقل ونظام النواة. [ 8 ] يوفر نظام النقل اتصالات غير آمنة على مستوى طبقة الربط، بينما يوفر نظام النواة اكتشاف النظراء والتشفير. [ 9 ] تُبنى تطبيقات متنوعة فوق نظام النواة.

يتضمن GNUnet تطبيقات P2P متنوعة في التوزيعة الرئيسية للإطار، بما في ذلك مشاركة الملفات والدردشة وشبكة VPN؛ بالإضافة إلى ذلك، تعمل بعض المشاريع الخارجية (مثل secushare) على توسيع بنية GNUnet التحتية.

لا علاقة لبروتوكول GNUnet ببروتوكول Gnutella P2P الأقدم. Gnutella ليس مشروعًا رسميًا من مشاريع GNU، بينما GNUnet كذلك. [ 10 ]

ينقل

في الأصل، استخدم برنامج GNUnet بروتوكول UDP للنقل الأساسي. [ 11 ] تم توسيع نظام النقل الفرعي لبرنامج GNUnet ليشمل خيارات إضافية، مثل TCP وSMTP. [ 12 ] تم إيقاف دعم الأخير لاحقًا بسبب نقص الصيانة. [ 13 ]

منفذ الاتصال، المسجل رسميًا لدى IANA ، هو 2086 ( TCP + UDP ). [ 14 ]

نظام الثقة

يوفر GNUnet نظام ثقة قائم على نموذج اقتصادي قائم على الفائض. [ 15 ] وقد استُمدت فكرة استخدام النظام الاقتصادي من شبكة MojoNation . [ 16 ]

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

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

ملف

يتمثل التطبيق الأساسي حاليًا في مشاركة الملفات المجهولة والمحصنة ضد الرقابة ، مما يسمح للمستخدمين بنشر أو استرجاع المعلومات بجميع أنواعها بشكل مجهول. يُطلق على بروتوكول GNUnet الذي يوفر إخفاء الهوية اسم GAP (بروتوكول إخفاء الهوية في GNUnet). [ 17 ] كما يمكن لنظام ملفات GNUnet استخدام مكتبة GNU libextractor لإضافة بيانات وصفية تلقائيًا إلى الملفات المشتركة .

ترميز الملف

يتم ترميز الملفات التي تتم مشاركتها مع GNUnet باستخدام ECRS (الترميز لمشاركة الملفات المقاومة للرقابة). [ 18 ]

يتم تمثيل جميع المحتويات على شكل وحدات GBlock. تحتوي كل وحدة GBlock على 1024 بايت. توجد أنواع عديدة من وحدات GBlock، ولكل منها غرض محدد. أي وحدة GBlockب{\displaystyle B}يتم التعرف عليه بشكل فريد من خلال تجزئة RIPEMD-160 الخاصة بهح(ب){\displaystyle H(B)}.

تخزن وحدات DBlocks محتويات الملف الفعلية فقط. يُقسّم الملف عند حدود 1024 بايت، وتُخزّن الأجزاء الناتجة في وحدات DBlocks. تُربط وحدات DBlocks معًا في شجرة Merkle باستخدام وحدات IBlocks التي تخزن مُعرّفات DBlocks.

يتم تشفير الكتل باستخدام مفتاح متماثل مشتق منح(ب){\displaystyle H(B)}عندما يتم تخزينها في الشبكة.

الاستفسارات والردود

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

تُستخدم الاستعلامات للبحث عن المحتوى وطلب كتل البيانات.

يحتوي الاستعلام على مُعرّف المورد، وعنوان الرد، والأولوية، وTTL (مدة البقاء).

معرّف مورد البياناتسؤال{\displaystyle Q}هو تجزئة ثلاثيةح(ح(ح(سؤال))){\displaystyle H(H(H(Q)))}[ 19 ] يقدم النظير الذي يرد على الاستعلامح(ح(سؤال)){\displaystyle H(H(Q))}لإثبات أنها تمتلك بالفعل المورد المطلوب دون تقديمح(سؤال){\displaystyle H(Q)}إلى العقد الوسيطة، لذلك لا تستطيع العقد الوسيطة فك التشفيرسؤال{\displaystyle Q}.

يُعدّ عنوان الردّ الفرقَ الرئيسيّ مقارنةً ببروتوكول Freenet . فبينما ينتشر الردّ في Freenet دائمًا عبر المسار نفسه الذي استخدمه الاستعلام، قد يكون المسار أقصر في GNUnet. يمكن للطرف المُستقبِل للاستعلام تجاهله، أو إعادة توجيهه دون تغيير عنوان الردّ، أو تحويله باستبدال عنوان الردّ بعنوانه الخاص. يُوفّر تحويل الاستعلامات غطاءً لحركة البيانات الخاصة به، بينما يُجنّب إعادة توجيهها الطرفَ أن يكون حلقةً في انتشار الردّ، ممّا يُحافظ على عرض النطاق التردديّ الخاصّ به. تُمكّن هذه الميزة المستخدم من الموازنة بين إخفاء الهوية والكفاءة. يُمكن للمستخدم تحديد مستوى إخفاء الهوية لكلّ عملية نشر وبحث وتنزيل. يُمكن استخدام مستوى إخفاء هوية صفر لاختيار مشاركة الملفات غير المجهولة. لا تُستخدم بنية DHT الخاصة بـ GNUnet إلا إذا تمّ تحديد مشاركة الملفات غير المجهولة. يُحدّد مستوى إخفاء الهوية مقدار حركة البيانات التي يجب أن يمتلكها الطرف لإخفاء أنشطة المستخدم.

تحدد الأولوية مقدار الثقة التي يرغب المستخدم في إنفاقها في حالة نقص الموارد.

يُستخدم TTL لمنع بقاء الاستعلامات في الشبكة لفترة طويلة جدًا.

عناوين URI لمشاركة الملفات

يتكون مُعرِّف وحدة نظام الملفات من أحد الرموز التالية: chk أو sks أو ksk أو loc ، متبوعًا بشرطة مائلة وقيمة خاصة بالفئة. تحتوي معظم عناوين URI على تجزئات، مُشفَّرة بنظام base32hex . [ 20 ]

  • يقوم الأمر chk بتحديد الملفات، وعادةً ما يكون ذلك على النحو التالي:gnunet://fs/chk/[file hash].[query hash].[file size in bytes]
تجزئة الملف هي تجزئة الملف النصي الأصلي، والتي تسمح بفك تشفيره بعد تنزيله. أما تجزئة الاستعلام فهي تجزئة أعلى كتلة بيانات (GBlock)، والتي تسمح بتنزيل شجرة كتل البيانات الكاملة التي تحتوي على الملف المشفر. ويتطلب تحديد شكل الشجرة معرفة حجم الملف.
  • يحدد sks الملفات داخل مساحات الأسماء، عادةً:gnunet://fs/sks/NAMESPACE/IDENTIFIER
  • يحدد ksk استعلامات البحث، وعادةً ما تكون كالتالي:gnunet://fs/ksk/KEYWORD[+KEYWORD]*
  • يُحدد loc بيانات على جهاز معين، عادةً:gnunet://fs/loc/PEER/QUERY.TYPE.KEY.SIZE

أمثلة

نوع من أنواع معرّفات الموارد الموحدة (URI) لمشاركة الملفات في GNUnet يشير إلى نسخة محددة من نص رخصة GNU GPL : gnunet://fs/chk/9E4MDN4VULE8KJG6U1C8FKH5HA8C5CHSJTILRTTPGK8MJ6VHORERHE68JU8Q0FDTOH1DGLUJ3NLE99N0ML0N9PIBAGKG7MNPBTT6UKG.1I823C58O3LKS24LLI9KB384LH82LGF9GUQRJHACCUINSCQH36SI4NF88CMAET3T3BHI93D4S0M5CC6MVDL1K8GFKVBN69Q6T307U6O.17992

نوع آخر من عناوين URI لمشاركة ملفات GNUnet، يشير إلى نتائج البحث عن كلمة "gpl" الرئيسية: gnunet://fs/ksk/gpl

نظام أسماء جنو

يتضمن GNUnet تطبيقًا لنظام أسماء جنو (GNS)، وهو بديل لامركزي ومقاوم للرقابة لنظام أسماء النطاقات (DNS) . في GNS، يدير كل مستخدم نطاقاته الخاصة ، ويمكنه تفويض النطاقات الفرعية إلى نطاقات يديرها مستخدمون آخرون. تُجرى عمليات البحث عن السجلات التي يُعرّفها المستخدمون الآخرون باستخدام DHT الخاص بـ GNUnet. [ 21 ] تم توحيد GNS في RFC 9498 عام 2023. يدير سجل GANA نطاق المستوى الأعلى ".alt" في GNS. [ 22 ] 

ترجمة البروتوكول

يُمكن لـ GNUnet توجيه حركة مرور بروتوكول الإنترنت (IP) عبر شبكة الند للند. وعند الضرورة، يُمكن لـ GNUnet إجراء ترجمة بروتوكولات IPv4 إلى IPv6 خلال هذه العملية. كما يُوفر GNUnet بوابة على مستوى التطبيق لنظام أسماء النطاقات (DNS) لتوجيه طلبات DNS وربط العناوين بعائلات العناوين المطلوبة حسب الحاجة. وبهذه الطريقة، يُقدم GNUnet تقنية مُمكنة لتسهيل الانتقال إلى IPv6 . علاوة على ذلك، وبالتكامل مع GNS، يُمكن استخدام نظام ترجمة البروتوكولات الخاص بـ GNUnet للوصول إلى الخدمات المخفية - وهي خدمات قائمة على بروتوكول الإنترنت تعمل محليًا على أحد النظراء في الشبكة، ولا يُمكن الوصول إليها إلا من خلال تحليل اسم GNS.

واجهة برمجة تطبيقات التواصل الاجتماعي

نشر غابور إكس توث في أوائل سبتمبر 2013 أطروحة [ 23 ] لعرض تصميم خدمة مراسلة اجتماعية لإطار عمل GNUnet الند للند، توفر قابلية التوسع والتمديد، بالإضافة إلى اتصال مشفر من طرف إلى طرف. تتحقق قابلية التوسع من خلال إرسال الرسائل متعددة البث، بينما يُتاح التمديد باستخدام بروتوكول PSYC (بروتوكول المؤتمرات المتزامنة)، الذي يوفر صيغة RPC (استدعاء الإجراءات عن بُعد) قابلة للتوسيع، يمكن تطويرها بمرور الوقت دون الحاجة إلى ترقية البرامج على جميع عُقد الشبكة. ومن الميزات الرئيسية الأخرى التي توفرها طبقة PSYC قنوات البث المتعدد ذات الحالة، والتي تُستخدم لتخزين بيانات مثل ملفات تعريف المستخدمين. أما الاتصال المشفر من طرف إلى طرف، فيُوفره نظام الشبكة المتداخلة في GNUnet، والذي تُبنى عليه قنوات البث المتعدد. يتمتع المستخدمون المجهولون والأماكن الاجتماعية في النظام بهويات تشفيرية - يتم تحديدها بواسطة مفتاحهم العام - ويتم ربط هذه الهويات بأسماء بشرية لا تُنسى باستخدام نظام أسماء جنو (GNS )، حيث يحتوي كل اسم مستعار على منطقة تشير إلى أماكنه.

هذا هو العنصر الأساسي المطلوب لتحويل إطار عمل GNUnet إلى منصة شبكات اجتماعية كاملة من نظير إلى نظير .

محادثة

تم تطبيق خاصية الدردشة في وحدة CADET، [ 24 ] والتي تتوفر لها واجهة GTK لبيئة GNOME ، [ 25 ] وهي مصممة خصيصًا لهواتف لينكس الناشئة (مثل Librem 5 أو PinePhone ). [ 26 ]

انظر أيضاً

ملحوظات

  1. AGPL-3.0-or-later منذ 2018-06-05.
  2. GPL-3.0-or-later من 2007-07-02 حتى 2018-06-05.
  3. GPL-2.0-or-later من عام 2001 حتى 2007-07-02.

مراجع

  1. GNUnet.org حول GNUnet eV
  2. مارتن شانزنباخ (17 يوليو 2026). "إصدار GNUnet 0.28.0" . info-GNUnet . تاريخ الاسترجاع: 17 يوليو 2026 .
  3. شفرة مصدر GNUnet
  4. « إشعار الترخيص موجود في أعلى أحد ملفات المصدر في مستودع المشروع، وربما في كل ملف من ملفات المصدر» . تم الاطلاع عليه بتاريخ 8 يونيو 2018. برنامج GNUnet برنامج حر: يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو أفيرو العامة كما نشرتها مؤسسة البرمجيات الحرة، سواء الإصدار 3 من الرخصة، أو (حسب اختيارك) أي إصدار لاحق.
  5. EvansPolotGrothoff 2012 .
  6. ^ جروثوف ، كريستيان (2017/10/10). نظام GNUnet (أطروحة التأهيل). جامعة رين 1.
  7. غروتهوف 2013 .
  8. FerreiraGrothoffRuth 2003 ، الشكل 1.
  9. FerreiraGrothoffRuth 2003 ، الجزء الثاني. GNUNET وطبقة النقل: "الأساس مسؤول عن تشفير الرابط إلى الرابط، وربط هويات العقدة بالعناوين القابلة للتوجيه، واكتشاف النظراء."
  10. "برمجيات جنو" . البرمجيات - مشروع جنو - مؤسسة البرمجيات الحرة . مؤسسة البرمجيات الحرة، المحدودة . تم الاطلاع عليه بتاريخ 25 يناير 2020 .
  11. GrothoffPatrascuBennettStef 2002 , 3.1.1 UDP.
  12. FerreiraGrothoffRuth 2003 .
  13. "حول GNUnet — وثائق GNUnet" . docs.gnunet.org . تم الاطلاع عليه بتاريخ 13 أغسطس 2025 .
  14. سجل اسم الخدمة ورقم منفذ بروتوكول النقل، صفحة 38
  15. غروتهوف 2003 .
  16. GrothoffPatrascuBennettStef 2002 , 2.4 Mojo Nation.
  17. بينيت غروثوف 2003 .
  18. بينيت غروثوف هوروزوف باتراسكو 2002 .
  19. GrothoffPatrascuBennettStef 2002 ، 5.5 المزيد حول الاستفسارات.
  20. غروثوف، كريستيان. "معرّفات موارد موحّدة لمشاركة الملفات" . www.gnunet.org . مؤرشف من الأصل في 17 أغسطس 2016. تم الاطلاع عليه في 15 يوليو 2016 .
  21. Wachs, Schanzenbach & Grothoff 2014 .
  22. "RFC 9498: نظام أسماء جنو [ LWN.net ] " . lwn.net .
  23. توث، غابور إكس (5 سبتمبر 2013)، تصميم نظام مراسلة اجتماعية باستخدام البث المتعدد ذي الحالة ، مؤرشف في 22 فبراير 2014 على موقع Wayback Machine - تم الاطلاع عليه في 28 سبتمبر 2013
  24. وثائق GNUnet.org (14-11-2019) الدردشة مع عميل (بسيط) - تم الاطلاع عليه بتاريخ 14-11-2019
  25. cadet-gtk على GitLab
  26. GNUnet CADET لنظام لينكس على الأجهزة المحمولة – Reddit

مراجع إضافية