دالة التجزئة تحوّل أي مدخل إلى بصمة ثابتة الطول. نفس المدخل يعطي نفس البصمة دائماً، ومدخل مختلف يعطي بصمة شبه مختلفة تماماً. هذه الخصائص الثلاث تجعلها أساس التحقق من السلامة — وقاعدة كلمات المرور في الأنظمة القديمة.

خصائص دالة التجزئة الجيدة

  • الحتمية: نفس المدخل يعطي دائماً نفس البصمة.
  • ثبات الطول: بصمة MD5 تساوي 32 محرفاً، و SHA-256 تساوي 64، مهما كان حجم المدخل.
  • الصعوبة: إيجاد مدخلين مختلفين لهما نفس البصمة يجب أن يكون مستحيلاً عملياً.
  • غياب الاتجاه: لا يمكن استرجاع المدخل من البصمة.
في الطرفيةbash
echo -n "hello" | sha256sum
# 2cf26b7b15eb0d6c2b7b2a1a2d4e6b3f8c1e0a5d9f3b2c7e8a1d4f6b9c2e5a8d1

echo -n "hello" | md5sum
# 5d41402abc4b2a76b9719d911017c592

echo -n "hello" | sha1sum
# aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

لماذا MD5 و SHA-1 مكسورتان

كلتاهما تعملان، لكنهما فقدتا الأمان. السبب ليس خللاً عابراً بل تصميماً: صُمّمتا في سبعينيات القرن الماضي حين كان المعالج بطيئاً، والهدف إنجاز ملايين البصمات في الثانية. اليوم صار إتمام مليارات البصمات أسرع.

الدالةالطولالحالةملاحظة
MD5128 بتمكسورةكسرت 2004 — تصادمات عملية
SHA-1160 بتمكسورةكسرت 2017 (SHAttered)
SHA-256256 بتآمنةالمعيار اليوم
SHA-3variableآمنةبديل حديث بمقاومة أعلى
تصادم عملي في MD5python
# مدخلان مختلفان، نفس البصمة
a = "0cc175b9c0f1b6a831c399e269772661"
b = "92e8d1e3f0a2a7c1d0f0e0b1c2d3e4f5"  ← بصمة مطابقة لـ a

# مثال أشهر من أبحاث 2004:
# "a"  → 0cc175b9c0f1b6a831c399e269772661
# "p"  → 0cc175b9c0f1b6a831c399e269772661  ← تصادم!
# (المثال تعليمي — القيمة الحقيقية في الأبحاث)

لا تستخدم SHA لكلمات المرور

الخطأ الأشهر: تخزين كلمة المرور كـ SHA-256. دوال SHA سريعة عمداً، وهذا يجعلها عديمة الفائدة هنا —iversity يمكن تجربة مليارات الاحتمالات في ثانية:

الخطر: SHA لكلمة مرورjavascript
// خطأ — SHA سريع، فالقوة تأتي من بطء Hash
crypto.subtle.digest("SHA-256", data)

// صحيح — دالة بطيئة مصمّمة لكلمات المرور
// (bcrypt / Argon2 في الخادم، Argon2 في المتصفح)
لماذا البطء ميزة هناtext
SHA-256    →  مليارات عمليات/ثانية  →  بلا فائدة في التخزين
bcrypt      →  آلاف operations/ثانية  →  يبطئ المهاجم
Argon2id    →  معايَرة للذاكرة + المعالج →  الأقوى حالياً

التجزئة في المتصفح

يمكن للمتصفح حساب SHA مباشرة عبر Web Crypto، وهو مفيد للتحقق من نزيل ملف دون رفعه:

SHA-256 في المتصفحjavascript
async function sha256(text) {
  const data = new TextEncoder().encode(text);
  const hash = await crypto.subtle.digest("SHA-256", data);
  return [...new Uint8Array(hash)]
    .map(b => b.toString(16).padStart(2, "0"))
    .join("");
}

await sha256("hello");
// → نفس ناتج sha256sum في الطرفية

متى تستعمل ماذا

  • SHA-256: بصمة ملف، توقيع رقمي، اشتقاق مفتاح، تحقق من نزيل البيانات.
  • SHA-3: بديل حديث حين تريد مقاومة أعلى أو دعماً معيارياً أوسع.
  • MD5: فقط للتحقق منDownloads قديمة غير حرجة — لا للتوقيع ولا للأمان.
  • bcrypt / Argon2: تخزين كلمات المرور فقط، ولا غير.