خطوات الاستخدام
الخطوة 1: فهم مفهوم التجزئة التشفيرية (Hash). التجزئة هي دالة رياضية أحادية الاتجاه تحول أي كمية من البيانات إلى سلسلة ثابتة الطول من الأحرف (مثلاً 64 حرفاً لخوارزمية SHA-256). تعمل الدالة كبصمة رقمية فريدة للملف؛ أي تغيير في الملف ولو بحرف واحد ينتج عنه تجزئة مختلفة تماماً. في سياق التحقق من سلامة البرنامج الثابت (Firmware)، يتم حساب تجزئة للنسخة الأصلية الموثوقة (متوقع hash) وتخزينها بأمان. عند التحقق، تحسب تجزئة للنسخة الحالية (فعلي hash) وتقارن مع المتوقعة.
الخطوة 2: إدخال التجزئة المتوقعة (Expected Hash). يمثل هذا القيمة الصحيحة التي تم الحصول عليها من مصدر موثوق (مثل موقع الشركة المصنعة، أو عند إنشاء البرنامج الثابت). يجب أن تكون هذه القيمة مأخوذة من بيئة آمنة لضمان عدم التلاعب بها. يمكن أن تكون التجزئة من نوع MD5، SHA-1، SHA-256، أو SHA-3 حسب قوة الأمان المطلوبة. يفضل استخدام SHA-256 أو أعلى لتجنب تعارضات التجزئة.
الخطوة 3: إدخال التجزئة الفعلية (Actual Hash). هذه هي التجزئة المحسوبة من ملف البرنامج الثابت الذي تريد التحقق منه. يمكن الحصول عليها باستخدام أدوات مثل `sha256sum` في Linux، أو `certutil` في Windows، أو بواسطة لغات البرمجة. يجب التأكد من حساب التجزئة على الملف نفسه دون أي تعديلات. في هذه الآلة الحاسبة، تقوم بإدخال التجزئة الفعلية يدوياً أو يمكن رفع الملف لحسابها تلقائياً (في إصدارات متقدمة).
الخطوة 4: المقارنة بين التجزئتين. تتحقق الحاسبة أولًا أن القيمتان مكونتان من أرقام سداسية عشر (hex) فقط، وأن طول كلٍّ منهما يطابق طول مختلَم معروف (32 لـ MD5، 40 لـ SHA-1، 56 لـ SHA-224، 64 لـ SHA-256، 96 لـ SHA-384، 128 لـ SHA-512)، فترفض النصوص التي ليست تجزئات. ثم تقارن نص التجزئة المتوقعة مع النص الفعلي حرفيًا (مقارنة حساسة لحالة الأحرف، مع تجاهل المسافات قبل وبعد). إذا تطابقا تمامًا يكون البرنامج الثابت سليماً. وإن اختلف الطولان تُصدر حكم 'algorithm mismatch' لأن المصدر حسب خوارزمية غير التي حسبتها. أما إذا تساوى الطول واختلفت القيمة فتحكم 'integrity breach'، وتنبه في التفاصيل عند 'Case-only difference' أن الفرق هو حالة الحروف فقط. في حالة الاختلاف الحقيقي نزّل نسخة جديدة من المصدر الرسمي وكرر العملية.
الخطوة 5: تفسير النتيجة. النتيجة هي 'مطابق' (Integrity Verified) أو 'غير مطابق' (Integrity Breach). في حالة عدم المطابقة، قد تكون الأسباب: ملف تالف أثناء النقل، هجوم تعديل (Malware)، أو تحديث غير صحيح. يجب عدم استخدام البرنامج الثابت غير المطابق لأن تشغيله قد يؤدي إلى أعطال جهاز أو ثغرات أمنية. في الأنظمة الحرجة (كأجهزة التوجيه، IoT، الأجهزة الطبية)، يعتبر التحقق من التجزئة خطوة أساسية قبل التثبيت.
أمثلة محلولة
تطبيقات عملية على التحقق من سلامة البرنامج الثابت بخطوات الحل كاملة.
الحل
نعم، التجزئتان متطابقتان. هذا يعني أن ملف البرنامج الثابت الذي قمت بتحميله هو نفسه الأصلي ولم يتعرض لأي تلاعب أو تلف أثناء النقل. يمكنك الآن تثبيت التحديث بأمان. إذا كان هناك أي اختلاف ولو في حرف واحد، فإن الجهاز سيرفض التثبيت أو قد يعمل بشكل غير صحيح. في هذا المثال، تم استخدام خوارزمية SHA-256 والتي تنتج تجزئة بطول 64 حرفاً سداسياً عشراً (Hex). يجب التأكد من أن التجزئتين لهما نفس الطول ونوع الخوارزمية. لاحظ أن التجزئة حساسة لحالة الأحرف، فالحرف الصغير 'a' يختلف عن 'A'.
الحل
التجزئتان غير متطابقتين؛ الفرق في الحرف الأخير (08 vs 09). يعني هذا أن الملف الذي بحوزة المستخدم يختلف عن الملف الأصلي. قد يكون سبب الاختلاف: خطأ في النقل (مثل فقدان بت أثناء التحميل)، أو تلف في قرص التخزين، أو هجوم تعديل. لا ينبغي أبداً تثبيت هذا الملف. الخطوة التالية هي تنزيل الملف مرة أخرى من مصدر موثوق، وإعادة حساب التجزئة. في حالة استمرار عدم التطابق، قد يكون الملف الأصلي معطوباً، لذا يجب إعادة بناءه من الكود المصدري. في الأنظمة الحرجة، قد يتطلب الأمر تحققاً إضافياً كاستخدام التوقيع الرقمي (Digital Signature) بالإضافة إلى التجزئة. هذا المثال يوضح أهمية التحقق من كل حرف، لأن التغيير الطفيف في التجزئة يعكس تغييراً في الملف.
أمثلة محسوبة
قيم مُدخَلة ونتيجة محسوبة فعليًا بواسطة التحقق من سلامة البرنامج الثابت.
مرجع — تجزئة SHA-256 متطابقة: سلامة مؤكدة
- قيمة التجزئة المتوقعة
- 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
- قيمة التجزئة الفعلية
- 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
مرجع — اختلاف حرف واحد: اختراق سلامة
- قيمة التجزئة المتوقعة
- 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08
- قيمة التجزئة الفعلية
- 9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a09