اذهب إلى المحتوى

مفتاح التوزيع المسبق وبروتوكولات الاستيثاق المستخدمة في أمن الشبكات الحاسوبية


Ola Abbas

سنتعرف في هذا المقال على آلية مفاتيح التوزيع المسبَق Key Predistribution وبروتوكولات الاستيثاق Authentication Protocols المستخدمة لتحقيق أمن الشبكات الحاسوبية

مفتاح التوزيع المسبق Key Predistribution

يحتاج المشاركون المتصلون إلى معرفة المفاتيح الواجب استخدامها لدى استخدام الشيفرات ciphers والمستوثقات authenticators، ولكن كيف يحصل المشاركان على المفتاح المُشترك بينهما في حالة تشفير المفتاح السري؟ وكيف يعرف المشارِكان ما هو المفتاح العام الذي ينتمي إلى مشاركٍ معين في حالة تشفير المفتاح العام؟ تختلف الإجابة اعتمادًا على ما إذا كانت المفاتيح هي مفاتيح جلسةٍ قصيرة العمر أو مفاتيح موزَّعةً مسبقًا وأطول عمرًا.

مفتاح الجلسة session key هو مفتاحٌ يُستخدم لتأمين حلقة اتصالٍ واحدةٍ قصيرة نسبيًا تسمى جلسة، حيث تستخدم كل جلسةٍ مميزة بين زوج من المشاركين مفتاحَ جلسةٍ جديد، وهو دائمًا مفتاحٌ سري لسرعته، حيث يحدد المشاركون مفتاح الجلسة الواجب استخدامه عن طريق بروتوكول إنشاء مفتاح الجلسة، والذي يحتاج إلى الأمن الخاص به بحيث لا يستطيع الخصم معرفة مفتاح الجلسة الجديد على سبيل المثال، ويعتمد هذا الأمن على المفاتيح الموزَّعة مسبقًا والأطول عمرًا.

هناك نوعان من الدوافع الأساسية لتقسيم العمل بين مفاتيح الجلسة والمفاتيح الموزعة مسبقًا هما:

  • يؤدي تحديد مقدار الوقت الذي يُستخدم فيه المفتاح إلى تقليل وقت الهجمات الحسابية المكثفة computationally intensive attacks، وتقليل النص المشفر لتحليل التشفير، وكذلك المعلومات المُعرضة للخطر في حالة كسر المفتاح.
  • تتفوق شيفرات المفاتيح العامة على الاستيثاق وإنشاء مفتاح الجلسة، لكنها بطيئة جدًا في تشفير الرسائل بأكملها من أجل الخصوصية.

يشرح هذا القسم كيفية توزيع المفاتيح الموزعة مسبقًا، وسيشرح القسم التالي كيفية إنشاء مفاتيح الجلسة بعد ذلك، حيث سنستخدم من الآن فصاعدًا "ريم" و"أنس" لتحديد المشاركين (الشائع في أدبيات التشفير في المراجع الأجنبية هو أليس Alice وبوب Bob ولكن بدلناهما إلى أسماء عربية ليقابل أليس ريم وبوب أنس للتسهيل على القارئ العربي). ضع في حساباتك أنه على الرغم من أننا نميل إلى الإشارة إلى المشاركين بمصطلحات مجسّمة، إلا أننا كثيرًا ما نهتم بالاتصال بين كيانات البرامج أو الأجهزة مثل العملاء والخوادم، التي غالبًا لا تكون لها علاقةٌ مباشِرة مع أي شخصٍ معين.

توزيع المفاتيح العامة المسبق Predistribution of Public Keys

الخوارزميات الخاصة بإنشاء زوجٍ متطابقٍ من المفاتيح العامة والخاصة معروفةٌ للجميع، والبرامج التي تُنشئها متاحةٌ على نطاقٍ واسع؛ لذلك إذا أرادت ريم استخدام شيفرة cipher المفتاح العام، فيمكنها إنشاء زوجها الخاص من المفاتيح العامة والخاصة، وإبقاء المفتاح الخاص مخفيًا ونشر المفتاح العام، ولكن كيف يمكنها نشر مفتاحها العام بطريقة تجعل المشاركين الآخرين متأكدين من أنه حقًا يخصها؟ بالتأكيد لن يكون عبر البريد الإلكتروني أو الويب، لأن الخصم يمكن أن يزوّر ادعاءً مقبولًا بأن المفتاح x ينتمي إلى ريم عندما يكون x ينتمي إلى الخصم في الحقيقة.

