تعلم البرمجة بالدارجة المغربية

كيفاش الموقع كيتأكد من الـ password ديالك… بلا ما يعرفو؟ الـ hashing بالدارجة

كيفاش الموقع كيتأكد من الـ password ديالك… بلا ما يعرفو؟ الـ hashing بالدارجة

نسيتي الـ password ديال شي موقع، وضغطتي على Forgot password. والموقع ما صيفطش ليك القديم… قال ليك: دير واحد جديد. عمرك سولتي راسك علاش؟ حيت حتى هو ما عارفوش. إيوا كيفاش كيدخلك كل نهار، وهو ما عارفش الـ password ديالك؟

هادا هو المقال ديال الحلقة الأولى من السلسلة الجديدة “الأمن الرقمي من الألف للياء” (الفيديو كامل فـ القناة ديالنا فاليوتيوب). فآخر المقال، غادي تفهم كيفاش الموقع كيتأكد من الـ password بلا ما يعرفو، وعلاش التسريبات كتضر واخا هكاك. ومن بعد، فـ «جرب معايا»، غادي تتأكد بيدك من جوج حوايج: واش ملف تيليشارجيتيه ما تبدلش فالطريق، وواش شي password تسرب… بلا ما تصيفطو لحتى واحد.

الطوابع والأرقام فهاد المقال حقيقية: خرجو من الـ Terminal فالماك (macOS 26.5) نهار 14 نونبر 2026، بكلمات ديال التجربة برك: salam، salam123، 123456، وملف ديال التجربة عامر بحروف عشوائية. حتى password حقيقي ما دخل هنا.

طابع الصبع

شوف طابع الصبع ديالك. كيعرف بيك انتا بالضبط: كل واحد والطابع ديالو. ولكن من الطابع بوحدو، حتى واحد ما يقدر يعاود يصاوب الوجه ديالك، ولا الطول ديالك، ولا الصوت ديالك.

كيعرف بيك… ولكن ما كيرجعكش. عقل على هاد الجملة، حيت المقال كامل مبني عليها.

السمية: الـ hash

فالبيانات، هاد الطابع سميتو hash. كتعطي لواحد الـ function أي حاجة: كلمة، صورة، فيلم… وكتعطيك طابع قصير ديالها.

والمشهورة فيهم سميتها SHA-256، يعني Secure Hash Algorithm، و256 هي الطول ديال الطابع بالـ bits. المعيار ديالها نشرو NIST، يعني National Institute of Standards and Technology الأمريكي، فواحد الوثيقة سميتها FIPS 180-4. وكيقول بلي أي حاجة كتدخل (حتى لـ 2 أس 64 ديال الـ bits)، كيخرج منها طابع ديال 256 bit، يعني 64 حرف ورقم بالـ hex.

وفالماك، الأمر واجد فالـ Terminal: shasum -a 256.

مثال 1: نفس الكلمة، نفس الطابع

كتبت salam، ودوزتها فـ shasum -a 256:

printf 'salam' | shasum -a 256
0582bd2c13fff71d7f40ef5586e3f4da05a3a61fe5ba9f0b4d06e99905ab83ea  -

خرج طابع طويل، كيبدا بـ 0582bd2c. عاودت نفس الأمر؟ نفس الطابع بالضبط. وحطيت نفس الحروف الخمسة فملف salam.txt ودوزتو؟ حتى هو نفس الطابع. وفأي ماكينة فالعالم، نفس الشي: الطابع كيتبع غير المحتوى.

علاش printf وماشي echo؟ حيت echo كيزيد سطر جديد فالآخر، والسطر الجديد حتى هو حرف، فكيخرج طابع آخر.

مثال 2: حرف واحد، طابع جديد كامل

دابا غير بدلت الـ s الصغيرة بـ S كبيرة:

printf 'Salam' | shasum -a 256
e6aff8d7aabcab5ae824356814a091ba2867835cd6b50e6103b95e29866732a5  -

