FlowingDev

شرح تشفير AES: الصندوق الرقمي المنيع المفضل في العالم

تعلم كيف يستخدم تشفير AES المتماثل مفتاحًا واحدًا مبنيًا على كلمة مرور لتحويل النص المقروء إلى نص مشفر والعكس، لتأمين البيانات الحديثة.

جرّب الأداة: أدوات التشفير

في جملة واحدة

تشفير AES المعتمد على كلمة مرور هو طريقة قياسية لبعثرة (تشفير) وفك بعثرة (فك تشفير) البيانات باستخدام مفتاح سري واحد يتم إنشاؤه من كلمة مرور تختارها.

المشكلة التي يحلها

منذ أن بدأ البشر في تدوين الأشياء، أردنا أن ندون أشياء لا يستطيع الآخرون قراءتها. من الجنرالات الرومان الذين كانوا يغيرون ترتيب الحروف في الرسائل (شفرة قيصر) إلى الجواسيس الذين استخدموا مفاتيح التشفير لمرة واحدة في الحرب الباردة، كان الهدف دائمًا هو نفسه: السرية. إذا وقعت الرسالة في الأيدي الخطأ، يجب أن تكون مجرد كلام فارغ.

في العصر الرقمي، هذه المشكلة في كل مكان. بياناتك تطير عبر شبكات Wi-Fi عامة مشبوهة، وتستقر على خوادم تملكها شركات عملاقة، ويتم نسخها احتياطيًا على أقراص صلبة قد ينتهي بها المطاف في مكب نفايات. كيف تضمن أن رسالتك الخاصة، أو قائمة مفاتيح الـ API الخاصة بك، أو وصفتك السرية للكعك تظل سرية؟

كان من السهل كسر الشفرات القديمة، خاصة مع أجهزة الكمبيوتر التي يمكنها تجربة مليارات التوليفات في الثانية. كنا بحاجة إلى شيء أفضل. أفضل بكثير. وهنا يأتي دور معيار التشفير المتقدم، أو AES.

في أواخر التسعينيات، أجرى المعهد الوطني الأمريكي للمعايير والتكنولوجيا (NIST) مسابقة عامة لإيجاد بديل لمعيار تشفير البيانات (DES) الذي عفا عليه الزمن. لم يكونوا يبحثون عن خوارزمية سرية تم طهيها في قبو حكومي؛ بل أرادوا شفرة شفافة وعامة ومختبرة بقسوة يمكن للعالم كله أن يثق بها. بعد سنوات من نزالات التشفير الطاحنة، توجت خوارزمية بلجيكية اسمها "Rijndael" (وهي دمج لأسماء مخترعيها، Rijmen و Daemen) باللقب في عام 2001.

كانت سريعة وفعالة، والأهم من ذلك، أنها صمدت أمام هجوم عالمي من محاولات كسرها. أصبحت تُعرف باسم AES، المعيار الذي نستخدمه اليوم لإغلاق كل شيء من المواقع الآمنة (HTTPS) إلى الأقراص الصلبة المشفرة والملفات الحساسة. إنها تحل مشكلة حفظ الأسرار القديمة بدقة رياضية حديثة.

كيف يعمل من الداخل

يبدو AES وكأنه سحر: تهمس بعبارة سرية، ويتحول نصك إلى فوضى غير قابلة للقراءة. تهمس بها مرة أخرى، ويعود كل شيء كما كان. ولكن تحت الغطاء، هو مجرد سلسلة من الخطوات الرياضية الذكية والقابلة للتكرار.

التشفير المتماثل مقابل غير المتماثل

أولاً، مفهوم أساسي. يأتي التشفير بنكهتين رئيسيتين. AES هو تشفير متماثل (symmetric)، مما يعني أن نفس المفتاح يُستخدم للقفل (التشفير) والفتح (فك التشفير). إنه مثل مفتاح منزلك—يقفل الباب، ونفس المفتاح يفتحه. هذا سريع وفعال.

النكهة الأخرى هي التشفير غير المتماثل (asymmetric) (أو التشفير بالمفتاح العام). هذا يستخدم مفتاحين مختلفين: مفتاح عام لقفل البيانات ومفتاح خاص لفتحها. إنه مثل صندوق البريد: يمكن لأي شخص وضع رسالة فيه (باستخدام الفتحة العامة)، لكنك أنت فقط من يملك المفتاح الخاص لفتحه وقراءة البريد. هذا رائع عندما لا يمكنك مشاركة مفتاح سري بشكل آمن مسبقًا، لكنه أبطأ بكثير من التشفير المتماثل.

التشفير المعتمد على كلمة مرور يستخدم النموذج المتماثل لأنك أنت ومن يحتاج إلى فك تشفير البيانات ستشاركون نفس كلمة المرور.