يُطلق على المخطط الكامل للمصادقة على الارتباطات بين المفاتيح العامة والهويات (أي ما هو المفتاح ولمن ينتمي) اسم البنية التحتية للمفتاح العام Public Key Infrastructure أو اختصارًا PKI، حيث تبدأ البنية التحتية PKI بالتحقق من الهويات وربطها بمفاتيح خارج النطاق، ونعني بعبارة "خارج النطاق" شيئًا ما خارج الشبكة والحواسيب التي تتكون منها، كما هو الحال عندما تكون ريم وأنس أفرادًا يعرفون بعضهم بعضًا، حيث يمكنهم الاجتماع معًا في نفس الغرفة، كما يمكن أن تمنح ريم المفتاح العام لأنس مباشرةً؛ وإذا كان أنس منظمةً، فيمكن لريم (وهي فردٌ هنا) أن تقدم تعريفًا تقليديًا، ربما يتضمن صورةً أو بصمات أصابع؛ أما إذا كانت ريم وأنس حواسيبًا مملوكةً لنفس الشركة، فيمكن لمسؤول النظام ضبط أنس باستخدام مفتاح ريم العام.

لن يتوسّع إنشاء مفاتيح خارج النطاق جيدًا، ولكنه يكفي لتمهيد bootstrap البنية التحتية PKI، حيث يمكن نشر معرفة أنس بأن مفتاح ريم هو x على نطاقٍ واسع باستخدام مجموعة من التوقيعات الرقمية digital signatures ومفهوم الثقة. لنفترض مثلًا أنك تلقيت مفتاح أنس العام خارج النطاق وأنك تعرف ما يكفي عن أنس لتثق به في أمور المفاتيح والهويات، هنا يمكن أن يرسل أنس إليك رسالةً يؤكد فيها أن مفتاح ريم هو x، وبما أنك تعرف بالفعل مفتاح أنس العام، فيمكنك استيثاق الرسالة على أنها واردةٌ من أنس. تذكر أنه للتوقيع رقميًا على بيانٍ ما، سيُلحِق أنس القيمة المُعمَّاة المُشفَّرة cryptographic hash به باستخدام مفتاحه الخاص. وبما أنك تثق في أن أنس سيقول الحقيقة، فستعرف الآن أن مفتاح ريم هو x، على الرغم من أنك لم تقابلها مطلقًا ولم تتبادل معها رسالةً واحدة، ولن يضطر أنس حتى إلى إرسال رسالةٍ إليك باستخدام التوقيعات الرقمية؛ حيث يمكنه ببساطة إنشاء ونشر بيانٍ موقَّع رقميًا يفيد بأن مفتاح ريم هو x. يسمى بيانُ ارتباط المفتاح العام الموقَّع رقميًا *شهادةَ المفتاح العام public key *certificate أو اختصارًا شهادة certificate فقط، ويمكن أن يرسل أنس نسخةً من الشهادة إلى ريم أو ينشرها على موقع ويب. إذا احتاج شخصٌ ما يثق في أنس ويعرف مفتاحه العام للتحقق من مفتاح ريم العام، فيمكنه فعل ذلك من خلال الحصول على نسخةٍ من الشهادة، ربما مباشرةً من ريم؛ وبالتالي يمكنك أن ترى كيفية إنشاء مجموعةٍ كبيرةٍ من المفاتيح الموثوقة بمرور الوقت بدءًا من عددٍ صغيرٍ جدًا من المفاتيح مثل مفاتيح أنس فقط في هذه الحالة، حيث يلعب أنس الدور المُشار إليه غالبًا باسم سلطة الشهادات certification authority أو اختصارًا CA، ويعتمد الكثير من أمن الإنترنت اليوم على سلطة الشهادات مثل سلطة VeriSign، وهي سلطة شهادات تجارية معروفة.

يُعرَف معيار X.509 بأحد معايير الشهادات الرئيسية، وهو يترك الكثير من التفاصيل مفتوحةً لكنه يحدد البنية الأساسية، حيث يجب أن تتضمن الشهادة بوضوح ما يلي:

  • هوية identity الكيان المُعتمد.
  • المفتاح العام للجهة المُعتمدة.
  • هوية الموقّع.
  • التوقيع الرقمي.
  • معرّف خوارزمية التوقيع الرقمي أي تحديد القيمة المُعمَّاة المُشفَّرة والمشفّر.

هناك مكوّنٌ آخر اختياري وهو وقت انتهاء صلاحية الشهادة، وسنرى استخدامًا خاصًا له أدناه.

تنشِئ الشهادة ارتباطًا بين الهوية والمفتاح العام، لذلك يجب أن ننظر عن كثب إلى ما نعنيه بكلمة "الهوية identity"؛ فقد لا تكون الشهادة التي تنص على أن "هذا المفتاح العام ملكٌ لجون سميث" على سبيل المثال مفيدةً للغاية إذا لم تتمكن من معرفة الشخص المحدد الذي اسمه جون سميث من بين آلاف الأشخاص الذين يملكون نفس الاسم، وبالتالي يجب أن تَستخدم الشهادات حيز أسماءٍ محددًا جيدًا للهويات المُعتمَدة، حيث تُصدَر الشهادات لعناوين البريد الإلكتروني ونطاقات DNS على سبيل المثال.

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