طابع آخر كامل: e6aff8d7… حتى علاقة مع اللول.

وعرفتي شحال كاين بين s وS؟ فالماكينة، كل حرف عبارة على 8 ديال الـ bits:

s = 01110011
S = 01010011

bit واحد اللي تبدل. وفالطابع؟ قارنت الجوج طوابع bit بـ bit: تبدلو 129 bit من 256. قريب النص! ومن 64 حرف ديال الطابع، غير 3 اللي بقاو فبلاصتهم، وبالصدفة.

بحال شي حجرة صغيرة كتطيح من الجبل، وكتجر معاها كلشي. هادي سميتها avalanche effect.

حرف واحد تبدل: 1 bit دخل، 129 من 256 bit تبدلو فالطابع

وزدت غير نقطة فالآخر، salam.:

printf 'salam.' | shasum -a 256
c687e6cac91059f01eb89f90f07a24a1c82c5b50a354c19261f8eb5b224e231c  -

طابع جديد مرة أخرى: c687e6ca. نقطة وحدة، وتبدلو 143 bit من 256. وهادشي علاش الـ hash كيبين حتى أصغر تبديل. الـ NIST كتقولها بالواضح: أي تبديل فالرسالة، تقريبا ديما، كيعطي طابع آخر.

شنو دخل الطابع (أول 8 حروف) شحال من bit تبدل مقارنة مع salam
salam 0582bd2c —
Salam e6aff8d7 129 من 256
salam. c687e6ca 143 من 256

مثال 3: كلمة ولا فيلم، ديما نفس الطول

شوف الطول: salam، Salam، salam.… كل طابع فيه 64 ديال الحروف والأرقام.

غير الكلمات القصار؟ لا. صاوبت ملف ديال التجربة فيه 1 GB، يعني gigabyte، بحال شي فيلم، عامر بحروف عشوائية:

dd if=/dev/urandom of=film-test.bin bs=1m count=1024
time shasum -a 256 film-test.bin
eb023006246ba8e23b4f135c538279d0f5649d2982d73bc5fd6e80898f23b49c  film-test.bin

خدا تقريبا 2.5 ثانية فالماك ديالي (2.568 المرة اللولة، 2.504 فملف تاني)… وخرج طابع فيه 64 حرف حتى هو. كلمة ولا فيلم، الطابع ديما نفس الطول.

علاش ما كنقدروش نرجعو من الطابع للأصل؟

تخيل مول الحانوت قال ليك: الحساب ديالك 100 درهم. واش تقدر تعرف شنو شريتي؟

لا. يقدر يكون 50 و50، ولا 30 و70، ولا عشرين حاجة صغيرة. المجموع كيقول شحال، ولكن ما كيقولش شنو.

الحساب 100 درهم: شنو شريتي؟ ما كيبانش

والـ hash كيدير بحالو: فيلم ديال 1 GB ولا 64 حرف. بزاف ديال المعلومات تلاحو فالطريق، وما بقاش منين نرجعوهم.

وكلمة قصيرة بحال salam؟ حتى هي ما كترجعش. الـ NIST كتقول بلي الرجوع من الطابع للأصل ما ممكنش بالحساب (computationally infeasible). الطريقة الوحيدة: تخمن كلمة، دير ليها hash، وقارن.

هادشي سميتو one-way function: طريق فاتجاه واحد.

كيفاش كيدخلك الموقع بلا ما يعرف الـ password؟

دابا نرجعو للسؤال ديال اللول. ملي كتسجل فشي موقع مزيان، وكتختار salam123، الموقع ما كيكتبش salam123. كيدير ليها hash، وكيخبي غير الطابع:

printf 'salam123' | shasum -a 256
7508f65a129e0b9cd1d9153ce631f4fed24b3c124018ece868508977e2f1f8d9  -

يعني فالـ database ديال الموقع، الـ password ديالك ما كايناش. كاين غير 7508f65a….

