الجواب القصير
افتح البصمة والمجموع التحقّقي، وأفلِت عليها الملف الذي نزّلته، والصق المجموع التحقّقي من صفحة التنزيل في المربّع أسفلها. فتستنتج الصفحةُ من أيّ خوارزمية الرقمُ من طوله، وتجيب في جملة.
فإن طابق، فالبايتاتُ على قرصك هي البايتاتُ التي قاسها الناشر. وإن لم يطابق، فنزّل الملف من جديد قبل أن تفتحه. وكلُّ ما دون ذلك هو ما تتركه تلك الجملةُ خارجَها.
ما الرقمُ الذي تحت رابط التنزيل
هو ناتجُ دالّة تجزئة: حسابٌ يقرأ كل بايت في ملف وينتج جواباً قصيراً ثابت الطول. فالملفُّ نفسه يعطي الجواب نفسه دائماً، والملفُّ الذي يختلف ببِتّ واحد يعطي جواباً مختلفاً تماماً — لا جواباً شبهَ مطابق، بل جواباً لا صلة له. وتلك هي الخاصيةُ كلُّها التي يُعتمَد عليها.
ولأن الجواب قصيرٌ والملفَّ ليس كذلك، فالحسابُ يرمي معلومات، وثمّة بالضرورة ملفاتٌ كثيرة تشترك في أي جواب بعينه. وإيجادُ واحد منها عن قصد هو الجزءُ الصعب، ومقدارُ صعوبته هو ما يفصل الخوارزميات أدناه بعضَها عن بعض.
ولا شيء في المجموع التحقّقي سرّي ولا شيء فيه قابلٌ للعكس. بل هو بصمة، منشورةٌ ليتّفق شخصان على أنهما يمسكان الشيء نفسه.
أيَّ خوارزمية تنظر إليها
لست مضطراً إلى الاختيار — فالناشرُ اختار أصلاً، وعملُك أن تحسب الخوارزمية نفسها. وتستطيع معرفة أيَّها من الطول وحده:
- 32 محرفاً ستّ عشرياً — MD5.
- 40 — SHA-1.
- 64 — SHA-256، وهذا ما ستراه أكثر من غيره.
- 96 — SHA-384.
- 128 — SHA-512.
ولا اثنتان منها لهما الطول نفسه، ولهذا تستطيع الأداةُ تحديدَ قيمة ملصوقة دون أن يُقال لها. فالسلسلةُ التي طولها 63 محرفاً ليست مجموعاً تحقّقياً لأي شيء؛ بل هي SHA-256 فقدت محرفاً في طريقها إلى حافظتك.
فعلُها على جهازك، دون متصفح
كلُّ نظام تشغيل يشحن شيئاً يفعل هذا، والأمرُ جديرٌ بالمعرفة ولو استعملت صفحةً لذلك — فليس ثمّة جوابٌ أحسن لـ «كيف أعرف أن موقعك حسبه بأمانة» من تمرير الملف نفسه عبر الأداة التي جاءت مع حاسوبك.
Windows، في PowerShell:
Get-FileHash .\disk.iso -Algorithm SHA256 وفي الأجهزة الأقدم certutil -hashfile disk.iso SHA256 بدلاً منه، وهو يطبع بحروف كبيرة وفيها مسافات. وحالةُ الأحرف لا تهمّ أبداً في مقارنة مجموع تحقّقي؛ فالحروفُ أرقامٌ لا كلمات.
macOS:
shasum -a 256 disk.iso Linux:
sha256sum disk.iso والثلاثةُ تطبع السلسلة نفسها للملف نفسه، وكذلك يفعل هذا الموقع. فهي مواصفاتٌ دقيقة لها متّجهاتُ اختبار منشورة؛ وليس ثمّة متّسعٌ لأن يكون للتنفيذ رأي.
مقارنتُهما دون أن تحول عيناك
لا تقرأ أربعةً وستين محرفاً من شاشتين وتقرّر أنهما تبدوان متشابهتين. فالناسُ يفحصون الأربعةَ الأولى والأربعةَ الأخيرة ويتوقّفون، وتلك بالضبط هي المقارنةُ التي كان مهاجمٌ سيرتّب اجتيازها، وهي أيضاً كيف تمرّ غلطةٌ صادقة.
الصق الاثنين في شيء يستطيع مقارنتهما نيابةً عنك. وعلى سطر أوامر، فذلك ما وُجِدت له رايةُ -c:
sha256sum -c SHA256SUMS وفي متصفح هو مربّعُ المقارنة في البصمة والمجموع التحقّقي، وهو يقبل القيمة بأي شكل كتبها الناشر — أرقاماً ستّ عشرية مجرَّدة، أو سطرَ ناتجٍ من sha256sum، أو ملفَّ SHA256SUMS كاملاً، أو صيغةَ SHA256 (disk.iso) = …، أو خاصيةَ integrity="sha384-…" من وسم سكربت — ويقول نعم أو لا في جملة.
ماذا تثبت المطابقةُ بالضبط
أن البايتات على قرصك هي البايتات التي كانت أمام أحدهم حين كتب ذلك الرقم. وذلك شيءٌ نافعٌ حقاً أن تعرفه وهو أضيقُ مما يفترض معظمُ الناس، فيجدر أن يُسرَد ما يغطّيه وما لا يغطّيه.
المطابقةُ تستبعد:
- تنزيلاً توقّف مبكراً وترك لك ملفاً يبدو كاملاً؛
- وتلفاً في الطريق، أو على قرص يعطب، أو في كبل USB رديء؛
- والملفَ الخطأ — بناءَ ARM بدل بناء x86، أو إصدارَ الشهر الماضي؛
- ومرآةً تقدّم بصمت شيئاً غير ما تعلن عنه.
والمطابقةُ لا تستبعد:
- أن يكون الملفُّ خبيثاً. فالناشرُ يستطيع قياس برمجية خبيثة بالدقّة نفسها التي يقيس بها أي شيء آخر. فالمجموعُ التحقّقي يقول «هذا ما شحنوه»، ولا يقول «هذا آمن» أبداً؛
- وأن يكون الناشرُ قد اختُرِق. فإن استبدل أحدٌ الملف على الخادم، فقد استبدل المجموع التحقّقي بجانبه في الدقيقة نفسها. وذلك يقودنا إلى القسم التالي.
الخطأُ الذي يجعل التمرين كلَّه بلا معنى
أخذُ المجموع التحقّقي من الصفحة نفسها، وعبر الاتصال نفسه، الذي جاء منه الملف.
فكّر فيما تدافع عنه. فإن كان القلقُ من تنزيل تالف، فالمجموعُ التحقّقي يمكن أن يأتي من أي مكان والفحصُ ينجح. وإن كان القلقُ من عبث أحدهم بالملف، فمن كان يستطيع تغيير الملف كان يستطيع تغيير سطر الأرقام الستّ عشرية المطبوع تحته، لأن كليهما جاء من الخادم نفسه عبر الاتصال نفسه. فأنت تطلب من المزوِّر أن يؤكّد التوقيع.
والمجموعُ التحقّقي أنفعُ ما يكون حين يصلك بطريق لم يأتِ منه الملف:
- ملفُّ
SHA256SUMSبتوقيع GPG منفصل، مفحوصاً في مقابل مفتاح كان عندك أصلاً — وهذا ما تنشره التوزيعات وهو الجوابُ الحقيقي؛ - وإعلانُ الإصدار على قائمة بريدية، أو وسمٌ في مستودع مصدري، بدل صفحة التنزيل؛
- ومرآةٌ ثانية على نطاق آخر، والاثنتان مقارنتان إحداهما بالأخرى؛
- ومديرُ حزم، وهو يفعل هذا نيابةً عنك في مقابل مفاتيح تُشحَن مع نظام التشغيل.
ولا شيء من ذلك يجعل فحصَ مجموع تحقّقي من الصفحة نفسها عديمَ النفع. فهو يلتقط التنزيل المكسور، وهو العطبُ الذي يحدث للناس فعلاً. لكن لا تقل لنفسك إنه التقط شيئاً غيره.
MD5 وSHA-1 مكسورتان. استعملهما رغم ذلك، أحياناً
كلتاهما كُسِرت بالمعنى الأقوى الذي يهمّ هنا: فـ التصادمات يمكن بناؤها عن قصد. فملفان مختلفان لهما MD5 نفسه أمكن بناؤهما على عتاد عادي منذ 2004، وفي 2017 أنتج فريقٌ ملفَّي PDF مختلفين لهما SHA-1 نفسه. وفي 2020 هبطت نسخةُ البادئة المختارة من ذلك الهجوم إلى بضع عشرات الآلاف من الدولارات من الحوسبة المستأجَرة.
ومعنى ذلك عملياً: أن MD5 مطابقاً لم يعد يقول لك إن أحداً لم يعبث بالملف، لأن من أراد كان يستطيع بناء ملف مختلف بالرقم نفسه. لكنه ما زال يقول لك إن التنزيل لم يُبتَر ولم يتلف، لأن حادثاً عشوائياً لن يحطّ على تصادم — فتلك احتمالاتٌ لم تكن لأي حادث قط.
فإن طبع الناشرُ MD5 ولا شيء غيره، فافحصه. فهو أثمنُ من ألا تفحص. وإن كنت أنت الناشر، فاطبع SHA-256.
لم يطابق. ماذا الآن؟
- نزّله من جديد، من المكان نفسه. فالنقلُ المنقطع أو المستأنَف أشيعُ الأسباب بفارق كبير والنسخةُ الثانية تحسم الأمر عادةً.
- تحقّق من أنك على السطر الصحيح. فصفحاتُ الإصدارات تسرد عدة ملفات؛ ومجموعُ المثبِّت التحقّقي لن يطابق الأرشيف أبداً، وبناءُ ARM لن يطابق بناء x86 أبداً.
- تحقّق من الإصدار. فصفحاتُ المجاميع التحقّقية المحفوظة في العلامات المرجعية تفسد يوم يُشحَن إصدارٌ فرعي.
- جرّب مرآةً أخرى وقارن المجموعين التحقّقيين للملفين أحدهما بالآخر. فمرآتان تتّفقان إحداهما مع الأخرى وتخالفان الرقم المنشور مشكلةٌ غير مرآةٍ واحدة تخالفهما معاً.
- ولا تفتحه في هذه الأثناء. فالملفُّ الذي يفشل في مجموعه التحقّقي تالفٌ في أحسن الأحوال وليس الملفَّ الذي طلبته في أسوئها.
لماذا تفعل هذا في متصفح أصلاً
لأن سطر الأوامر ليس حيث يكون معظمُ الناس، ولأن البديل البيّن — موقعٌ يطلب منك رفع الملف — شيءٌ غريبٌ أن يُفعَل بمثبِّت أنت أصلاً غيرُ واثق منه. فإرسالُ ملف إلى مكان ما لتعرف أعُبِث به في الطريق يضيف مكاناً آخر يمكن العبثُ به فيه.
والبصمة والمجموع التحقّقي تقرأ الملف قطعاً من أربعة ميغابايتات على جهازك أنت، فلا رفعَ ولا حدَّ حجم ولا شيء تأتمنه سوى الصفحة نفسها — وأنت تستطيع قراءتها، وهي تستمرّ في العمل والشبكةُ مفصولة. وإن كنت تفضّل أن تأتمن نظام تشغيلك أنت، فشغّل الأمر من القسم أعلاه وقارن الجوابين. سيتّفقان.