سلطات الشهادات Certification Authorities

الثقة ثنائية في نموذج الثقة هذا؛ فإما أن تثق بشخصٍ تمامًا أو لا تثق به أبدًا، حيث يسمح ذلك إضافةً إلى الشهادات، ببناء سلاسلٍ من الثقة. إذا شهد X أن مفتاحًا عامًا معينًا ينتمي إلى Y، ثم شهد Y أن مفتاحًا عامًا آخر ينتمي إلى Z، فهناك سلسلةٌ من الشهادات من X إلى Z، على الرغم من أن X وZ ربما لم يلتقيا أبدًا. أما إذا عرفتَ مفتاح X، وتثق في X وY، فيمكنك أن تثق في الشهادة التي تعطي مفتاح Z، فكل ما تحتاجه هو سلسلةٌ من الشهادات وجميعها موقَّعةٌ من كيانات تثق بها، طالما أنها تؤدي إلى كيانٍ تعرف مفتاحه بالفعل.

سلطة الشهادات certification authority أو اختصارًا CA هي كيان يدّعي (باستخدام شخصٍ ما) أنه جديرٌ بالثقة للتحقق من الهويات وإصدار شهادات المفتاح العام، وفي هذا الصدد توجد سلطات شهادات CA تجارية وأخرى حكومية، وهناك سلطات شهادات مجانية. يجب أن تعرِف مفتاح سلطة الشهادات الخاص لاستخدام هذه السلطة، ولكن يمكنك معرفة مفتاح سلطة CA إذا كان بإمكانك الحصول على سلسلةٍ من الشهادات الموّقعة منها والتي تبدأ بسلطة CA التي تعرف مفتاحها بالفعل، ثم يمكنك تصديق أي شهادة موقَّعة من سلطة الشهادات الجديدة تلك.

تتمثل إحدى الطرق الشائعة لبناء مثل هذه السلاسل في ترتيبها في تسلسلٍ هرميٍ منظمٍ على شكل شجرة، كما هو موضحٌ في الشكل الآتي. إذا كان لدى كل شخصٍ المفتاح العام لسلطة CA الجذر، فيمكن لأي مشاركٍ تقديم سلسلةٍ من الشهادات لمشاركٍ آخر، وستكون معرفةُ ذلك كافيةً لبناء سلسلة ثقة لذلك المشارك.

Tree-structuredCertificationAuthorityHierarchy.png

هناك بعض المشكلات المهمة المتعلقة ببناء سلاسل الثقة، فحتى إذا كنت متأكدًا من أن لديك المفتاح العام لسلطة CA الجذر، فأنت بحاجةٍ للتأكد من أن كل سلطة شهادات من الجذر إلى الأسفل تؤدي عملها بصورةٍ صحيحة. إذا كانت لسلطة شهادات واحدةٌ فقط في السلسلة مستعدةً لإصدار شهادات للكيانات دون التحقق من هوياتها، فإن ما يبدو أنه سلسلةٌ صالحةٌ من الشهادات يصبح بلا معنى؛ فقد تصدر سلطة الشهادات الجذر شهادةً لسلطة شهادات من الدرجة الثانية وتتحقق تمامًا من أن الاسم الموجود في الشهادة يطابق اسم النشاط التجاري لسلطة الشهادات، بينما قد تكون سلطة الشهادات من الدرجة الثانية على استعدادٍ لبيع الشهادات لأي شخصٍ يسأل دون التحقق من هويته، وتزداد هذه المشكلة سوءًا كلما طالت سلسلة الثقة. توفّر شهادات X.509 خيار تقييد مجموعة الكيانات التي يكون فيها موضوع الشهادة موثوقًا للتصديق عليه.

يمكن أن يكون هناك أكثر من جذرٍ لشجرة الشهادات وهذا شائعٌ في تأمين معاملات الويب اليوم على سبيل المثال، حيث تُجهّز متصفحات الويب مثل Firefox وInternet Explorer مسبقًا بشهاداتٍ لمجموعةٍ من سلطات CA التي قرّر منتج المتصفح أنها ومفاتيحها يمكن الوثوق بها؛ ويمكن للمستخدم أيضًا إضافة سلطات شهادات إلى تلك السلطات التي يعترف المتصفح بأنها موثوقة. تُقبل هذه الشهادات بواسطة بروتوكول طبقة المقبس الآمنة Secure Socket Layer أو اختصارًا SSL / طبقة النقل الآمنة Transport Layer Security أو اختصارًا TLS، وهو البروتوكول المستخدم غالبًا لتأمين معاملات الويب، والذي نناقشه في قسمٍ لاحق. يمكنك البحث في إعدادات التفضيلات preferences settings لمتصفحك والعثور على خيار "عرض الشهادات view certificates" لمعرفة عدد سلطات الشهادات CA التي ضُبِط المتصفح الخاص بك ليثق بها.