ملي كتدخل، كتكتب الـ password. الموقع كيدير ليه hash فالبلاصة، وكيقارن مع الطابع اللي عندو:

  1. نفس الطابع؟ دخل.
  2. طابع آخر؟ الـ password غالط.

وهادشي علاش ملي كتنساه، كيقول ليك دير واحد جديد: عندو غير الطابع، والطابع ما كيرجعش. الـ OWASP، يعني Open Worldwide Application Security Project، كتقولها بالواضح: الـ passwords خاصهم يتخباو بالـ hash، ماشي بالتشفير ولا كيف ما هوما.

علامة خايبة: إلا شي موقع صيفط ليك الـ password القديم كيف ما هو، راه عندو مكتوب.

ولكن… إلا تسربو الطوابع؟

هادشي مزيان… ولكن تخيل الموقع تسرق، وتسربو الطوابع ديال كاع الناس. واش صافي، ما كاين خوف؟ ماشي ديما.

شوف: بزاف ديال الناس كيختارو نفس الـ passwords: 123456، password، salam123… والـ hash ديال 123456 ديما كيبدا بـ 8d969eef، عند الجميع:

printf '123456' | shasum -a 256
8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92  -

يعني اللي سرق، يقدر يوجد ليستة ديال الـ passwords المشهورين مع الطوابع ديالهم، ويقارن. كل طابع تشابه، عرف الـ password. ماشي كيرجع الـ hash للور… كيخمن للقدام، وبالزربة.

والـ SHA-256 زربان بزاف. جربت فالماك ديالي:

openssl speed -seconds 2 -bytes 16 sha256

النتيجة: 146810.49k bytes فالثانية على كلمات ديال 16 حرف، يعني كثر من 9 ملايين ديال الـ hashes فالثانية، وبـ thread واحد. للملفات، هادي مزيانة. ولكن للـ passwords، معناها 9 ملايين ديال التخمينات فالثانية. وهادشي علاش OWASP كتقول بلي الـ hashes الزربانين بحال SHA-256 ما صالحينش للـ passwords.

الحل الأول: الـ salt

الموقع كيزيد لكل واحد شي حروف عشوائية قبل الـ hash، بحال رشة ديال الملحة. وسميتها salt.

printf 'a1b2c3d4salam123' | shasum -a 256
printf 'f9e8d7c6salam123' | shasum -a 256
e9619a01cc417dc1779f1c6b6c55c3ef19ee6384861a76fe70cde6c01bb40038  -
c729067e71e7f0b9aa8c9bcc54257aebde7815c144ce4c8ce5241a1a8eada92c  -

نفس salam123… جوج طوابع مختالفين: e9619a01 وc729067e. هكا الليستة الواجدة ما بقات صالحة لوالو: خاص اللي سرق يخمن لكل واحد بوحدو. (الـ salts هنا قصار باش يبانو مزيان، فالمواقع الحقيقية كيكونو أطول.)

الـ salt: نفس الـ password، جوج طوابع مختالفين

الحل التاني: hash بطيء بالعاني

OWASP كتنصح بـ Argon2id، ولا bcrypt فالأنظمة القديمة (بـ work factor ديال 10 ولا كثر). وحتى الـ NIST كتقول بلي الـ passwords خاصهم يتخباو بـ salt، وبـ hash عندو تكلفة (cost factor)، باش كل تخمين يغلى على اللي سرق.

جربت bcrypt فالماك، بـ cost ديال 12:

htpasswd -bnBC 12 "" salam123

كل مرة كيخرج طابع آخر (حيت الـ salt داخل فيه)، وكيبدا بـ $2y$12$. وكل hash خدا تقريبا 0.2 ثانية (8 ديال المرات فـ 1.557 ثانية). يعني قريب 5 فالثانية، بلاصة 9 ملايين.

انتا ملي كتدخل، ما كتحسش بيها. ولكن اللي كيخمن: داكشي اللي كان كياخد ثانية، ولا كياخد قريب 3 سيمانات.

