طريقة الاستخدام
- أدخل نصًا، أو غيّر «صيغة المدخلات» إلى «ست عشري» لإدخال بايتات، أو انقر «فتح ملف».
- تكون SHA-1 محددة مسبقًا؛ غيّر قائمة «الخوارزمية» إن أردت مقارنتها بدالة تجزئة أخرى.
- اختر «ست عشري (أحرف صغيرة)» (كما يطبعها sha1sum وGit)، أو «ست عشري (أحرف كبيرة)»، أو «Base64».
- الصق قيمة SHA-1 المتوقعة في حقل «المقارنة مع»، فتعرض الصفحة «متطابقة» أو «غير متطابقة».
ما هي خوارزمية SHA-1؟
صمّمت وكالة الأمن القومي الأمريكية (NSA) خوارزمية SHA-1 (اختصار Secure Hash Algorithm 1)، ونشرها المعهد الوطني للمعايير والتقنية (NIST) عام 1995 في المعيار FIPS 180-1، لتحل محل SHA-0 التي لم يدم استخدامها طويلًا. وهي اليوم محددة في FIPS 180-4، ويصفها RFC 3174 مع شيفرة نموذجية بلغة C. تعالج SHA-1 كتلًا من 512 بت في 80 جولة وتُخرج ملخصًا بطول 160 بت: 40 حرفًا ست عشريًا أو 28 حرفًا بترميز Base64.
وكأي دالة تجزئة، فإن SHA-1 أحادية الاتجاه. فلا يمكن فك تشفير الملخص، بل يمكن فقط مطابقته بحساب تجزئة التخمينات. وبهذه الطريقة كُسرت بالجملة تجزئات كلمات المرور بخوارزمية SHA-1 غير المملّحة التي سُرّبت من LinkedIn عام 2012؛ أما كلمات المرور فمكانها Argon2 أو scrypt أو bcrypt أو PBKDF2.
هجوم SHAttered: لماذا لم يعد يُنصح باستخدام SHA-1
في فبراير 2017 نشر باحثون من CWI Amsterdam وGoogle هجوم SHAttered، وهو أول تصادم حقيقي في SHA-1: ملفا PDF مختلفان لهما قيمة التجزئة نفسها، عُثر عليهما بنحو 2^63 عملية حساب لـ SHA-1. وفي عام 2020 استخدم غايتان لوران (Gaëtan Leurent) وتوما بيرين (Thomas Peyrin) في بحثهما «SHA-1 is a Shambles» تصادمًا بالبادئة المختارة لإثبات إمكانية تزوير تواقيع SHA-1 على مفاتيح PGP، بتكلفة في متناول مهاجم يملك تمويلًا جيدًا.
- توقفت هيئات التصديق العامة (CA) عن إصدار شهادات TLS بخوارزمية SHA-1 عام 2016، وتوقفت المتصفحات عن الوثوق بها مطلع عام 2017.
- يحظر NIST استخدام SHA-1 في التواقيع الرقمية الجديدة منذ عام 2013، ويعتزم إيقافها كليًا بحلول نهاية عام 2030.
- لا تزال معظم مستودعات Git تعرّف الكائنات بقيم SHA-1، تُحسب بتطبيق مُحصَّن يكشف محاولات التصادم؛ كما يستطيع Git إنشاء مستودعات تستخدم SHA-256.
لا تؤثر التصادمات في HMAC، لذا لا تزال HMAC-SHA1 مستخدمة في رموز TOTP وفي تواقيع webhook القديمة؛ ويمكنك حسابها باستخدام مولّد HMAC. أما في أي استخدام جديد، فاختر SHA-256.
معرّفات كائنات Git وBase64 وترميز النص
معرّف كائن blob في Git ليس تجزئة SHA-1 للملف وحده. إذ يحسب Git تجزئة ترويسة مكوّنة من الكلمة blob ومسافة وحجم المحتوى بالبايت وبايت صفري، يليها المحتوى. ولإعادة إنتاج هذه القيمة هنا، غيّر «صيغة المدخلات» إلى «ست عشري» وأضِف بايتات الترويسة تلك: فلكلمة hello متبوعة بسطر جديد، تكون المدخلات الست عشرية 626c6f6220360068656c6c6f0a.
$ printf 'hello\n' | sha1sum
f572d396fae9206628714fb2ce00f72e94f2258f -
$ printf 'hello\n' | git hash-object --stdin
ce013625030ba8dba906f756967f9e9ca394464a
تُعرض SHA-1 عادةً بالنظام الست عشري بأحرف صغيرة. ويظهر Base64 في مصافحة WebSocket، حيث تكون قيمة Sec-WebSocket-Accept هي تجزئة SHA-1 بترميز Base64 لمفتاح العميل مضافًا إليه معرّف GUID ثابت، وكذلك في قيم كلمات المرور {SHA} في LDAP. وتذكّر أن التجزئة تُحسب على البايتات: فللنص الذي يحتوي على أحرف بعلامات نطق (مثل é) قيمة SHA-1 في UTF-8 وقيمة أخرى في Windows-1252.
SHA-1 في سطر الأوامر وفي الشيفرة البرمجية
sha1sum file.zip # Linux
shasum file.zip # macOS (الخوارزمية الافتراضية هي SHA-1)
certutil -hashfile file.zip SHA1 # Windows
Get-FileHash file.zip -Algorithm SHA1 # PowerShell
# Python
hashlib.sha1(data).hexdigest()
// Node.js
crypto.createHash('sha1').update(data).digest('hex')
تحسب هذه الصفحة SHA-1 باستخدام Web Crypto API المدمجة في متصفحك، فلا تغادر المدخلات جهازك أبدًا. ويعرض جدول «جميع الخوارزميات» قيم MD5 وSHA-256 وSHA-384 وSHA-512 وCRC للمدخلات نفسها.
أمثلة
| المدخلات (UTF-8) | SHA-1 |
|---|---|
Hello, World! | 0a0a9f2a6772942557ab5355d76af442f8f65e01 |
Base64.is | 6c667ee2efd2020349eed40efa07c26683f613c8 |
你好 | 440ee0853ad1e99f962b63e459ef992d7c211722 |
الأسئلة الشائعة
هل لا يزال استخدام SHA-1 آمنًا؟
ليس حيث يستطيع مهاجم اختيار المدخلات أو التأثير فيها، كما في التواقيع والشهادات، لأن إنتاج تصادمات SHA-1 أصبح ممكنًا. لكنها لا تزال تكشف التلف العرضي، ولا تتأثر HMAC-SHA1 بالتصادمات. أما في الأعمال الجديدة، فاستخدم SHA-256 أو SHA-512.
هل يمكن عكس تجزئة SHA-1؟
لا. فلا يوجد مفتاح ولا فك تشفير. ولا تجد مواقع البحث إلا المدخلات الموجودة مسبقًا في جداولها من الكلمات الشائعة وكلمات المرور المسرّبة، ولهذا تكون المدخلات العشوائية الطويلة في مأمن منها، بخلاف كلمات المرور القصيرة.
ما طول تجزئة SHA-1؟
= واحدة. ولخوارزمية RIPEMD-160 الطول نفسه، أما تجزئات كلمات المرور في MySQL 4.1 وما بعده فهي علامة نجمة يليها 40 حرفًا ست عشريًا. وتعرض أداة تحديد نوع التجزئة الاحتمالات الممكنة لأي سلسلة.كيف أتحقق من ملف مقابل قيمة SHA-1 منشورة؟
افتح الملف عبر «فتح ملف»، ثم الصق القيمة المنشورة في حقل «المقارنة مع». تُقبل الصيغة الست عشرية بأحرف كبيرة أو صغيرة وكذلك Base64، وتعرض الصفحة «متطابقة» أو «غير متطابقة».
ما الفرق بين SHA-1 وSHA-256؟
نشر NIST كلتيهما، لكن SHA-256 تنتمي إلى عائلة SHA-2 الأحدث، ومخرجاتها بطول 256 بت، ولا تُعرف ضدها هجمات عملية. أما SHA-1 فمخرجاتها أقصر، وقد كُسرت مقاومتها للتصادم.