شبكة الثقة Web of Trust

نموذجٌ بديل للثقة هو شبكة الثقة المتمثلة في نظام خصوصية جيدة جدًا Pretty Good Privacy أو اختصارًا PGP، وهو نظام أمانٍ للبريد الإلكتروني؛ لذا فإن عناوين البريد الإلكتروني هي الهويات التي ترتبط بها المفاتيح والتي تُوقَّع الشهادات بها. لا توجد سلطات CA متماشيةٌ مع أصول نظام PGP المتمثلة في الحماية ضد تدخل الحكومة، حيث يقرر كل فردٍ بمَن يثق ومدى ثقته به، فالثقة لها درجاتٌ في هذا النموذج. يمكن أن تتضمن شهادة المفتاح العام مستوى ثقة يشير إلى مدى ثقة الموقّع بارتباط المفتاح المُطالب به في الشهادة، لذلك قد يتعين على المستخدم الحصول على عدة شهاداتٍ تؤكد على نفس ارتباط المفتاح قبل أن يكون على استعدادٍ للوثوق به.

افترض أن لديك شهادةً لأنس مقدمة من ريم مثلًا، حيث يمكنك إسناد مستوىً معتدلًا من الثقة لتلك الشهادة؛ ولكن إذا كانت لديك شهادات إضافية لأنس يوفرها C وD وكلٌ منهما جديرٌ بالثقة إلى حدٍ ما، فقد يزيد ذلك بصورةٍ كبيرة من مستوى ثقتك في أن مفتاح أنس العام الذي لديك صالح. يدرك نظام PGP أن مشكلة بناء الثقة مسألةٌ شخصية تمامًا، ويمنح المستخدمين المادة الخام لاتخاذ قراراتهم الخاصة بدلًا من افتراض أنهم جميعًا على استعداد للثقة في بنيةٍ هرميةٍ واحدة من سلطات CA؛ فعلى حد تعبير فيل زيمرمان Phil Zimmerman وهو مطوّر نظام PGP، فإن "نظام PGP مخصصٌ للأشخاص الذين يفضلون حَزم مظلاتهم الخاصة"، أي الذين لا يثقون إلا بأنفسهم.

أصبح نظام PGP شائعًا جدًا في مجتمع الشبكات، وتُعَد حفلات توقيع مفاتيح PGP ميزةً منتظمةً للعديد من أحداث الشبكات مثل اجتماعات IETF، حيث يمكن للفرد في هذه التجمعات:

  • جمع المفاتيح العامة من الأفراد الآخرين الذين يعرف هويتهم.
  • تقديم مفتاحه العام للآخرين.
  • الحصول على مفتاحه العام موقَّعًا من الآخرين، وبالتالي جمع الشهادات التي ستكون مقنعةً لمجموعةٍ كبيرة بصورةٍ متزايدة من الأشخاص.
  • توقيع المفتاح العام للأفراد الآخرين، وبالتالي مساعدتهم على بناء مجموعة الشهادات التي يمكنهم استخدامها لتوزيع مفاتيحهم العامة.
  • جمع الشهادات من الأفراد الآخرين الذين يثق بهم بدرجةٍ كافيةٍ لتوقيع المفاتيح.

وبالتالي سيجمع المستخدم مجموعةً من الشهادات بدرجاتٍ متفاوتةٍ من الثقة بمرور الوقت.

إبطال الشهادات Certificate Revocation

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

الحل الأساسي للمشكلة بسيطٌ، حيث يمكن لكل سلطة شهادات إصدار قائمة إبطال الشهادات certificate revocation list أو اختصارًا CRL، وهي قائمةٌ موقّعة رقميًا من الشهادات التي جرى إبطالها. تُحدَّث قائمة إبطال الشهادات دوريًا وتُتاح علنًا، وبما أنها موقَّعة رقميًا، فيمكن نشرها على موقع ويب. ستستشير ريم أولًا أحدث قائمة CRL صادرة عن سلطة CA عندما تتلقى شهادةً لأنس تريد التحقق منها، وطالما لم تُبطَل الشهادة فهي صالحة. لاحظ أنه إذا كانت جميع الشهادات لها دورات حياة غير محدودة، فستزداد قائمة CRL دائمًا، حيث لا يمكنك مطلقًا سحب شهادة من قائمة إبطال الشهادات خوفًا من استخدام نسخةٍ من الشهادة التي أُبطِلت؛ لذلك فمن الشائع إرفاق تاريخ انتهاء صلاحية الشهادة عند إصدارها، وبالتالي يمكننا تحديد المدة الزمنية التي تحتاجها الشهادة المُبطَلة للبقاء في قائمة إبطال الشهادات، ويمكن إزالة الشهادة من قائمة إبطال الشهادات بمجرد مرور تاريخ انتهاء الصلاحية الأصلي.

