ما الذي تفعله هذه الأداة
تحسب تجزئة SHA-1 لأي نص أو ملف داخل متصفحك، وتُعيد ناتجاً ست عشرياً بطول 40 رمزاً. SHA-1 دالة تجزئة بطول 160 بت نشرها NIST عام 1995 (FIPS 180-1)، صمّمتها NSA. هي مهجورة لأغراض الأمان: عرض Google و CWI Amsterdam هجوم تصادم عملي («SHAttered») عام 2017، تبعته تصادمات chosen-prefix عام 2019. لم يعد SHA-1 يُعدّ آمناً تشفيرياً.
أين لا يزال SHA-1 مستخدماً
- معرّفات كائنات git. يُعرَّف كل commit و tree و blob في git بتجزئة SHA-1 الخاصة به. نموذج كائنات git يتحوّل إلى SHA-256 (راية
--object-format=sha256متاحة)، لكن SHA-1 لا يزال الافتراضي للأغلبية الساحقة من المستودعات. مخاطرة التصادم لمعرّفات الـ commit حقيقية لكنها مُدارة: ينشر GitHub وغيره من المنصّات كشفاً على نسق SHAttered (مكتبةsha1dc) ليُعلِم بالتصادمات المُجهَّزة. - Subversion (SVN). نفس التبرير الموجود في git، مع جهد ترحيل أقل.
- شهادات TLS الأقدم. أوقفت المتصفحات الثقة بالشهادات المُوقَّعة بـ SHA-1 عام 2017، لكن الأنظمة القديمة لا تزال تنتجها.
- الكود القائم الذي يُجزِّئ لأغراض غير أمنية. مفاتيح ذاكرة التخزين، البصمات، جداول إزالة التكرار — كلها مقبولة.
أين لا يصلح SHA-1
- شهادات TLS الجديدة، شهادات توقيع الكود، أو تواقيع الوثائق. استخدم SHA-256 أو SHA-384.
- تخزين كلمات السر. استخدم تجزئة بطيئة ومُملَّحة مثل bcrypt أو Argon2. SHA-1 سريع جداً وغير مصمَّم لذلك.
- أي شيء يستطيع المهاجم اختيار مدخله فيه. يستطيع مهاجم بعنقود مستأجَر إنتاج تصادم SHA-1 خلال أيام. إن سمح نموذجك الأمني للمهاجم بالتأثير في ما يُجزَّأ، فإن SHA-1 مكسور.
- Subresource Integrity (SRI). ستقبل المتصفحات SHA-1 في خاصية
integrity، لكن المواصفة توصي بـ SHA-256 كحدّ أدنى.
متجهات الاختبار
من FIPS 180-2 ومجموعة مرجعية لـ SHA-1:
- السلسلة الفارغة
""→da39a3ee5e6b4b0d3255bfef95601890afd80709 "abc"→a9993e364706816aba3e25717850c26c9cd0d89d"abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq"→84983e441c3bd26ebaae4aa1f95129e5e54670f1"The quick brown fox jumps over the lazy dog"→2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
ملاحظات
لماذا 40 رمزاً؟ يُنتج SHA-1 160 بت = 20 بايت. 20 بايت × 2 رمز ست عشري لكل بايت = 40 رمزاً مرئياً.
لماذا يستخدم git خوارزمية SHA-1 إن كانت مكسورة؟ يستخدم git خوارزمية SHA-1 معرِّفاً معنوناً بالمحتوى، لا أساساً أمنياً. نموذج التهديد هو «كائنان حسنا التشكيل يتصادمان عرضاً»، وهو ما يبقى بعيد الاحتمال فلكياً. النموذج ليس «مهاجم يدفع commit خبيثاً بنفس تجزئة commit حقيقي» — لذلك تنشر GitHub وأمثالها sha1dc لرصد تجهيزات على نسق SHAttered ورفضها. الترحيل إلى SHA-256 يجري لكن ببطء لأن قاعدة التركيب ضخمة.
لماذا تختلف تجزئة SHA-1 لديّ عمّا يُظهره sha1sum؟ سطر جديد في النهاية. echo "hello" | sha1sum يُضمّن \n. لصق «hello» هنا لا يضيفه. استخدم echo -n أو منتقي الملفات.
أدوات ذات صلة
- مولّد التجزئة — التجزئات الخمس جنباً إلى جنب
- SHA-256 — البديل الحديث لـ SHA-1
- MD5 — السلف؛ مكسور بصورة أعمق