من كلمة المرور إلى المفتاح: الـ KDF

إليك تفصيل حاسم: كلمة مرورك، "SuperSecretP@ssw0rd123"، ليست هي مفتاح التشفير. كلمات المرور التي يتذكرها البشر ليست عشوائية بما فيه الكفاية أو طويلة بما فيه الكفاية لتكون مفاتيح تشفير آمنة.

بدلاً من ذلك، يتم إدخال كلمة مرورك في دالة اشتقاق المفتاح (Key Derivation Function أو KDF). فكر في الـ KDF كخوارزمية ذات غرض خاص مصممة لتحويل كلمة مرور إلى مفتاح تشفير قوي وثابت الحجم. الـ KDFs الحديثة مثل PBKDF2 (Password-Based Key Derivation Function 2) أو Argon2 تقوم بثلاثة أشياء مهمة:

  1. إضافة Salt: الـ Salt هو قطعة بيانات عشوائية يتم إنشاؤها لكل عملية تشفير جديدة. يتم مزجها مع كلمة مرورك قبل معالجتها. هذا يعني أنه حتى لو كان لدى مستخدمين نفس كلمة المرور، فإن مفاتيح التشفير الناتجة ستكون مختلفة تمامًا. هذا وحده يهزم هجمات "جداول قوس قزح" (rainbow table)، حيث يستخدم المتسللون جداول محسوبة مسبقًا لكلمات المرور الشائعة وما ينتج عنها من قيم hash. يتم تخزين الـ salt بجانب البيانات المشفرة؛ إنه ليس سراً، مجرد مكون فريد.
  2. تمديد المفتاح (Stretching): تقوم الـ KDF بتمرير كلمة المرور والـ salt عبر خوارزمية hash (مثل SHA-256) ليس مرة واحدة، بل آلاف، أو حتى ملايين المرات. وهذا ما يسمى "التكرارات" أو "معامل الجهد" (iterations/work factor). يجعل العملية بطيئة عن قصد. بالنسبة لك، الانتظار بضع مئات من الميلي ثانية ليس بالأمر الجلل. بالنسبة لمهاجم يحاول تخمين كلمة مرورك بالقوة الغاشمة (brute-force)، فهو كابوس، مما يجعله مكلفًا حسابيًا لتجربة مليارات التخمينات.
  3. إنتاج المفتاح: بعد كل هذا العمل، تنتج الـ KDF مفتاحًا بالطول المطلوب (على سبيل المثال، 256 بت) يبدو كضوضاء عشوائية بحتة. هذا هو المفتاح الفعلي الذي يستخدمه AES.
Your Password + Random Salt + Many Iterations -> Strong Encryption Key
("hunter2"  + "a3f9d..."   + 100,000 rounds) -> 256-bit AES Key

شفرة AES نفسها: مصفوفة الحالة والجولات

الآن إلى الحدث الرئيسي. يعمل AES على كتل بيانات ذات حجم ثابت—دائمًا 128 بت (16 بايت) في كل مرة. يتم تقطيع رسالتك النصية العادية إلى هذه الكتل المكونة من 16 بايت. يتم تحميل كل كتلة في شبكة 4x4 من البايتات تسمى مصفوفة الحالة (state matrix).

ثم تمر هذه الحالة عبر سلسلة من التحويلات المتطابقة تسمى الجولات (rounds). يعتمد عدد الجولات على حجم المفتاح:

  • AES-128: 10 جولات
  • AES-192: 12 جولة
  • AES-256: 14 جولة

تتكون كل جولة (باستثناء الأخيرة) من أربع خطوات:

  1. SubBytes: يتم تبديل كل بايت في مصفوفة الحالة بواحد مختلف باستخدام جدول بحث قياسي (يُعرف بـ "Rijndael S-box"). هذه هي الخطوة الرئيسية غير الخطية التي تدخل التشويش.
  2. ShiftRows: يتم إزاحة البايتات في كل صف من المصفوفة بشكل دائري. لا يتم إزاحة الصف الأول، ويتم إزاحة الثاني بمقدار واحد، والثالث بمقدار اثنين، والرابع بمقدار ثلاثة. هذا يخلط البيانات.
  3. MixColumns: يتم إجراء عملية رياضية على كل عمود، مما يمزج البايتات معًا. يوفر هذا الانتشار (diffusion)، مما ينشر تأثير بايت واحد من النص الأصلي على الكتلة بأكملها.
  4. AddRoundKey: يتم دمج جزء من مفتاح التشفير الرئيسي ("مفتاح الجولة" الخاص بهذه الجولة) مع الحالة باستخدام عملية XOR. هنا يتم فعليًا مزج المفتاح السري مع بياناتك.