توزيع المفاتيح السرية المسبق Predistribution of Secret Keys

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

  • يكفي فقط مفتاحٌ عامٌ واحد لكل كيانٍ للاستيثاق authentication والخصوصية confidentiality، ولكن يجب أن يكون هناك مفتاحٌ سريٌ لكل زوجٍ من الكيانات التي ترغب في الاتصال؛ فإذا كان هناك N كيان، فهذا يعني وجود N(N-1)/2 مفتاح.
  • يجب أن تظل المفاتيح السريةُ سريةً على عكس المفاتيح العامة.

أي هناك الكثير من المفاتيح لتوزيعها، ولا يمكنك استخدام الشهادات التي يمكن للجميع قراءتها.

الحل الأكثر شيوعًا هو استخدام مركز توزيع مفاتيح Key Distribution Center أو اختصارًا KDC، وهو كيانٌ موثوقٌ يشارك مفتاحًا سريًا مع كل كيانٍ آخر، ويؤدي هذا إلى خفض عدد المفاتيح إلى N-1 مفتاحًا أكثر قابليةً للإدارة، وهذا العدد قليلٌ بما يكفي للإنشاء خارج النطاق من أجل بعض التطبيقات. عندما ترغب ريم في التواصل مع أنس، فلن ينتقل هذا الاتصال عبر مركز توزيع المفاتيح، حيث سيشارك مركز KDC في بروتوكول يستوثق ريم مع أنس باستخدام المفاتيح التي يشاركها مركز KDC فعليًا مع كلٍ منهما، وينشئ مفتاح جلسة جديدًا لهما لاستخدامه، ثم يتواصل أنس وريم مباشرةً باستخدام مفتاح الجلسة. نظام كيربيروس Kerberos هو نظامٌ مستخدمٌ على نطاقٍ واسع يعتمد على هذا النهج، وسنشرح هذا النظام أدناه.

تبادل مفاتيح ديفي هيلمان Diffie-Hellman Key Exchange

هناك طريقةٌ أخرى لإنشاء مفتاحٍ سري مشترك وهي استخدام بروتوكول تبادل مفاتيح ديفي هيلمان Diffie-Hellman، والذي يعمل دون استخدام أي مفاتيحٍ موزعةٍ مسبقًا، حيث يمكن أن يقرأ أيُّ شخصٍ قادرٍ على التنصت الرسائلَ المتبادلة بين ريم وأنس، ولكن لن يعرف المتنصت المفتاح السري الذي ينتهي به المطاف عند ريم وأنس.

لا يستوثق بروتوكول ديفي هيلمان المشاركين، حيث من النادر أن يكون التواصل بصورةٍ آمنة دون التأكد من الشخص الذي تتواصل معه مفيدًا، لذلك فإن بروتوكول ديفي هيلمان عادةً ما يُعزَّز بطريقةٍ ما لتوفير الاستيثاق، وأحد الاستخدامات الرئيسية لبروتوكول ديفي هيلمان هو بروتوكول تبادل مفاتيح الإنترنت Internet Key Exchange أو اختصارًا IKE، وهو جزءٌ مركزيٌ من معمارية أمن IP أو اختصارًا IPsec.

يحتوي بروتوكول ديفي هيلمان على معاملين هما p وg، وكلاهما عامان public، ويمكن استخدامهما من قِبل جميع المستخدمين في نظامٍ معين، حيث يجب أن يكون المعامل p عددًا أوليًا. الأعداد الصحيحة mod p (اختصارًا إلى modulo p) هي من 0 إلى p-1، لأن x mod p هو باقي قسمة x على p، وتشكّل ما يسميه علماء الرياضيات مجموعة تحت الضرب group under multiplication. يجب أن يكون المعاملُ g، الذي يسمى عادةً المولّد generator، جذرَ p الأولي primitive، حيث يجب أن تكون هناك قيمة k لكل رقم n قيمته بين 1 وp-1 بحيث:

 n = gk mod p

إذا كان p هو العدد الأولي 5 على سبيل المثال (يمكن أن يستخدم النظام الحقيقي عددًا أكبر بكثير)، فقد نختار العدد 2 ليكون المولد g لأن:

1=20 mod p

2=21 mod p

3=23 mod p

4=22 mod p

افترض أن ريم وأنس يريدان الاتفاق على مفتاحٍ سريٍ مشترك، حيث يعرف ريم وأنس والآخرون قيم p وg. تنشئ ريم قيمةً خاصةً عشوائية a ويولّد أنس قيمةً خاصةً عشوائية b، حيث يُستخرَج كلٌ من العددين a وb من مجموعة الأعداد الصحيحة {1,…,p−1}، ويستخرج ريم وأنس القيم العامة المقابلة أي القيم التي سيرسلانها إلى بعضهما بعضًا دون تشفير على النحو التالي:

