بسم الله الرحمن الرحيم
رح أشرح بشكل مُبسَّط عن مفهوم ال Hashing : تخيلوا معي قبل كل شي انه انا مثلا عندي ساعة غالية علي وبحبها ، وانا حاسه انه في شخص بستخدمها وبلبسها بدون علمي وبس يخلّص برجعها ، فخلص فكرت وقررت انه لازم اتأكد هل فعلاً في شخص بستخدمها بدون علمي او انا غلطانه ، حتى اتأكد قررت احطها بعلبتها وبمكان معيّن وبطريقة معيّنة مثلا اني اخليها لجهة معينه واحط إشارة على مكانها بالضبط بحيث لو تغير مكانها لو واحد سنتمتر او تغير اي شي على الطريقة اللي حطيتها فيها اذًا بكون فعلًا فيه شخص عبث فيها ولو ما تغير شي معناها ماحد استخدمها. اذًا انا عملت حركة معينه ماحد بعرفها غيري حتى اتأكد هل فعلا حد عبث فيها من وراي او لأ … وتقريبا هيك فكرة الـ Hashing فمن خلاله بتأكد لو فيه اي حدا عبث بالداتا، خلونا نفهم كيف يعني وشو معناه خطوة بخطوة.
تعريف الـ Hashing . نتفق على اول شغلة ، وهي انه عملية ال Hashing هي عبارة عن تحويل ال كلام ل شكل آخر تماما وشكل غير مفهوم بالنسبة لاي شيء بالدنيا يعني بحوله لكلام غريب ، • طيب ليه شو الفكرة ؟ ببساطة الفكرة انه انا بدي احافظ على المعلومة هاي من اي تعديل بالدنيا واتأكد انه مافيه اي انسان يقدر يغير عليها ابدا. طيب كيف بتم ؟ بمسكوا الكلام بعملوا عليه عمليات وحسابات معيّنة بتحول لشي آخر تماما ولا اي حد بالدنيا بقدر يفهم شو الكلام الاصلي اللي كان مكتوب ولا بقدر يرجعه زي ما كان ف من هون اذا بندرك انه عملية الـ Hashing هي عملية لا يمكن عكسها ويطلق عليها مصطلح one-way يعني خلص بجهة وحده وهي انه بس بتشفر هاي الداتا والنص بس ما بتقدر ترجعها زي ما كانت ابدا ، مُستحيل تقدر تعكس اللي انعمل عليها ( irreversible ).
نشوف مثال: ابسط الموضوع الكم بمثال تمام، لو اجيت انا حكيت الكم اني عملت معادلة طلع جوابها الرقم 1000 ؟ مين بقدر يعرفلي شو المعادلة هاي؟ شو العمليات الحسابية والارقام اللي ركبناها مع بعض وشكلت عنا الرقم 1000 ? كل حد رح يحكي شكل وكل حد رح يخطر بباله معادلة غير اعطتنا هالرقم مثلا : 100 x 10 = 1000 200 + 200 + 600 = 1000 ومعادلات لا حصر لها ، ف اذا الرقم 1000 هاد انا مستحيل اقدر اعكسه واعرف شو المعادلة اللي اعطتني هاد الرقم … وهاد بالضبط اللي بصير ب حالة ال Hashing .
أنواع الـ Hashing طيب تعالوا نحكي حكي علمي سليم منطقي
، في عنا عدة انواع من ال Hashing ( بنقدر نعتبرهم خوارزميات او احكوا عنهم معادلات رياضية عشان برضه تفهموا اكتر) ، كل نوع منهم بشتغل ب طريقة معينه وحسابات معينه حتى يقدر يشفر الداتا غير عن النوع التاني ، بس وين الغريب بالموضوع ؟؟ انه برضه كل نوع منهم اله طول محدد ؛ يعني لو شفرت كلمة " بيان " او شفرت جريدة كاملة او شفرت مقال طويييلللل باستخدام نفس نوع ال Hashing متخيلين انه النتيجة بعد تشفيره واجراء كل العمليات هاي رح تكون انه نفس الطول بطلع الهم كلهم بغض النظر عن حجم وطول الكلام اللي كتبته ! ( بحولهم لكلام مشفر غير مقروء او مفهوم بس النص المشفر الناتج عن عميلة ال Hashing بكون بطول ثابت بغض النظر عن الكلام اللي لازم يحوله هلأ بتفهموا بمثال ) يعني الأخ مش مقصر مطبق مبدأ المساواة وماعنده حدا مميز او كبير.
وقبل ما اعطي مثال تعالوا نتعرف بعض هالأنواع هاي وكل وحده كم الطول عندها … 1- MD5 ----> length 128 2- SHA 256 ----> length 256 3- SHA - 1 ----> length 160 4- SHA 512 ----> length 512
وهلأ المثال تعالوا نجرب : ناخد مثلا اول نوع منه وهو ال MD5 ، كيف بدنا نشفر ؟ اكيد مو بحالنا او يدوي لا طبعا بس بنقدر نستخدم ادوات ونجرب نشفر فيهم او مثلا نروح على صديقنا Google نطلبه ببساطة بحث سريع مثلا Online text " Hashing " بطلع الك عدة مواقع ف انت جرّب ، شوفوا المثال التالي: جملة Hello I’m Bayan , Who are you ? بدي اشفرها باستخدام ال MD5 مرة وباستخدام ال SHA 1 مرة ، ونفس الشي كلمة Hi ونشوف هل فعلًا نفس الطول. :cherry_blossom:SHA1
Hi → 94dd9e08c129c785f7f256e82fbe0a30e6d1ae40 Hello I’m Bayan , Who are you ? → bb0598ac2facfe459f8119c79f2fc26ec099ec54 :cherry_blossom:MD5
Hi → c1a5298f939e87e8f962a5edfc206918 Hello I’m Bayan , Who are you ? → 5dd3f5cf1f34910549115ea576eb14f0 اتوقع واضح انه نفس الطول من الأرقام والحروف
طيب ضل معلومة لازم انوه عليها حتى ندرك كم انه عملية ال Hashing مهمه ولأي درجة بتحافظ على النص ( او نحكي البيانات بشكل ادق ) من العبث و التغيير والتخريب ، الا وهي ان اي تغيير بسيط على النص حتى لو بحرف او حتى بنقطة و مهما كان الكلام طويل ف اي تغيير رح يؤدي لتغيير شكل ال Hash للنص كامل ، وهون بنكتشف قديه ان ال هاش شيء محترم معطي قيمة للكبير وللصغير ؛ وبيحترم ابسط واصغر حد فيهم.
مثال : رح ناخد كلمة " Hi " ورح ناخد بعدها كلمة " HI " حرف الـ i مره سمول يعني حرف صغير ومره كابيتال يعني حرف كبير ركزوا
c1a5298f939e87e8f962a5edfc206918 → Hi bf8c144140b15befb8ce662632a7b76e → HI لاحظنا كيف تغيير حرف واحد غير الهاش كامل !
نجي ل امثلة وسيناريوهات على تطبيق الـ Hashing : ✓ مثلا بدي ارسل لصديقتي رسالة اوريها صورة الساعة الجديدة اللي جبتها وهالحكي كله عن طريق الانترنت ؛ وانا شاكة انه فيه شخص بده ياخد الرسالة وبغيّر عليها قبل ما تكمل طريقها و توصل صديقتي ، ف ببساطة بروح بمسك هالرسالة قبل ما ارسلها لصديقتي وبروح بعملها Hashing وبس توصل الرسالة لصديقتي بتعملها نفس الشيء Hashing وبقارن اللي طلع معي باللي طلع معها ولو تطابق ف خلص كله تمام ولو صار اختلاف ف بنعرف انه فيه شخص عبث بالرسالة هاي. ✓ كمان مثال ، بدي انزل ملف معيّن من الانترنت دخلت على الموقع الرسمي ولقيت موجود بجانبه الهاش الخاص فيه للملف ، ف لما ينزل عندي بروح بحسب الهاش الخاص فيه وبقارنه باللي على الموقع الرسمي حتى اتأكد انه فعلًا ماحدا عدل او حذف او ضاف عليه شي ؛؛؛؛؛ زي لما تنزلوا الكالي مثلا شوفوه بيطلع بجانبه الهاش الخاص فيه.
هون رح احكي معلومة مهمه انه برضه كلمات السر بتكون مخزنة جوا سيرفر بحتوي على كل هاي البيانات ( بسميه قاعدة البيانات ) بحتوي اسم المستخدم وكلمة السر الخاصة فيه بس اكيد الموضوع مو بالسهولة هاي ف هون كمان اي كلمة سر بتتخزن جوا هاي الداتا بيس ف هي بنعمل عليها Hashing اول وبعدها بتخزن ناتج ال hashing بس (hash - value ) ولما انت مثلا جيت تسجل دخول لحسابك التويتر ببساطة بتدخل اليوزر الخاص فيك وبعدها الباسوورد بس اللي بصير خلف الكواليس من جهة السيرفر انه رح يمسك الباسوورد الخاص فيك ويعمل عليها عملية Hashing ويقارنها بقيمة الهاش اللي مخزنه عنده بقاعدة البيانات فلو تطابقت ف تمام يعني صح وبسمحلك تدخل ولو لأ ف بيعرف انه الباسوورد غلط وما بسمحلك تدخل ، يعني برضه حتى لو صار اختراق عليها ف أي شخص بوصل لقاعدة البيانات رح يلاقي فيها اسماء المستخدمين ( اليورزز ) وقيمة الهاش للباسوورد الخاصة بكل يوزر فبالتالي ما بيقدر يعرف شو هو الباسوورد ابدا. بس طبعا الهاكرز ناس فخمين يا جماعة ما بوفروا شي
، ف بتلاقي مواقع اونلاين عندها داتا بيس فيها مجموعة كلمات كبيرة وبحسبوا الـ Hash لهاي الكلمات كلها وبخزنوا كل كلمة منهم وعندها الهاش الخاص فيها ، بتجي انت بتدخل الهاش اللي حصلت عليه بأي طريقة كانت بتكتبه بالموقع هذا ، لهون تمام ! **خلينا نشوف من جهة الموقع شو بصير بشكل مبسط ؛ ببساطة بروح يدور عنده بقاعدة البيانات اللي خزن فيها كمية كلمات كبيرة مع قيمة الهاش الها ، بس يلقى هاش مطابق للي ادخلته انت قبل على الموقع ، بشوف هالموقع شو الكلمة الخاصة فيه وبرجعلك ياها ؛ لكن زي ما اتفقنا ما بيقدر يعكس الهاش لو حصل عليه.
مُلخّص الموضوع
اذا اتفقنا انه :
ال Hashing عبارة عن عملية بتم فيها إجراء عمليات وحسابات بتتم على المدخلات الأصليه وبتحولها لصيغة غير مقروءه.
ال hashing لا يمكن عكسه ؛ اي لا يمكن استرجاع المدخلات الاصلية (irreversible / one way function)
ال Hashing اله انواع مختلفة وكل نوع بطول محدد وثابت لا يتغير مهما كان حجم المدخلات .