يتم تكرار هذا التسلسل SubBytes -> ShiftRows -> MixColumns -> AddRoundKey مرارًا وتكرارًا. كل جولة تزيد من بعثرة البيانات حتى، بعد الجولة النهائية، تصبح مصفوفة الحالة كتلة من النص المشفر المشوش تمامًا. لفك التشفير، ما عليك سوى تشغيل الخطوات بالعكس بنفس المفتاح.

تجميع كل شيء معًا: أوضاع التشفير والحشو

AES يعرف فقط كيفية تشفير كتلة واحدة بحجم 16 بايت. ماذا عن رسالتك التي يبلغ حجمها 500 بايت؟ هنا يأتي دور أوضاع التشغيل (modes of operation). وضع التشغيل هو وصفة لاستخدام شفرة كتل لتشفير دفق من البيانات بأي طول.

الأوضاع القديمة مثل CBC (Cipher Block Chaining) كانت بها بعض الثغرات الأمنية. الوضع الحديث والموصى به هو GCM (Galois/Counter Mode). GCM هو وضع "تشفير موثّق" (authenticated encryption)، وهي طريقة فاخرة للقول بأنه يوفر شيئين بسعر واحد:

  • السرية (Confidentiality): يقوم بتشفير بياناتك حتى لا يتمكن أحد من قراءتها.
  • الأصالة (Authenticity): ينتج "علامة توثيق" (authentication tag) قصيرة. إذا تم تغيير بت واحد من النص المشفر أثناء النقل، فلن تتطابق العلامة عند فك التشفير، وستفشل العملية. يخبرك هذا ليس فقط أن البيانات كانت سرية، ولكن أيضًا أنه لم يتم العبث بها.

قصص من الواقع

سر عميل المصممة المستقلة

كانت المصممة "آنيا" بحاجة إلى إرسال نموذج أولي لمنتج جديد لم يُعلن عنه بعد إلى عميلها. يحتوي ملف النموذج على علامات تجارية حساسة ومعلومات استراتيجية. شعرت أن إرساله بالبريد الإلكتروني محفوف بالمخاطر - فالبريد الإلكتروني غير آمن بشكل سيء السمعة. وكان إعداد بوابة نقل ملفات آمنة مبالغًا فيه لعملية تسليم لمرة واحدة. بدلاً من ذلك، قامت آنيا بتشفير ملف ZIP الذي يحتوي على عملها باستخدام كلمة مرور. ثم اتصلت بالعميل وأخبرته بكلمة المرور عبر الهاتف. الآن يمكنها إرسال الملف المشفر بالبريد الإلكتروني بأمان، مع العلم أن العميل فقط هو من يمكنه فتحه.

الدرس: التشفير المعتمد على كلمة مرور أداة رائعة للمشاركة الآمنة والمخصصة للملفات الحساسة بين شخصين دون الحاجة إلى بنية تحتية معقدة.

ملف الإعدادات الخاص بالمطور

كان "بن" يبني تطبيق ويب يتصل بقاعدة بيانات ويستخدم واجهة برمجة تطبيقات (API) للدفع تابعة لجهة خارجية. كانت كلمة مرور قاعدة البيانات ومفتاح الـ API مخزنين في ملف config.json. كان بحاجة إلى رفع الكود الخاص به إلى مستودع Git مشترك، لكن رفع ملف الإعدادات بأسرار نصية واضحة سيكون خرقًا أمنيًا كارثيًا. لذا، قام بتشفير config.json لإنشاء config.json.enc. لم يتم تخزين كلمة المرور لفك التشفير في الكود. أثناء التطوير، كان يقوم ببساطة بفك تشفير الملف محليًا. في بيئة الإنتاج، تم تمرير كلمة المرور بشكل آمن إلى التطبيق كمتغير بيئة (environment variable)، والذي استخدمه التطبيق لفك تشفير ملف الإعدادات عند بدء التشغيل.

الدرس: تشفير ملفات الإعدادات يسمح لك بتخزين "الأسرار في حالة سكون" (secrets at rest) بأمان إلى جانب الكود الخاص بك، مع فصل البيانات السرية عن المفتاح السري اللازم لفتحها.

ملاحظات الصحفية في السحابة

كانت "ماريا"، وهي صحفية استقصائية، تعمل على قصة حساسة. احتفظت بملاحظات مقابلاتها وأبحاثها في مجلد تتم مزامنته مع خدمة تخزين سحابي شهيرة. بينما كانت تثق في أمان الخدمة، كانت قلقة بشأن التهديدات المحتملة: موظف مارق في الشركة السحابية، أو أمر استدعاء حكومي، أو خرق كبير للبيانات. لحماية مصادرها، قامت بتشفير كل مستند بكلمة مرور قوية وفريدة قبل حفظه في المجلد المتزامن. الآن، حتى لو تم اختراق حسابها السحابي بالكامل، ستكون ملاحظاتها مجرد كلام فارغ غير قابل للقراءة.