قيمة ريم العامة هي:

ga mod p

وقيمة أنس العامة هي:

gb mod p

ثم يتبادلون قيمهم العامة، وتحسب ريم أخيرًا:

gab mod p = (gb mod p)a mod p

ويحسب أنس:

gba mod p = (ga mod p)b mod p

ريم وأنس لديهما الآن gab mod p، والتي تساوي gba mod p بمثابة مفتاحٍ سري مشتركٍ بينهما.

يمكن أن يعرف أي متنصتٍ العددين p وg والقيمتين العامتين g a mod p وg b mod p؛ فإذا كان المتنصت هو الوحيد الذي يمكنه تحديد العدد a أو العدد b، فيمكنه بسهولة حساب المفتاح الناتج، ولكن تحديد العددين a أو b من تلك المعلومات غير ممكنٍ حسابيًا بالنسبة لأعداد p وa وb الكبيرة بصورةٍ مناسبة، حيث تُعرف هذه المشكلة باسم مشكلة اللوغاريتم المنفصلة discrete logarithm problem.

إذا كانت p = 5 وg = 2 على سبيل المثال، وبافتراض أن ريم اختارت العدد العشوائي a = 3 واختار أنس العدد العشوائي b = 4، فترسل ريم إلى أنس القيمة العامة:

23 mod 5=3

ويرسل أنس إلى ريم القيمة العامة:

24 mod 5 = 1

ثم تتمكن ريم من حساب ما يلي عن طريق استبدال قيمة أنس العامة بالقيمة 2 b mod 5.

gab mod p = (2b mod 5)3 mod 5 = (1)3 mod 5 = 1

ويستطيع أنس حساب ما يلي عن طريق استبدال قيمة ريم العامة بالقيمة2a mod 5.

gba mod p = (2a mod 5)4 mod 5 = (3)4 mod 5 = 1

.يتفق كلٌّ من ريم وأنس الآن على أن المفتاح السري هو 1.

يفتقر بروتوكول ديفي هيلمان للاستيثاق، وإحدى الهجمات التي يمكنها الاستفادة من ذلك هي هجوم الوسيط man-in-the-middle. افترض أن سارة خصمٌ ولديها القدرة على اعتراض الرسائل. تعرف سارة العددين p وg لكونهما عامان، وتولّد قيمًا خاصةً عشوائيةً c وd للاستخدام مع ريم وأنس على التوالي؛ فإذا أرسلت ريم وأنس قيمهما العامة لبعضهما البعض، فستعترضها سارة وترسل قيمها العامة كما في الشكل الآتي، والنتيجة هي أن ريم وأنس ينتهي بهما الأمر بمشاركة مفتاحٍ مع سارة بدلًا من بعضهما البعض دون معرفتهما بذلك.

AMan-in-the-middleAttack.png

هناك بروتوكولٌ آخر من بروتوكول ديفي هيلمان يُسمى أحيانًا بروتوكول ديفي هيلمان الثابت fixed Diffie-Hellman الذي يدعم استيثاق أحد المشاركين أو كليهما، ويعتمد على شهاداتٍ تشبه شهادات المفاتيح العامة، ولكنه يوثّق بدلًا من ذلك معاملات ديفي هيلمان العامة للكيان، وقد تنص هذه الشهادة على أن معاملات ديفي هيلمان الخاصة بريم هي p وg وga mod p مع ملاحظة أن قيمة a ستظل معروفة لريم فقط. ستؤكد هذه الشهادة لأنس أن المشارك الآخر في بروتوكول ديفي هيلمان هو ريم، وإلا فلن يتمكن المشارك الآخر من حساب المفتاح السري لأنه لا يعرف العدد a؛ فإذا كان لدى كلا المشاركَين شهادات لمعاملات ديفي هيلمان، فيمكنهما الاستيثاق ببعضهما بعضًا؛ وإذا كان لدى أحدهما شهادةً، فيمكن الاستيثاق بتلك الشهادة فقط. هذا مفيدٌ في بعض الحالات عندما يكون مثلًا أحد المشاركين خادم ويب والآخر عميلًا عشوائيًا، فيمكن للعميل الاستيثاق بخادم الويب وإنشاء مفتاحٍ سري للخصوصية قبل إرسال رقم بطاقة ائتمان إلى خادم الويب.

بروتوكولات الاستيثاق Authentication Protocols

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

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