الطريقة شحال فالثانية (فالماك ديالي)
SHA-256 كثر من 9,000,000
bcrypt (cost 12) تقريبا 5

جرب معايا 1: تأكد بلي الملف ما تبدلش فالطريق

بزاف ديال الشركات كيحطو الطابع ديال الملفات ديالهم فالموقع. مثلا Ubuntu، نظام التشغيل، كتنشر ملف سميتو SHA256SUMS فـ releases.ubuntu.com/26.04. وفيه النسخة 26.04.1 ديال الـ desktop، اللي فيها 6 GB:

601e30fbf5d97759367c632e2c33630665039b7e2158fd068403da3ccf1bda1f *ubuntu-26.04.1-desktop-amd64.iso

فالماك

  1. حل الـ Terminal (Cmd + Space، وكتب Terminal).
  2. دخل للدوسي فين كاين الملف، مثلا cd ~/Downloads.
  3. كتب shasum -a 256 والسمية ديال الملف:
shasum -a 256 ubuntu-26.04.1-desktop-amd64.iso
  1. إلا الطابع اللي خرج ليك هو نفس اللي فالموقع، حرف بحرف، الملف سالم.

ولاستيس: خلي الماكينة هي اللي تقارن. عطيها السطر ديال الموقع، و-c كتقول ليك OK ولا FAILED:

echo "601e30fbf5d97759367c632e2c33630665039b7e2158fd068403da3ccf1bda1f *ubuntu-26.04.1-desktop-amd64.iso" | shasum -a 256 -c

أنا ما تيليشارجيتش الـ 6 GB ديال Ubuntu. جربت -c على الملف ديال التجربة ديال 1 GB:

echo "eb023006246ba8e23b4f135c538279d0f5649d2982d73bc5fd6e80898f23b49c  film-test.bin" | shasum -a 256 -c
film-test.bin: OK

ومن بعد نسخت الملف، وبدلت فيه byte واحد (حرف X فالبلاصة 500,000,000)، وعطيتو نفس الطابع:

echo "eb023006246ba8e23b4f135c538279d0f5649d2982d73bc5fd6e80898f23b49c  film-test-modified.bin" | shasum -a 256 -c
film-test-modified.bin: FAILED
shasum: WARNING: 1 computed checksum did NOT match

byte واحد من مليار، والطابع ولا 49e1342c…. حتى أصغر تبديل كيبان.

فالـ Windows

  1. حل الـ PowerShell (كتب PowerShell فـ Start).
  2. دخل للدوسي فين كاين الملف: cd $HOME\Downloads.
  3. كتب Get-FileHash والسمية ديال الملف. وهو خدام بالـ SHA256 من الأول:
Get-FileHash .\ubuntu-26.04.1-desktop-amd64.iso | Format-List
Algorithm : SHA256
Hash      : 601E30FBF5D97759367C632E2C33630665039B7E2158FD068403DA3CCF1BDA1F
Path      : C:\Users\...\Downloads\ubuntu-26.04.1-desktop-amd64.iso

ما عنديش Windows هنا، فهاد الجواب مبني على المثال ديال Microsoft، والطابع هو اللي منشور فالموقع ديال Ubuntu. الطابع كيخرج بالحروف الكبار، وماشي مشكل. وباش يقارن بوحدو، زيد -eq والطابع ديال الموقع:

(Get-FileHash .\ubuntu-26.04.1-desktop-amd64.iso).Hash -eq "601e30fbf5d97759367c632e2c33630665039b7e2158fd068403da3ccf1bda1f"
True

True يعني الملف سالم، وFalse يعني تبدل ولا تيليشارجا غالط. والمقارنة بـ -eq ما كتفرقش بين الحروف الصغار والكبار، حسب Microsoft.

خود الطابع ديما من الموقع الرسمي. وشكون اللي كيضمن الموقع براسو؟ هادي ديال الحلقة الرابعة: التوقيع الرقمي.

