ليه الموقع مايعرفش كلمة مرورك أصلاً؟ Password Hashing للمبتدئ
المستوى: مبتدئ. لو بتبني أول نظام تسجيل دخول وعايز تخزّن كلمات المرور بطريقة صح، المقال ده ليك. مش محتاج خلفية أمنية، بس تعرف تكتب دالة بسيطة.
لو سرّب حد قاعدة بيانات موقعك بكرة، الفرق بين كارثة وخبر عابر هو سطر واحد في كود تسجيل التسجيل. الموقع المحترم مش بيعرف كلمة مرورك أصلاً، حتى صاحبه نفسه. هنا هتفهم ليه، وتكتب الكود الصح في 5 دقايق.
المشكلة باختصار
أبسط طريقة لتسجيل الدخول إنك تخزّن كلمة المرور في عمود password زي ما هي. تشتغل تمام. لكن يوم ما الجدول يتسرّب — وده بيحصل كل أسبوع لمواقع كبيرة — المهاجم بياخد كل كلمات المرور جاهزة. والأسوأ: ناس كتير بتستخدم نفس كلمة المرور في الإيميل والبنك. يعني تسريب موقعك بيفتح حسابات تانية مالكش دعوة بيها.
الحل مش إنك تشفّر كلمات المرور وتفك تشفيرها وقت الحاجة. الحل إنك تخزّنها بشكل مايرجعش لأصله أبداً. ده اللي اسمه Hashing.
الفكرة بمثال: مفرمة اللحمة
تخيّل مفرمة لحمة. بتحط قطعة لحمة وتطلع لحمة مفرومة. سهل في الاتجاه ده. لكن جرّب تعكس العملية: خد اللحمة المفرومة وارجّعها قطعة واحدة زي الأول. مستحيل.
دالة الهاش بالظبط كده. بتاخد كلمة مرورك P@ss123 وتطلّع سلسلة حروف ثابتة الطول زي a8f5f167.... تقدر تفرم بسهولة، بس متقدرش ترجّع المفروم لأصله. والموقع مش محتاج يرجّعه أصلاً.
طب إزاي بيتأكد إنك دخلت الباسوورد الصح وهو مايعرفهوش؟ بسيطة: وقت التسجيل بيفرم كلمتك ويخزّن المفروم. وقت الدخول بيفرم اللي كتبته دلوقتي، ويقارن المفروم بالمفروم المخزّن. لو اتطابقوا، يبقى نفس الكلمة. كل ده من غير ما يعرف الكلمة نفسها في أي لحظة.
الشرح العلمي الدقيق
دالة الهاش التشفيري (Cryptographic Hash) هي دالة رياضية بتحوّل أي مدخل مهما كان طوله إلى مخرج ثابت الطول، وبتتميز بخاصيتين: الأولى إنها أحادية الاتجاه (one-way) — حسابياً غير عملي إنك تستنتج المدخل من المخرج. التانية إنها حتمية (deterministic) — نفس المدخل بيدّي نفس المخرج دايماً، وده اللي بيخلّي المقارنة ممكنة.
هاش مش تشفير — الفرق اللي بيغلط فيه الناس
كتير بيخلطوا بين الاتنين. التشفير (Encryption) ليه مفتاح، وبيتعمل عشان ترجّع البيانات بعدين. الهاش مالوش مفتاح للرجوع، وبيتعمل عشان متترجّعش أبداً. كلمة المرور مش بيانات محتاج تقراها تاني، فالتشفير غلط هنا: أي حد يلاقي المفتاح يفك كل الباسووردات. الهاش مفيهوش مفتاح يتسرّب أصلاً.
الفخ الأول: نفس الكلمة = نفس الهاش
لأن الهاش حتمي، أي شخصين بنفس كلمة المرور هيطلعوا بنفس الهاش بالظبط. المهاجم بيستغل ده بجدول جاهز اسمه Rainbow Table: ملايين الكلمات الشائعة محسوب هاشها مسبقاً. يقارن جدولك بجدوله، ويكشف كل اللي استخدموا 123456 في ثواني.
الحل اسمه Salt (الملح): نص عشوائي فريد بيتولّد لكل مستخدم، وبيتضاف للكلمة قبل الفرم. كده حتى لو اتنين بنفس الكلمة، هاشهم هيطلع مختلف، وجداول Rainbow بتبقى بلا قيمة. المكتبات الحديثة بتولّد الـ salt وتخزّنه جوّه الهاش نفسه أوتوماتيك — مش محتاج تعمله بإيدك.