ما هو المجموع الاختباري (Checksum)؟
المجموع الاختباري (checksum) قيمة قصيرة تُحسب من كتلة بيانات، مثل ملف أو حزمة شبكة، وتُخزَّن أو تُرسل معها. إعادة حسابها لاحقًا ومقارنة القيمتين تُظهر ما إذا كانت البيانات قد تغيّرت بسبب تلف أو خطأ في النقل.
آخر تحديث 24 سبتمبر 2026
| المجموع الاختباري | المرسل | الواصل | النتيجة |
|---|---|---|---|
| مجموع البايتات (باقي القسمة على 256) | 9A | 9A | تطابق |
| CRC-32 | A0E3CD31 | A0E3CD31 | تطابق |
اقلب بتًا واحدًا وسيتغير المجموعان الاختباريان كلاهما. بدّل حرفين وستبقى البايتات كلها موجودة، فيبقى مجموعها كما هو: وحده CRC-32، الذي يعتمد على الترتيب، يلاحظ الفرق.
تنشر توزيعات لينكس مثل Ubuntu و Debian ملفًا اسمه SHA256SUMS بجوار صور التثبيت الخاصة بها. كل سطر فيه يحمل نصًا من 64 حرفًا واسم ملف. بعد انتهاء التنزيل، تشغّل أمرًا واحدًا على الملف الذي استلمته. إن طبع النص نفسه، فقد وصلت كل مليارات البايتات فيه سليمة. وإن انقلب بت واحد في الطريق، يخرج النص مختلفًا تمامًا.
ذلك النص هو المجموع الاختباري (checksum): ملخص صغير يتغيّر عندما تتغيّر البيانات.
كيف يعمل المجموع الاختباري خطوة بخطوة
- يشغّل المرسِل خوارزمية مجموع اختباري على البيانات، بايتًا بعد بايت، ويحصل على نتيجة قصيرة.
- تنتقل النتيجة أو تُخزَّن مع البيانات: في ترويسة حزمة الشبكة، أو داخل ملف ZIP بجوار كل ملف مضغوط، أو في صفحة التنزيل.
- يشغّل المستقبِل الخوارزمية نفسها على البيانات التي وصلته فعلًا.
- تُقارن النتيجتان. إن تساوتا، فالبيانات على الأرجح لم تتغيّر. وإن اختلفتا، فقد تلفت البيانات، ويرفضها المستقبِل أو يطلبها مرة أخرى أو يعرض خطأ checksum.
المجموع الاختباري يكشف التلف فقط، ولا يستطيع أن يحدد أي بايت تغيّر ولا أن يصلحه. الإصلاح يحتاج إلى رمز لتصحيح الأخطاء، مثل رموز Reed-Solomon في الأقراص المدمجة ورموز QR.
أبسط مجموع اختباري يجمع كل البايتات ويحتفظ بآخر 8 بتات من المجموع. شغّل هذا لترى أين تنجح هذه الفكرة وأين تفشل:
original sum= 78 crc32=a1628836
flipped sum= 80 crc32=a597580b
swapped sum= 78 crc32=59dbf74b
تغيير حرف يغيّر المجموع. أما تبديل موضعي حرفين فلا يغيّره، لأن الجمع لا يهتم بالترتيب، فيوافق مجموع البايتات على دفع 10 بدل 100. يتعامل CRC-32 (فحص التكرار الدوري، cyclic redundancy check) مع البيانات على أنها رقم ثنائي واحد طويل ويقسمها على كثيرة حدود ثابتة من 33 بتًا، وباقي القسمة ذو الـ 32 بتًا يعتمد على موضع كل بت، فيُكشف التبديل. العرض التوضيحي أعلاه يتيح لك تجربة ذلك على نصك الخاص. ويكشف CRC-32 كل دفعة أخطاء متتالية يصل طولها إلى 32 بتًا.
أشهر خوارزميات المجموع الاختباري
| الخوارزمية | الحجم | أين تصادفها |
|---|---|---|
| بت التماثل (parity bit) | 1 بت | الاتصالات التسلسلية، وذاكرة التماثل |
| رقم Luhn للتحقق | رقم واحد | أرقام بطاقات الائتمان، وأرقام IMEI |
| Internet checksum | 16 بتًا | ترويسات IPv4 و TCP و UDP |
| Adler-32 | 32 بتًا | صيغة الضغط zlib |
| CRC-32 | 32 بتًا | ZIP و gzip و PNG وإطارات Ethernet |
| MD5 | 128 بتًا | صفحات التنزيل القديمة، وأدوات البحث عن الملفات المكررة |
| SHA-256 | 256 بتًا | تنزيلات البرامج، وصور لينكس، وبيتكوين |
الخمس الأولى تكشف الحوادث العرضية لا المهاجمين. فمن يعدّل ملفًا يستطيع ضبط بضعة بايتات حتى يتطابق CRC-32 الخاص به مرة أخرى. أما MD5 و SHA-256 فدوال hash تشفيرية، صُممت بحيث يكون العثور على مُدخلين لهما المُخرج نفسه غير عملي. وقد كُسرت MD5 منذ ذلك الحين (نُشرت تصادمات لها عام 2004)، وكذلك SHA-1 (عام 2017)، لذا تستخدم التنزيلات الحساسة أمنيًا SHA-256 أو ما هو أقوى. لكن MD5 لا تزال تكشف التلف العرضي بكفاءة تامة.
كيف تتحقق من المجموع الاختباري
على حاسوبك، لكل نظام تشغيل أمر مدمج:
# Windows (PowerShell)
Get-FileHash ubuntu.iso -Algorithm SHA256
# macOS
shasum -a 256 ubuntu.iso
# Linux
sha256sum ubuntu.iso
قارن المخرجات بالقيمة الموجودة في صفحة التنزيل الرسمية، ولا يهم إن كانت الحروف كبيرة أو صغيرة. وفي بايثون تقوم hashlib بالفحص نفسه، فتقرأ الملف على دفعات حتى لا يلزم أن يتسع ملف حجمه 6 GB في الذاكرة:
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OK
غيّر hello world إلى hello World وشغّل الكود مرة أخرى: يتغيّر كل حرف في المجموع الاختباري، ويقول السطر الأخير Checksum mismatch.
ما هو خطأ checksum؟
خطأ checksum يعني أن الفحص فشل: القيمة المحسوبة من البيانات التي لديك لا تطابق القيمة المخزنة أو المرسلة معها. فإما أن البيانات تغيّرت، وإما أن المجموع الاختباري المخزّن نفسه تلف. وتعتمد الرسالة والحل على مكان ظهوره.
خطأ CMOS checksum أو BIOS checksum عند التشغيل
يحتفظ البرنامج الثابت في الحاسوب الشخصي (BIOS أو UEFI) بإعداداته، مثل ترتيب الإقلاع والساعة، في ذاكرة صغيرة تبقيها حية بطارية دائرية، عادةً من نوع CR2032، حين يكون الحاسوب مفصولًا عن الكهرباء. ويُخزَّن بجوار هذه الإعدادات مجموع اختباري لها. في كل تشغيل يعيد البرنامج الثابت حسابه، وإن اختلفت القيمتان يعرض رسالة مثل CMOS Checksum Error - Defaults Loaded ويعود إلى إعدادات المصنع.
السبب المعتاد بطارية ضعيفة أو فارغة، خاصة إذا كانت الساعة تُعاد ضبطها أيضًا. وانقطاع الكهرباء أثناء حفظ الإعدادات، أو مسح CMOS بواسطة jumper، له الأثر نفسه. لإصلاحه:
- افتح شاشة الإعدادات (عادةً بالضغط على Delete أو F2 أثناء تشغيل الحاسوب)، واضبط التاريخ والوقت وأي إعدادات غيّرتها، ثم احفظ واخرج (غالبًا بـ F10). إن لم تعد الرسالة، فقد كان حدثًا لمرة واحدة.
- إن عادت بعد كل تشغيل من حالة الإطفاء الكامل، فأطفئ الحاسوب وافصله عن الكهرباء واستبدل بطارية CR2032.
- إن ذكرت الرسالة البرنامج الثابت نفسه، مثل
BIOS ROM checksum errorأوMain BIOS checksum error، فصورة البرنامج الثابت تالفة. اللوحات الأم التي فيها شريحة BIOS احتياطية تستعيدها تلقائيًا، وفي غيرها استخدم ميزة استعادة BIOS في اللوحة أو أعد تثبيت البرنامج الثابت من موقع الشركة المصنعة، دون قطع الكهرباء أثناء التحديث.
عدم تطابق checksum بعد التنزيل
قيمة SHA-256 لملفك لا تطابق القيمة الموجودة في صفحة التنزيل. قد يكون الملف ناقصًا أو تالفًا (اتصال انقطع، أو قرص ممتلئ)، وقد تكون تقارنه بالمجموع الاختباري لملف آخر (إصدار آخر أو معمارية معالج أخرى)، وقد تكون تقارن بين خوارزميتين مختلفتين: قيمة MD5 طولها 32 حرفًا ست عشريًا، وقيمة SHA-256 طولها 64. ونادرًا ما يكون الملف قد عُبث به.
تحقق من الخوارزمية واسم الملف، ثم نزّل الملف مرة أخرى من الموقع الرسمي. إن ظلت نسخة جديدة من المصدر الرسمي غير مطابقة، فلا تشغّلها. مديرو الحزم يقومون بهذا الفحص نيابة عنك: يتوقف pip برسالة THESE PACKAGES DO NOT MATCH THE HASHES حين تختلف حزمة منزّلة عن قيمة الـ hash المثبّتة لها.
خطأ checksum في أرشيف ZIP أو RAR أو 7z
تخزّن صيغ الأرشيف قيمة CRC-32 للمحتوى الأصلي لكل ملف. عند الاستخراج تعيد الأداة حسابها، فيُبلغ WinRAR عن عدم التطابق برسالة Checksum error، ويُبلغ 7-Zip برسالة CRC Failed. وفي الأرشيف المشفّر تُنتج كلمة المرور الخاطئة الرسالة نفسها، لأن فك التشفير بكلمة مرور خاطئة يُنتج بيانات عشوائية. نزّل الأرشيف مرة أخرى، وتأكد من وجود كل أجزاء الأرشيف المقسّم (.part1.rar و.part2.rar) ومن أنها من الرفع نفسه، وأعد كتابة كلمة المرور. يعمل أمر Repair archive في WinRAR على أفضل وجه مع الأرشيفات المُنشأة بسجل استعادة (recovery record)، وخيار "Keep broken files" يحفظ ما استُخرج بشكل صحيح.
أخطاء checksum في الألعاب وأدوات الشبكات
تقارن الألعاب المجاميع الاختبارية لملفاتها، فالتحديث الجزئي أو الملف المعدّل يفشل في الفحص. في Steam، يعيد خيار "Verify integrity of game files" تنزيل كل ملف لا يطابق مجموعه الاختباري. وفي Wireshark، تحذيرات checksum على الحزم التي يرسلها حاسوبك أنت ليست عادةً أخطاء حقيقية: فبطاقة الشبكة تملأ المجموع الاختباري بعد أن يكون Wireshark قد التقط الحزمة بالفعل.
مفاهيم خاطئة شائعة
- "تطابق المجموع الاختباري يثبت أن الملف آمن." إنه يثبت أن الملف يطابق القيمة المنشورة. إن تحكّم مهاجم في الموقع، فيمكنه تغيير الاثنين، ولهذا توقّع المشاريع أيضًا ملفات المجاميع الاختبارية بمفتاح.
- "المجموع الاختباري يستطيع إصلاح ملف تالف." إنه يكشف التلف فقط. والحل هو الحصول على نسخة سليمة.
- "الـ checksum والـ hash شيئان مختلفان." الـ checksum يصف المهمة، ودالة الـ hash مثل SHA-256 أداة من الأدوات التي يمكنها القيام بها.
إلى أين بعد ذلك
احسب قيم MD5 و SHA-1 و SHA-256 لأي نص في مولّد الـ hash. تعمل المجاميع الاختبارية على البيانات الخام، لذا تشرح صفحتا ما هو البايت وما هو البت ما الذي يُجمع فعلًا. وتستخدم قاعدة البيانات مجاميع اختبارية للصفحات لكشف تلف القرص، ويُظهر التصور المرئي لجدول التجزئة استخدامًا آخر لقيمة قصيرة تُحسب من البيانات.
الأسئلة الشائعة
هل SHA-256 مجموع اختباري (checksum)؟
كيف أصلح خطأ checksum؟
ما الذي يسبب خطأ checksum؟
لماذا نحتاج إلى المجموع الاختباري؟
كيف أُنشئ مجموعًا اختباريًا لملف؟
sha256sum file على لينكس، أو shasum -a 256 file على macOS، أو Get-FileHash file في PowerShell على ويندوز. وفي بايثون يعطي hashlib.sha256(data).hexdigest() مجموعًا اختباريًا من نوع SHA-256، ويعطي zlib.crc32(data) مجموعًا من نوع CRC-32.