جرب معايا 2 (بونوس): واش شي password تسرب؟

كاين موقع معروف سميتو Have I Been Pwned. فيه Pwned Passwords: مئات الملايين ديال الـ passwords اللي تسربو.

جربت بـ 123456. هو خدام بـ SHA-1، نسخة قديمة من نفس العائلة ديال SHA-256:

printf '123456' | shasum -a 1
7c4a8d09ca3762af61e59520943dc26494f8941b  -

وصيفطت غير الخمسة اللولين، 7C4A8، بـ curl:

curl -s https://api.pwnedpasswords.com/range/7C4A8

جاوبني بـ 1920 طابع، كاملين كيبداو بنفس الخمسة. وفالماك ديالي، قلبت فيهم على الباقي ديال الطابع ديالي:

curl -s https://api.pwnedpasswords.com/range/7C4A8 | grep D09CA3762AF61E59520943DC26494F8941B
D09CA3762AF61E59520943DC26494F8941B:210463629

ولقيتو: 123456 بان فالتسريبات 210,463,629 مرة. كثر من 210 مليون! وsalam123؟ الطابع ديالها كيبدا بـ 66F1A، وبانت 107,880 مرة. (هاد الأرقام ديال 14 نونبر 2026، وكتزاد ملي كتزاد تسريبات جداد.)

علاش هادشي آمن؟

الموقع ما شاف لا الـ password، لا الطابع كامل. شاف غير 7C4A8، اللي فيها 1920 طابع. والمقارنة دارت عندي أنا. بحال إلا تخبيتي وسط 1920 واحد. وهادي سميتها k-anonymity.

k-anonymity: الموقع شاف غير 7C4A8، وانتا مخبي وسط 1920

رد بالك: الـ passwords الحقيقيين ديالك، ما تكتبهمش فالـ Terminal، حيت كيعقل على الأوامر اللي كتبتي. استعمل الصفحة ديال Pwned Passwords، كتخدم بنفس الطريقة: الـ password كيدار ليه hash عندك، وغير 5 حروف اللولين اللي كيخرجو. ولا الـ password manager، اللي غادي نشوفو فالحلقة السادسة. وهادي هي الطريقة حتى فالـ Windows.

نعاودو بالزربة

  1. الـ hash بحال طابع الصبع: كيعرف الأصل، وما كيرجعوش.
  2. نفس الحاجة، نفس الطابع. حرف واحد، طابع جديد. وديما نفس الطول.
  3. الموقع كيخبي الطابع، ماشي الـ password، مع salt وhash بطيء (Argon2id ولا bcrypt).
  4. وبالطابع، كتعرف واش الملف ما تبدلش، وواش الـ password تسرب.

ودابا، المرة الجاية اللي يقول ليك شي موقع: دير password جديد… عرفتي علاش: حيت عمرو ما عرف القديم. عندو غير طابع الصبع ديالو.

سؤال ليك

فالماك، كتب printf 'salam' | shasum -a 256. ولا فالـ Windows، دير Get-FileHash لشي ملف تيليشارجيتيه، وقارنو مع الموقع ديالو. وقول لينا فالكومونتيرات: واش بدا ليك الطابع بـ 0582bd2c؟ ولا خرج ليك OK؟ وما تكتب لا password، لا طابع ديال شي password.

الحلقة الجاية

التشفير. وهنا الفرق الكبير: الـ hash ما كيرجعش… والتشفير كيرجع، إلا كان عندك الساروت، يعني الـ key. صندوق ديال الزليج، بساروت واحد، عندك انتا وعند صاحبك.

المصادر

Digital Arabians Author

DigitalArabians

مدونة DigitalArabians متخصصة في تعليم البرمجة بالدارجة المغربية، تهدف إلى تبسيط مفاهيم البرمجة والتقنية للمتحدثين بالعربية. نقدم محتوى تعليمي عالي الجودة لمساعدة المبتدئين والمحترفين على تطوير مهاراتهم البرمجية.