يوجد شكلٌ مختلف من هذا الهجوم يسمى هجوم قمع إعادة الإرسال suppress-replay attack، فقد يؤخّر الخصم فقط رسالتك عن طريق اعتراضها ثم إعادة إرسالها لاحقًا، بحيث تُستلَم في وقتٍ لم يَعُد مناسبًا، حيث يمكن لخصمٍ أن يؤخّر طلبك لشراء الأسهم من وقتٍ مناسب إلى وقتٍ تصبح فيه غير راغبٍ في الشراء. يمكن أن تكون هذه الرسالة أصليةً إلى حدٍ ما، إلا أنها لن تأتي في الوقت المناسب، لذلك نحتاج أيضًا إلى ضمان دقة التوقيت timeliness. يمكن عدّ الأصالة ودقة التوقيت من جوانب سلامة البيانات integrity، وسيتطلب ضمانها في معظم الحالات بروتوكول ذهابٍ وإياب back-and-forth protocol.

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

القاسم المشترك بين هاتين المشكلتين هو الاستيثاق، فإذا لم تكن الرسالة أصليةً وفي الوقت المناسب، فمن وجهة نظرٍ عملية نعدًّها غير أصلية، وليست آتيةً مِن مَن تدّعي أنها كذلك. إذا رتّبتَ لمشاركة مفتاح جلسةٍ جديد مع شخصٍ ما، فأنت تريد أن تعرف أنك تشاركه مع الشخص المناسب، لذلك تنشئ بروتوكولات الاستيثاق مفتاح جلسةٍ في نفس الوقت، بحيث يستوثق ريم وأنس في نهاية البروتوكول بعضهما البعض ويصبح لهما مفتاحٌ سري جديد لاستخدامه؛ حيث سيستوثق البروتوكول فقط ريم وأنس في وقتٍ واحد بدون مفتاح جلسةٍ جديد، فيسمح لهما مفتاح الجلسة باستيثاق الرسائل اللاحقة بكفاءة. تجري بروتوكولات إنشاء مفتاح الجلسة الاستيثاق، ولكن الاستثناء الملحوظ هو بروتوكول ديفي هيلمان، كما هو موضحٌ أدناه، لذا فإن مصطلحات بروتوكول الاستيثاق وبروتوكول إنشاء مفتاح الجلسة مترادفان تقريبًا.

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

تقنيات الأصالة ودقة التوقيت

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

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

حلٌ آخر لأوجه النقص في العلامات الزمنية والأرقام الخاصة هو استخدام أحدهما أو كليهما في بروتوكول استجابة التحدي challenge-response protocol. لنفترض أننا نستخدم علامةً زمنية في بروتوكول استجابة التحدي، حيث ترسل ريم علامةً زمنية إلى أنس وتتحداه بتشفيرها في رسالة استجابة في حالة مشاركة مفتاح سري، أو توقيعها رقميًا في رسالة استجابة إذا كان لدى أنس مفتاح عام كما في الشكل الآتي. تشبه العلامةُ الزمنية المشفرة المستوثقَ الذي يثبت بالإضافة إلى ذلك دقة التوقيت، حيث يمكن أن تتحقق ريم بسهولة من توقيت العلامة الزمنية في استجابة أنس نظرًا لأن هذه العلامة الزمنية تأتي من ساعة ريم الخاصة، ولا حاجة لمزامنة الساعة الموزعة. افترض بدلًا من ذلك أن البروتوكول يستخدم الرموز الخاصة nonces، هنا ستحتاج ريم فقط إلى تتبّع الأرقام الخاصة لتلك الاستجابات المعلَّقة حاليًا والتي لم تكن معلَّقةً لفترة طويلة؛ حيث يجب أن تكون أي استجابةٍ مزعومةً برقمٍ خاص غير معروف زائفةً.

AChallenge-responseProtocol.png

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

بروتوكولات استيثاق المفتاح العام Public-Key Authentication Protocols

نفترض في المناقشة التالية أن مفاتيح ريم وأنس العامة موزَّعةٌ مسبقًا على بعضها بعضًا عبر بعض الوسائل مثل البنية التحتية PKI، وذلك حتى نشمل الحالة التي ضَمّنت فيها ريم شهادتها في رسالتها الأولى إلى أنس، والحالة التي يبحث فيها أنس عن شهادةٍ لريم عندما يتلقى رسالتها الأولى.

APublic-keyAuthenticationProtocolThatDependsOnSynchronization.png

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

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

APublic-keyAuthenticationProtocolThatDoesNotDependOnSynchronization.png

بروتوكولات استيثاق المفتاح السري Secret-Key Authentication Protocols

يكون التوزيع المسبق للمفاتيح السرية لكل زوجٍ من الكيانات عمليًا فقط في الأنظمة الصغيرة إلى حدٍ ما، حيث نركز هنا على الأنظمة الأكبر التي يكون فيها لكل كيان مفتاحٌ رئيسي master key خاصٌ به يشاركه فقط مع مركز توزيع المفاتيح Key Distribution Center أو اختصارًا KDC. تتضمن بروتوكولات الاستيثاق القائمة على المفتاح السري ثلاثة أطراف في هذه الحالة هم ريم وأنس ومركز KDC؛ والمنتج النهائي لبروتوكول الاستيثاق هو مفتاح جلسةٍ مشترك بين ريم وأنس وسيستخدمانه للتواصل مباشرةً، دون إشراك مركز توزيع المفاتيح KDC.

