أدوات المطورين · SHA حاسبة التجزئة
الشهادة وبصمات الأصابع SSH: كيف تحدد SHA-256 المفتاح العام
· خلفية
شا-256 التشفير حماية
بصمة الإصبع عبارة عن تجزئة لشهادة أو مفتاح، وهي قصيرة بما يكفي لقراءتها بصوت عالٍ. يشرح هذا المنشور كيفية حساب بصمات الأصابع TLS وSSH، ولماذا يتم استبدال بصمات الأصابع SHA-1، وما تثبته المطابقة.
يطالبك مفتاح المضيف بقبوله دائمًا - ما يطلب منك السطر SHA256: مقارنته
عند الاتصال بخادم عبر SSH للمرة الأولى، تظهر لك رسالة تسألك عما إذا كنت تريد قبول مفتاح المضيف أم لا. تعرض المطالبة بصمة الإصبع: `SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8` أو ما شابه ذلك. تعد بصمة الإصبع هذه بمثابة تجزئة للمفتاح العام للخادم. يُطلب منك التحقق خارج النطاق (خارج بروتوكول SSH) من أنك تعرفت على هذا المفتاح. تعرض المطالبة أيضًا عادةً نوع المفتاح (RSA، ED25519، ECDSA) وتنسيق بصمة الإصبع. إذا كنت قد شاهدت بصمة هذا المفتاح من قبل من خلال قناة موثوقة، فيمكنك بكل ثقة كتابة "نعم". إذا لم يكن الأمر كذلك، فإن القبول يعني الثقة في الشبكة لتسليم المفتاح الصحيح.
بصمة الإصبع هي ببساطة ناتج دالة تجزئة التشفير المطبقة على المفتاح المشفر. بالنسبة إلى SSH، يتم ترميز المفتاح على هيئة كائن ثنائي ثنائي ثنائي (تنسيق سلك OpenSSH)، ويتم حساب التجزئة فوق تلك النقطة. بصمة الإصبع أقصر من المفتاح الكامل، مما يجعلها قابلة للقراءة والكتابة. ستنتج بصمة الإصبع نفسها دائمًا عن نفس المفتاح، لذا يمكنك مقارنة بصمة الإصبع المنشورة في أماكن أو قنوات متعددة.
بصمة الإصبع تساوي تجزئة التشفير — الشهادة DER أو النقطة الكبيرة للمفتاح العام كمدخل
يتم ترميز مفاتيح المضيف SSH والشهادات TLS بشكل مختلف، ولكن مبدأ أخذ البصمات متطابق. بالنسبة إلى SSH، يتم حساب بصمة الإصبع من مادة المفتاح العام. بالنسبة لشهادات TLS، يتم حساب البصمة من الشهادة بأكملها (بما في ذلك جهة الإصدار وتواريخ الصلاحية والحقول الأخرى). عند الاتصال بخادم ويب، لا يعرض المتصفح بصمة الشهادة لك، لأن TLS يستخدم نموذج ثقة مختلفًا: يثق المتصفح في مجموعة من المراجع المصدقة (CAs) المثبتة مسبقًا، وتضمن هذه المراجع المصدقة الشهادة. SSH لا يستخدم أي مراجع مصدقة مثبتة مسبقًا؛ وبدلاً من ذلك، فإنك تثق بمفاتيح محددة وتخزنها محليًا في `~/.ssh/known_hosts`.
نظرًا لأن البصمة تتضمن وحدات بايت الشهادة بالكامل لـ TLS، فإن تغيير تواريخ الصلاحية دون إعادة التوقيع يؤدي إلى إنشاء بصمة إصبع مختلفة. بالنسبة إلى SSH، تكون بصمة الإصبع خاصة بالمفتاح العام فقط، وبالتالي تكون بصمة الإصبع مستقرة طالما لم يتم تغيير المفتاح.
توضح هذه الآلة الحاسبة الطولين SHA-1 وSHA-256؛ تتطلب توصيات سياسة بصمات الأصابع مصادر البروتوكول
تاريخيًا، تم عرض بصمات الأصابع SSH بالنظام الست عشري MD5. MD5 معطوب من الناحية التشفيرية والاصطدامات عملية. انتقل مجتمع الأمان إلى بصمات الأصابع SHA-256 كإعداد افتراضي. ربما لا يزال بإمكانك رؤية كلا التنسيقين معروضين بواسطة عميل SSH: `SHA256: base64` و`MD5: hex`. بصمة الإصبع SHA-256 هي البصمة التي يمكن الاعتماد عليها للتحقق من الهوية. إذا رأيت كليهما، فقارن إصدار SHA-256 ببصمة الإصبع من مصدر موثوق به (موقع الويب الخاص بالخادم، أو بريد إلكتروني موقع من المسؤول، أو موقع wiki داخلي). تعتبر بصمة الإصبع MD5 أقل موثوقية بسبب وجود تصادمات MD5.
يعد التغيير في تنسيق بصمة الإصبع علامة واضحة على انتقال التشفير. أظهرت إصدارات OpenSSH الأقدم MD5 فقط. تعرض الإصدارات الحديثة SHA-256 بشكل افتراضي. يعرض الأمر `ssh-keygen -l -f /path/to/key` بصمة المفتاح بالتنسيق الافتراضي لإصدار ssh-keygen الخاص بك؛ يمكنك فرض تنسيق معين باستخدام العلامة `-E` (على سبيل المثال، `-E sha256` أو `-E md5`).
SSH's base64 SHA256: التنسيق - تغيير الترميز الذي جعل بصمات الأصابع أقصر من الست عشري
تستخدم بصمات الأصابع SSH تنسيقًا مختلفًا: فهي مسبوقة باسم الخوارزمية ونقطتين، على سبيل المثال، `SHA256:base64string`. ويختلف هذا عن تنسيق تكامل الموارد الفرعية (SRI)، الذي يستخدم واصلة ويتضمن base64 القياسي فقط. يتضمن تنسيق SSH تسمية تجعل من غير الواضح أي الخوارزمية أنتجت الملخص. عندما ترى بصمة الإصبع في إخراج SSH، يتم عرض الخوارزمية دائمًا. عندما ترى سمة التكامل SRI، يتم ترميز الخوارزمية كبادئة بواصلة.
إن إخراج Base64 من حاسبة التجزئة ToolAcre SHA هو النموذج القياسي؛ لمطابقة بصمات الأصابع SSH، أضف `SHA256: ` (اسم الخوارزمية والنقطتين والمسافة) قبل ذلك. النموذج السداسي من الآلة الحاسبة ليس هو النموذج الذي يعرضه SSH، على الرغم من أنه يمثل نفس الملخص وهو صالح أيضًا لأغراض التحقق.
ما تثبته المطابقة - أنك تحتفظ بنفس وحدات بايت المفتاح التي نشرها الجانب الآخر، ولا شيء يتعلق بمالك المفتاح دون فحص خارج النطاق
تثبت مطابقة بصمة الإصبع شيئين: أولاً، أنك تحتفظ بنفس وحدات بايت المفتاح التي نشرها الجانب الآخر، وثانيًا، أنه لم يتم تغيير المفتاح أو بصمة الإصبع منذ أن تم حساب الملخص. ولا تثبت هوية مالك المفتاح أو تسمح بأي إجراء محدد. يعد التحقق من بصمة الإصبع خارج النطاق شرطًا ضروريًا ولكنه ليس كافيًا للثقة في المفتاح. ويجب عليك أيضًا التحقق من أن الشخص الذي نشر البصمة هو من يدعي.
من الناحية العملية، إذا قام المسؤول بنشر بصمة الخادم SSH على شبكة الإنترانت الخاصة بالشركة أو في بريد إلكتروني موقع، فيمكنك التحقق من تطابقها مع المطالبة التي تتلقاها عند الاتصال. إذا لم تتطابق بصمة الإصبع، فيمكنك رفض الاتصال بثقة لأن شخصًا ما يعترض حركة المرور الخاصة بك أو لأن مفتاح الخادم قد تغير. إذا تطابقت بصمة الإصبع، فاعلم أن لديك المفتاح الصحيح. ما إذا كان هذا المفتاح ينتمي إلى الخادم الصحيح هو سؤال منفصل - سؤال يمكنك الإجابة عليه عن طريق التحقق من قناة النشر (هل تبدو صفحة الإنترانت شرعية؟ هل البريد الإلكتروني في الواقع من حساب المسؤول؟).
مثال عملي - التحقق من بصمة الإصبع مقابل بصمة منشورة عبر قناة موثوقة، خطوة بخطوة
تخدم بصمة الشهادة نفس الغرض: فهي تحدد شهادة معينة بشكل فريد. إذا قام خادم TLS بتغيير شهادته (على سبيل المثال، أثناء التجديد)، فإن الشهادة الجديدة لها بصمة مختلفة. يعد تثبيت الشهادة — ترميز بصمة الإصبع أو مجموعة صغيرة من بصمات الأصابع المقبولة في أحد التطبيقات — أسلوبًا أمنيًا لاكتشاف تغييرات الشهادة. إذا قدم الخادم شهادة ببصمة إصبع مختلفة، فسيرفضها التطبيق. وهذا يحمي من إصدار CA المخترق لشهادة احتيالية قد يثق بها المتصفح.
يتطلب تثبيت الشهادة إدارة دقيقة: إذا قام الخادم بتحديث شهادته ولم تتوقع ذلك، فسيرفض تطبيقك الشهادة الجديدة الصالحة. تستخدم العديد من التطبيقات تثبيت المفتاح العام بدلاً من ذلك، مما يؤدي إلى تثبيت المفتاح العام بدلاً من الشهادة بأكملها. يسمح هذا بتجديد الشهادة دون رفضها طالما تم استخدام نفس المفتاح.
مثال عملي: التحقق باستخدام الأدوات المدركة للبروتوكول لأن ToolAcre تجزئات تم لصقها UTF-8 نص، وليس DER أو SSH بايت سلكي
يعد حساب بصمة الإصبع يدويًا للتحقق أمرًا بسيطًا. احفظ الشهادة أو المفتاح في ملف، واستخدم `openssl dgst -sha256 filename` أو `ssh-keygen -l -f filename -E sha256` لعرض بصمة الإصبع، ومقارنتها بالبصمة التي أظهرها لك الخادم. يمكن لآلة حاسبة التجزئة ToolAcre SHA أيضًا حساب الملخص إذا قمت بلصق بايتات المفاتيح، ولكن تذكر أن الآلة الحاسبة تقوم بتجزئة UTF-8 للنص الذي قمت بلصقه، وليس الملفات الثنائية. إذا كان المفتاح بتنسيق PEM (نص برأس `-----BEGIN CERTIFICATE-----` وبايتات مرمزة بـ base64)، فيمكنك لصقه في الآلة الحاسبة. إذا كان بتنسيق DER (ثنائي)، فستحتاج إلى استخدام أدوات سطر الأوامر أو التحويل إلى PEM أولاً.
الحدود مهمة: ToolAcre التجزئة UTF-8 النص الذي تلصقه في واجهة الآلة الحاسبة. ولا يقرأ الملفات من جهازك (كل العمليات الحسابية موجودة في المتصفح، في علامة التبويب الخاصة بك، بدون شبكة). إذا كان لديك ملف مفتاح على القرص، فيمكنك فتحه في محرر نصوص، ونسخ النص ولصقه في الآلة الحاسبة إذا كان بتنسيق PEM. أو يمكنك استخدام أدوات سطر الأوامر مثل `openssl` أو `ssh-keygen` أو `sha256sum` لحساب التجزئة محليًا.
الوجبات الجاهزة: قارن بصمات الأصابع خارج النطاق - تعرض حاسبة التجزئة ToolAcre SHA الشكل الذي تبدو عليه الملخصات SHA-1 وSHA-256 في الأطوال التي تستخدمها بصمات الأصابع
تعرض حاسبة التجزئة ToolAcre SHA الملخصين SHA-1 وSHA-256 لأي إدخال نص. إذا قمت بلصق شهادة بتنسيق PEM أو مفتاح عام SSH، فستقوم الآلة الحاسبة بحساب كلا الملخصين. بالنسبة لمفاتيح SSH، ستقوم الآلة الحاسبة بتجزئة النص الذي قمت بلصقه؛ إذا قمت بلصق تنسيق المفتاح العام القياسي SSH المشفر بالأساس 64، فلن يتطابق الملخص مع بصمة الإصبع SSH لأن SSH يطبق التنسيق الخاص به (تنسيق السلك) قبل التجزئة. للحصول على تطابق مباشر، تحتاج إلى المفتاح بالتنسيق الدقيق الذي يستخدمه SSH داخليًا، وهو ليس تنسيق العرض العام.
بالنسبة لبصمات الشهادة، يكون السلوك مشابهًا: إذا قمت بلصق نص الشهادة المشفر PEM، فستقوم الآلة الحاسبة بتجزئة هذا النص. يتم حساب بصمة الشهادة عبر بايتات الشهادة المشفرة (تنسيق DER)، وليس غلاف النص PEM. البايتات هي نفسها، لكن ترميز النص يختلف. لمطابقة بصمة شهادة من OpenSSL أو عارض شهادات المتصفح، ستحتاج إلى توفير DER بايت، والتي لا يمكن قراءتها بواسطة الإنسان. الغرض من الآلة الحاسبة هو تجزئة النص UTF-8 الذي يمكنك لصقه وقراءته، مما يجعل الحدود واضحة: فهي تقوم بتجزئة إدخال النص، وليس ملفات مفاتيح التشفير في نماذجها الثنائية أو البروتوكولات السلكية القياسية.