المقدمة
SSH، أو الصَّدَف الآمِن، هو بروتوكول آمن وأكثر الطُّرُق شيوعًا لإدارة الخوادم عن بُعد بطريقة آمنة. باستخدام عدد من تقنيات التشفير، يوفر SSH آلية لتأسيس اتصال مُشفر بشكل تشفيري بين طرفين، مصادقة كل جانب على الآخر، وتمرير الأوامر والإخراج ذهابًا وإيابًا.
في هذا الدليل، سنقوم بدراسة التقنيات التشفيرية الأساسية التي يستخدمها SSH والطرق التي يستخدمها لتأسيس اتصالات آمنة. يمكن أن تكون هذه المعلومات مفيدة لفهم الطبقات المختلفة من التشفير والخطوات المختلفة اللازمة لتشكيل اتصال ومصادقة كلٍ من الطرفين.
فهم التشفير المتناظر والتشفير اللا متناظر والتجزئة
لتأمين نقل المعلومات، يستخدم SSH عددًا من أنواع مختلفة من تقنيات تلاعب البيانات في نقاط مختلفة في المعاملة. تشمل هذه أشكالًا من التشفير المتناظر، التشفير اللا متناظر، والتجزئة.
التشفير المتناظر
علاقة المكونات التي تقوم بتشفير وفك تشفير البيانات تحدد ما إذا كانت خطة التشفير متناظرة أو غير متناظرة.
التشفير المتناظر هو نوع من أنواع التشفير حيث يمكن استخدام مفتاح واحد لتشفير الرسائل إلى الطرف الآخر، وكذلك لفك تشفير الرسائل المستلمة من الطرف الآخر. وهذا يعني أن أي شخص يمتلك المفتاح يمكنه تشفير وفك تشفير الرسائل لأي شخص آخر يمتلك نفس المفتاح.
غالبًا ما يُشار إلى هذا النوع من خطة التشفير بـ “التشفير السري المشترك”، أو “التشفير بمفتاح سري”. عادةً ما يكون هناك مفتاح واحد فقط يُستخدم لجميع العمليات أو زوج من المفاتيح حيث يمكن اكتشاف العلاقة بينهما وأنه من السهل استنتاج المفتاح الآخر.
المفاتيح المتناظرة تُستخدم بواسطة بروتوكول SSH لتشفير الاتصال بأكمله. على عكس افتراض بعض المستخدمين، فإن أزواج المفاتيح العامة/خاصة غير المتناظرة التي يمكن إنشاؤها تستخدم فقط للمصادقة، وليس لتشفير الاتصال. يسمح التشفير المتناظر حتى بحماية مصادقة كلمة المرور ضد التنصت.
العميل والخادم يساهمان في إنشاء هذا المفتاح، والسر الناتج لا يعرفه أحد من الأطراف الخارجية. يتم إنشاء المفتاح السري من خلال عملية تعرف باسم خوارزمية تبادل المفتاح. يؤدي هذا التبادل إلى وصول الخادم والعميل إلى نفس المفتاح بشكل مستقل من خلال مشاركة بعض البيانات العامة وتلاعبها ببعض البيانات السرية. يتم شرح هذه العملية بتفصيل أكبر في وقت لاحق.
المفتاح التشفير التماثلي الذي يتم إنشاؤه بهذا الإجراء هو مبني على الجلسة ويشكل التشفير الفعلي للبيانات المرسلة بين الخادم والعميل. بمجرد تأسيس هذا، يجب تشفير بقية البيانات باستخدام هذا السر الذي تم مشاركته. يتم ذلك قبل التحقق من هوية العميل.
يمكن تكوين SSH لاستخدام مجموعة متنوعة من أنظمة التشفير التماثلي المختلفة، بما في ذلك معيار التشفير المتقدم (AES)، بلوفيش، 3DES، CAST128، و Arcfour. يمكن للخادم والعميل اتفاق على قائمة بالتشفيرات التماثلية التي يدعمونها، مرتبة حسب التفضيل. يُستخدم أول خيار من قائمة العميل المتاح على الخادم كخوارزمية تشفير في كلا الاتجاهين.
على Ubuntu 20.04، تكون الإعدادات الافتراضية لكل من العميل والخادم كما يلي:
[email protected]
aes128-ctr
aes192-ctr
aes256-ctr
[email protected]
[email protected]
هذا يعني أنه إذا كانت جهازين يعملان بنظام Ubuntu 20.04 يتصلان ببعضهما البعض (دون تجاوز التشفيرات الافتراضية من خلال خيارات التكوين)، فإنهما سيتفقان دائمًا على استخدام تشفير [email protected]
كتشفير افتراضي لاتصالهما.
التشفير غير المتماثل
التشفير غير المتماثل مختلف عن التشفير المتماثل لأنه لإرسال البيانات في اتجاه واحد، يُطلب وجود مفتاحين مرتبطين. يُعرف أحدهما بالمفتاح الخاص، بينما يُسمى الآخر المفتاح العام.
يمكن مشاركة المفتاح العام مع أي طرف بحرية. وهو مرتبط بمفتاحه المقابل، ولكن المفتاح الخاص لا يمكن استنتاجه من المفتاح العام. العلاقة الرياضية بين المفتاح العام والخاص تتيح للمفتاح العام تشفير الرسائل التي يمكن فقط فك تشفيرها بواسطة المفتاح الخاص. وهذه قدرة أحادية الاتجاه، مما يعني أن المفتاح العام ليس لديه القدرة على فك تشفير الرسائل التي يكتبها، ولا يمكنه فك تشفير أي شيء قد يُرسله المفتاح الخاص.
يجب أن يُحفظ المفتاح الخاص سريًا تمامًا ولا يجب مشاركته مع طرف آخر. هذا متطلب أساسي لعمل نموذج المفتاح العام. المفتاح الخاص هو العنصر الوحيد القادر على فك تشفير الرسائل التي تم تشفيرها باستخدام المفتاح العام المقابل. وبموجب هذه الحقيقة، أي كيان قادر على فك تشفير هذه الرسائل قد أظهر أنه يسيطر على المفتاح الخاص.
يستخدم SSH التشفير الغير متماثل في عدة أماكن مختلفة. خلال عملية تبادل المفتاح الأولية المستخدمة لإعداد التشفير المتناظر (المستخدم لتشفير الجلسة)، يتم استخدام التشفير غير المتماثل. في هذه المرحلة، ينتج كل من الطرفين أزواج مفتاح مؤقتة ويتبادلان المفتاح العمومي من أجل إنتاج السر المشترك الذي سيتم استخدامه للتشفير المتناظر.
الاستخدام الأكثر مناقشة للتشفير غير المتماثل مع SSH يأتي من مصادقة مستندة على مفتاح SSH. يمكن استخدام أزواج مفتاح SSH لمصادقة عميل مع خادم. ينشئ العميل زوج مفتاح ثم يقوم بتحميل المفتاح العمومي إلى أي خادم بعيد يرغب في الوصول إليه. يتم وضع هذا في ملف يسمى authorized_keys
داخل الدليل ~/.ssh
في دليل الحساب الخاص بالمستخدم في الخادم البعيد.
بعد إقامة التشفير المتناظر لتأمين الاتصالات بين الخادم والعميل، يجب على العميل المصادقة للسماح بالوصول. يمكن للخادم استخدام المفتاح العمومي في هذا الملف لتشفير رسالة تحدي للعميل. إذا كان العميل قادراً على إثبات أنه قادر على فك تشفير هذه الرسالة، فقد أثبت أنه يمتلك المفتاح الخاص المرتبط. بعد ذلك يمكن للخادم إعداد البيئة للعميل.
التجزئة
آخر طريقة لتلاعب البيانات التي تستفيد منها SSH هي التجزئة التشفيرية. وظائف التجزئة التشفيرية هي طرق لإنشاء “توقيع” موجز أو ملخص لمجموعة من المعلومات. السمات التي تميزها الرئيسية هي أنها لا تقصد أبدًا أن تُقلب، وأنه من المستحيل تقريبا التأثير عليها بشكل قابل للتنبؤ، وأنها فريدة عمليا.
باستخدام نفس دالة التجزئة والرسالة يجب أن ينتج نفس التجزئة؛ تعديل أي جزء من البيانات يجب أن ينتج تجزئة مختلفة تمامًا. يجب على المستخدم ألا يكون قادرًا على إنتاج الرسالة الأصلية من التجزئة المعطاة، ولكنه يجب أن يكون قادرًا على معرفة ما إذا كانت الرسالة المعطاة أنتجت التجزئة المعطاة.
نظرًا لهذه الخصائص، يُستخدم التجزئات بشكل رئيسي لأغراض سلامة البيانات وللتحقق من أصالة التواصل. الاستخدام الرئيسي في SSH هو مع HMAC، أو رموز المصادقة على الرسائل القائمة على التجزئة. يُستخدم هذه لضمان سلامة نص الرسالة التي تم استلامها وعدم تعديلها.
كجزء من التفاوض عن التشفير المتماثل المذكور مسبقًا، يتم اختيار خوارزمية رمز المصادقة على الرسالة (MAC). تُختار الخوارزمية عن طريق العمل عبر قائمة الخيارات المقبولة لـ MAC للعميل. سيتم استخدام أول واحد في هذه القائمة الذي يدعمه الخادم.
يجب أن تحتوي كل رسالة تم إرسالها بعد التفاوض عن التشفير على MAC بحيث يمكن للطرف الآخر التحقق من سلامة الحزمة. يتم حساب MAC من السر المشترك المتماثل، ورقم تسلسل الحزمة للرسالة، ومحتوى الرسالة الفعلي.
يتم إرسال MAC نفسه خارج منطقة التشفير المتماثلة كجزء نهائي من الباكت. عادةً ما يوصي الباحثون بهذه الطريقة لتشفير البيانات أولاً ثم حساب MAC.
فهم كيفية عمل SSH
ربما لديك بالفعل فهم أساسي لكيفية عمل SSH. يستخدم بروتوكول SSH نموذج العميل والخادم للمصادقة على طرفين وتشفير البيانات بينهما.
يستمع مكون الخادم على منفذ معين للاتصالات. وهو مسؤول عن التفاوض على الاتصال الآمن، والمصادقة على الطرف الذي يقوم بالاتصال، وإطلاق البيئة الصحيحة إذا تم قبول بيانات الاعتماد.
العميل مسؤول عن بدء مصافحة بروتوكول التحكم في النقل (TCP) الأولية مع الخادم، والتفاوض على الاتصال الآمن، والتحقق من أن هوية الخادم تتطابق مع المعلومات المسجلة مسبقًا، وتقديم بيانات الاعتماد للمصادقة.
تُنشأ جلسة SSH في مرحلتين منفصلتين. الأولى هي الاتفاق على وإنشاء التشفير لحماية التواصل المستقبلي. المرحلة الثانية هي مصادقة المستخدم واكتشاف ما إذا كان يجب منح الوصول إلى الخادم أم لا.
تفاوض التشفير للجلسة
عندما يتم إنشاء اتصال TCP من قبل العميل، يستجيب الخادم باصدارات البروتوكول التي يدعمها. إذا كان العميل قادرًا على مطابقة إحدى إصدارات البروتوكول المقبولة، يستمر الاتصال. يوفر الخادم أيضًا مفتاح الاستضافة العام الخاص به، الذي يمكن للعميل استخدامه للتحقق مما إذا كان هذا هو المضيف المقصود به.
في هذه المرحلة، يتفاوض الطرفان على مفتاح جلسة باستخدام إصدار من شيء يُسمى خوارزمية ديفي-هيلمان. تجعل هذه الخوارزمية (ومتغيراتها) من الممكن لكل طرف دمج بياناته الخاصة مع البيانات العامة من النظام الآخر للوصول إلى مفتاح جلسة سري متطابق.
سيتم استخدام مفتاح الجلسة لتشفير الجلسة بأكملها. أزواج مفاتيح العامة والخاصة المستخدمة لهذا الجزء من الإجراء مفصولة تمامًا عن مفاتيح SSH المستخدمة للمصادقة على العميل للخادم.
أساس هذا الإجراء لخوارزمية ديفي-هيلمان الكلاسيكية هو:
- يتفق الطرفان على عدد أولي كبير، والذي سيكون كقيمة بذرية.
- يتفق الطرفان على مولد تشفير (عادة AES)، الذي سيتم استخدامه لتلاعب القيم بطريقة محددة مسبقًا.
- على نحو مستقل، يقوم كل طرف بابتكار عدد أولي آخر يُحفظ سرًا عن الطرف الآخر. يتم استخدام هذا الرقم كمفتاح خاص لهذا التفاعل (مختلف عن المفتاح الخاص بـ SSH المستخدم للمصادقة).
- تُستخدم المفتاح الخاص المُولَّد ومُنشئ التشفير والعدد الأولي المشترك لتوليد مفتاح عام يتم استقاه من المفتاح الخاص، ولكن يمكن مشاركته مع الطرف الآخر.
- ثم يتبادل كل من المشاركين مفاتيحهم العامة المُولَّدة.
- تستخدم الكيان المُستقبِل مفتاحها الخاص، ومفتاح الطرف الآخر العام، والعدد الأولي المشترك الأصلي لحساب مفتاح سري مشترك. على الرغم من أن ذلك يُحسب بشكل مُستقل من قِبَل كل طرف، باستخدام مفاتيح خاصة وعامة معاكسة، إلا أنه سينتج في المفتاح السري المشترك نفسه.
- يُستخدم المفتاح المشترك بعد ذلك لتشفير كل الاتصالات التي تتبع.
يُتيح هذا العملية لكل طرف المشاركة بالتساوي في توليد المفتاح السري المشترك، مما لا يسمح لأحد بالتحكم في السر. كما أنها تنجز المهمة في توليد مفتاح سري متطابق من دون الحاجة إلى إرسال تلك المعلومات عبر قنوات غير آمنة. يُسمى التشفير بالمفتاح المشترك الذي يُستخدم لبقية الاتصال بروتوكول الحزم الثنائية.
السر المُولَّد هو مفتاح تناظري، مما يعني أنه يمكن استخدام نفس المفتاح المستخدم لتشفير رسالة لفك تشفيرها من الجانب الآخر. الغرض من ذلك هو لف كل الاتصالات اللاحقة في نفق مشفر لا يمكن فك تشفيره من قِبَل الأشخاص الخارجيين.
بعد تأسيس تشفير الجلسة، يبدأ مرحلة مصادقة المستخدم.
توثيق وصول المستخدم إلى الخادم
الخطوة التالية تتضمن توثيق المستخدم واتخاذ قرار بشأن الوصول. هناك عدة طرق يمكن استخدامها للتوثيق، بناءً على ما يقبله الخادم.
الطريقة العامة هي توثيق كلمة المرور، وهو عندما يطلب الخادم من العميل كلمة مرور الحساب الذي يحاول تسجيل الدخول به. تُرسَل كلمة المرور عبر التشفير المتفاوَض، لذا فهي آمنة من الأطراف الخارجية.
على الرغم من أن كلمة المرور ستكون مشفرة، إلا أن هذه الطريقة ليست موصى بها عمومًا بسبب القيود على تعقيد كلمة المرور. يمكن للنصوص الآلية كسر كلمات المرور ذات الأطوال العادية بسهولة مقارنة بطرق التوثيق الأخرى.
البديل الأكثر شيوعًا والموصى به هو استخدام أزواج مفاتيح SSH. أزواج مفاتيح SSH هي مفاتيح غير متماثلة، مما يعني أن المفاتيح المرتبطة بعضها بالبعض تؤدي وظائف مختلفة.
تُستخدم المفتاح العام لتشفير البيانات التي لا يمكن فك تشفيرها إلا بالمفتاح الخاص. يمكن مشاركة المفتاح العام بحرية، لأنه على الرغم من أنه يمكنه التشفير للمفتاح الخاص، إلا أنه ليس هناك طريقة لاستنتاج المفتاح الخاص من المفتاح العام.
يبدأ التوثيق باستخدام أزواج مفاتيح SSH بعد أن يتم إنشاء التشفير المتناظر كما هو موضح في القسم السابق. يحدث الإجراء على النحو التالي:
- يبدأ العميل بإرسال معرّف لزوج المفاتيح الذي يرغب في المصادقة عليه إلى الخادم.
- الخادم يتحقق من ملف authorized_keys للحساب الذي يحاول العميل تسجيل الدخول إليه للعثور على معرف المفتاح.
- إذا تم العثور على مفتاح عام يطابق المعرف في الملف، يقوم الخادم بإنشاء رقم عشوائي واستخدام المفتاح العام لتشفير الرقم.
- يُرسل الخادم هذه الرسالة المشفرة إلى العميل.
- إذا كان لدى العميل فعلا المفتاح الخاص المرتبط، فسيكون قادرا على فك تشفير الرسالة باستخدام ذلك المفتاح، مكشوفا الرقم الأصلي.
- يقوم العميل بدمج الرقم المفكوك مع المفتاح المشترك للجلسة الذي يُستخدم لتشفير الاتصال، ويحسب القيمة الهاشية لـ التجزئة MD5 لهذه القيمة. تعد MD5 خوارزمية للتجزئة الرسالية تستخدم وظيفة التجزئة لتوليد قيمة تجزئة تبلغ 128 بتًا.
- ثم يرسل العميل هذه التجزئة MD5 إلى الخادم كإجابة على رسالة الرقم المشفر.
- يستخدم الخادم نفس المفتاح المشترك للجلسة والرقم الأصلي الذي أرسله إلى العميل لحساب قيمة MD5 بنفسه. يقارن حسابه الخاص بالقيمة التي أرسلها العميل. إذا تطابقت هاتان القيمتان، يثبت أن العميل كان بحوزته المفتاح الخاص ويتم تصديق العميل.
باختصار، تسمح للخادم بتشفير الرسائل إلى العميل باستخدام المفتاح العام. يمكن للعميل بعد ذلك أن يثبت أنه يمتلك المفتاح الخاص عن طريق فك تشفير الرسالة بشكل صحيح. النوعان من التشفير المستخدمان (السري المشترك التناظري والمفاتيح العامة/الخاصة غير المتماثلة) يمكن لكل منهما الاستفادة من قوته الخاصة في هذا النموذج.
الاستنتاج
يمكن أن يساعدك تعلم خطوات التفاوض على الاتصال وطبقات التشفير التي تعمل في بروتوكول SSH على فهم ما يحدث عند تسجيل الدخول إلى خادم عن بُعد بشكل أفضل. الآن يمكنك التعرف على العلاقة بين المكونات والخوارزميات المختلفة، وفهم كيفية تكامل كل هذه القطع معًا. لمعرفة المزيد عن SSH، تفضل بالاطلاع على الأدلة التالية:
- كيفية تكوين المصادقة على أساس مفتاح SSH على خادم Linux
- كيفية استخدام SSH للاتصال بخادم عن بعد
- كيفية إعداد مفاتيح SSH لأنظمة التشغيل المختلفة
- أساسيات SSH: العمل مع خوادم وعملاء SSH والمفاتيح