TheNeedham-SchroederAuthenticationProtocol.png

يوضح الشكل السابق بروتوكول استيثاق نيدام شرويدر Needham-Schroeder. لاحظ أن مركز توزيع المفاتيح لا يوثّق فعليًا رسالة ريم الأولية ولا يتصل بأنس مطلقًا، حيث يستخدم مركز KDC بدلًا من ذلك معرفته بمفاتيح ريم وأنس الرئيسية لإنشاء ردٍ قد يكون عديم الفائدة لأي شخصٍ آخر غير ريم، لأن ريم فقط هي التي تستطيع فك تشفيره، ويحتوي على المكونات الضرورية لريم وأنس لتنفيذ بقية بروتوكول الاستيثاق.

الغرض من الرقم الخاص في أول رسالتين هو التأكيد على أن رد مركز توزيع المفاتيح حديث، وتتضمن الرسالتان الثانية والثالثة مفتاح الجلسة الجديد ومعرّف ريم المشفَّرَين معًا باستخدام مفتاح أنس الرئيسي، وهو نوعٌ من إصدارٍ لشهادة المفتاح العام باستخدام المفتاح السري، وبمثابة بيانٍ موقَّعٍ من مركز KDC، لأن مركز توزيع المفاتيح هو الكيان الوحيد إلى جانب أنس الذي يعرف مفتاح أنس الرئيسي، يفيد بأن مفتاح الجلسة المرفَق مملوكٌ لريم وأنس؛ والهدف من الرقم الخاص في الرسالتين الأخيرتين هو طمأنة أنس بأن الرسالة الثالثة حديثة.

نظام كيربيروس Kerberos

نظام كيربيروس هو نظام استيثاق يعتمد على بروتوكول نيدام شرويدر ومتخصص في بيئات العميل / الخادم client/server، حيث طُوِّر في الأصل في معهد ماساتشوستس للتكنولوجيا ووحّدته منظمة IETF؛ وهو متاحٌ مثل منتجاتٍ مفتوحة المصدر ومنتجات تجارية. سنركز هنا على بعض ابتكارات نظام كيربيروس المهمة.

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

يلعب رد مركز KDC في بروتوكول نيدام شرويدر على ريم دورين هما:

  • يمنحها وسيلةً لإثبات هويتها بحيث يمكن لريم فقط فك تشفير الرد.

  • يمنحها نوعًا من شهادة المفتاح السري أو "تذكرة ticket" لتقديمها إلى أنس تتضمّن مفتاح الجلسة ومعرّف ريم المشفَّران باستخدام مفتاح أنس الرئيسي.

    تُقسَّم هاتان الوظيفتان في نظام كيربيروس ومركز KDC بحد ذاته وهذا موضحٌ في الشكل الآتي، حيث يلعب الخادم الموثوق به المسمَّى خادم الاستيثاق Authentication Server أو اختصارًا AS دورَ مركز KDC في تزويد ريم بشيءٍ يمكنها استخدامه لإثبات هويتها، ليس لأنس هذه المرة ولكن لخادم ثانٍ موثوقٍ به يسمى خادم منح التذاكر Ticket Granting Server أو اختصارًا TGS. يلعب خادم TGS دور مركز KDC الثاني، حيث يرد على ريم بتذكرةٍ يمكنها تقديمها إلى أنس. تكمن جاذبية هذا المخطط في أنه إذا احتاجت ريم إلى التواصل مع عدة خوادم، وليس أنس فقط، فيمكنها الحصول على تذاكر لكل من هذه الخوادم من خادم TGS دون الرجوع إلى خادم AS.

KerberosAuthentication.png

يمكن افتراض درجةٍ من مزامنة الساعة في نطاق تطبيق العميل / الخادم الذي يستهدفه نظام كيربيروس، فيتيح ذلك لنظام كيربيروس استخدام العلامات الزمنية ودورات الحياة lifespans بدلًا من الأرقام الخاصة الموجودة في بروتوكول نيدام شرويدر، وبالتالي القضاء على ضعف أمن بروتوكول نيدام شرويدر؛ ويدعم نظام كيربيروس اختيار دوال القيم المُعمَّاة hash functions وشيفرات المفاتيح السرية، مما يسمح له بمواكبة أحدث خوارزميات التشفير.

ترجمة -وبتصرّف- للقسمين Key Predistribution وAuthentication Protocols من فصل Network Security من كتاب Computer Networks: A Systems Approach.

اقرأ أيضًا


تفاعل الأعضاء

أفضل التعليقات

لا توجد أية تعليقات بعد



انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أضف تعليق

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • أضف...