الدرس: يوفر التشفير طبقة شخصية من "أمان انعدام الثقة" (zero-trust security)، مما يضمن بقاء بياناتك خاصة حتى عند تخزينها على أنظمة لا تتحكم فيها.

أخطاء وفخاخ شائعة

  • استخدام كلمة مرور ضعيفة. تشفير AES-256 غير قابل للكسر عمليًا بالقوة الغاشمة. لكن الـ KDF الذي يولد المفتاح من كلمة مرورك يكون عرضة للخطر إذا كانت كلمة المرور هي "12345" أو "password". ينهار أمان النظام بأكمله إلى قوة كلمة مرورك. استخدم عبارة مرور طويلة وعشوائية وفريدة من نوعها.
  • نسيان كلمة المرور. مع التشفير المعتمد على كلمة مرور، لا يوجد رابط "هل نسيت كلمة المرور؟". كلمة المرور هي المفتاح. إذا فقدتها، فإن البيانات تضيع إلى الأبد. ليست مجرد مقفلة؛ بل تبخر المفتاح. قم بتخزين كلمات المرور الخاصة بك بأمان في مدير كلمات مرور.
  • صناعة التشفير بنفسك (Rolling your own crypto). هذه هي الخطيئة الكبرى في أمن البرمجيات. قد تعرف ما هي AES و GCM و PBKDF2، لكن دمجها بشكل آمن مليء بالمزالق. هل استخدمت مولد أرقام عشوائي آمن من الناحية التشفيرية للـ salt؟ هل يتم التعامل مع علامة التوثيق الخاصة بك بشكل صحيح؟ استخدم دائمًا مكتبة تشفير محترمة ومراجعة من قبل الأقران للغة البرمجة التي تستخدمها. لا تبنِ القفل بنفسك؛ اشترِ واحدًا من صانع أقفال محترف.
  • إعادة استخدام الـ salt أو الـ IV. يجب أن يكون الـ salt (لـ KDF) و الـ IV/nonce (لوضع التشفير) عشوائيين وفريدين لكل عملية تشفير واحدة بنفس المفتاح. يمكن أن تؤدي إعادة استخدامهما إلى كسر أمان الشفرة بشكل كارثي. المكتبات الجيدة تتعامل مع هذا نيابة عنك، لكنه فخ يجب الانتباه إليه.

لماذا يجب أن يكون على رادارك

إذا كنت مطورًا، فستتعامل مع الأسرار. هذا أمر لا مفر منه. سواء كان ذلك سلسلة اتصال بقاعدة البيانات، أو مفتاح API، أو معلومات شخصية للمستخدم، أو مجرد ملف سجلات حساس، سيكون لديك بيانات يجب عدم كشفها.

تشفير AES المعتمد على كلمة مرور هو أداتك المفضلة لضمان السرية في حالة السكون (confidentiality at rest). إنه الحل القياسي والمجرب في المعارك من أجل:

  • تشفير أسرار التطبيق في قاعدة الكود الخاصة بك.
  • تأمين النسخ الاحتياطية قبل إرسالها إلى التخزين السحابي.
  • حماية حقول البيانات الحساسة في قاعدة البيانات (على سبيل المثال، تشفير رقم الضمان الاجتماعي قبل تخزينه).
  • إنشاء طريقة بسيطة وآمنة للمستخدم لإرسال ملف حساس إليك.

إنه اللبنة الأساسية للحفاظ على سرية الأسرار في عالم يتم فيه نسخ البيانات ومشاركتها وتخزينها في أماكن أكثر مما يمكننا إحصاؤه.

تعمق أكثر

  • FIPS PUB 197: المعيار الرسمي من NIST الذي يحدد AES (Rijndael). إنه كثيف، لكنه المصدر الرسمي.
  • Wikipedia: Advanced Encryption Standard: نظرة عامة شاملة وسهلة القراءة عن تاريخ AES وتصميمه وتحليله الأمني.
  • Wikipedia: PBKDF2: نظرة عميقة على دالة اشتقاق المفاتيح الأكثر شيوعًا المستخدمة مع كلمات المرور.
  • NIST Special Publication 800-38D: المواصفات الرسمية لوضع التشغيل GCM.
  • Cryptography I (Coursera/Stanford): دورة جامعية مجانية يقدمها دان بونيه توفر أساسًا متينًا في التشفير التطبيقي.

انتهينا من النظرية. حان وقت التطبيق — 100% في متصفحك.

جرّب الأداة: أدوات التشفير