AES (معيار التشفير المتقدم) هو خوارزمية تشفير متماثل بالكتل تم اعتمادها في عام 2001 من قبل المعهد الوطني للمعايير والتكنولوجيا الأمريكي (NIST) كمعيار رسمي. حل AES محل DES القديم ومنذ ذلك الحين أصبح خوارزمية التشفير الأكثر انتشاراً في العالم، المستخدمة من الأنظمة المصرفية إلى التطبيقات المحمولة. وفقاً لـ NIST (2023)، يوفر AES أماناً يعادل 2^256 عملية لمفتاح بطول 256 بت، مما يجعله غير قابل للاختراق لهجمات القوة العمياء الحديثة. NIST FIPS 197، 2023
الملخص
AES (معيار التشفير المتقدم) هو تشفير متماثل بالكتل طوره عالما التشفير البلجيكيان جوان ديمن وفينسنت رايمن تحت اسم Rijndael. في عام 2001، اختار NIST خوارزمية Rijndael كفائزة في مسابقة معيار التشفير الأمريكي الجديد بعد خمس سنوات من الاختبار والتحليل العلني. يعمل AES مع كتل بيانات ذات حجم ثابت (128 بت) ويدعم ثلاثة أطوال للمفاتيح: 128 و 192 و 256 بت. يعتمد عدد جولات التحويل على طول المفتاح: 10 جولات لمفتاح 128 بت، و 12 لمفتاح 192 بت، و 14 لمفتاح 256 بت. تتضمن كل جولة أربع عمليات: SubBytes (استبدال غير خطي للبايتات عبر S-box)، و ShiftRows (إزاحة دورانية للصفوف)، و MixColumns (خلط الأعمدة)، و AddRoundKey (XOR مع مفتاح الجولة).
بدأ تطوير AES في عام 1997 عندما أعلن NIST عن مسابقة لاستبدال DES، الذي تم اختراق مفتاحه 56 بت في 22 ساعة في عام 1998 على جهاز Deep Crack المتخصص. شاركت خمسة عشر خوارزمية من دول مختلفة، بما في ذلك Serpent (المملكة المتحدة) و Twofish (الولايات المتحدة) و RC6 (الولايات المتحدة). بحلول نهائيات عام 1999، بقي 5 مرشحين. فازت Rijndael بفضل مزيجها من السرعة العالية على جميع المنصات (من متحكمات 8 بت إلى خوادم 64 بت)، ومقاومتها لتحليل الشفرات، وتنفيذها المضغوط في العتاد. منذ عام 2006، يُستخدم AES لتشفير البيانات المصنفة SECRET و TOP SECRET في الأنظمة الحكومية الأمريكية. اليوم، AES مدمج في جميع البروتوكولات الرئيسية: TLS 1.2/1.3، IPsec، SSH، Wi-Fi WPA2/WPA3، و Bluetooth BR/EDR.
AES يعالج البيانات في كتل بحجم 128 بت (16 بايت)، منظمة كمصفوفة 4x4 بايت تسمى state. تؤدي كل جولة تشفير سلسلة من التحويلات الحتمية التي تخلق معاً تأثير الانهيار الجليدي: تغيير بت واحد من بيانات الإدخال يغير حوالي 50% من بتات المخرجات. هذا التأثير يجعل AES مقاوماً لتحليل الشفرات التفاضلي والخطي — الطرق الأساسية لكسر تشفير الكتل.
تبدأ العملية بـ AddRoundKey — إجراء XOR للمفتاح الأولي مع state. ثم يتم تنفيذ الجولات: SubBytes تستبدل كل بايت من state بقيمة من S-box (جدول الاستبدال). ShiftRows تزيح الصف الثاني بشكل دوري بمقدار موضع واحد، والثالث بمقدار 2، والرابع بمقدار 3 — مما يضمن الخلط بين الأعمدة. MixColumns تضرب كل عمود من state بمصفوفة ثابتة في حقل غالوا GF(2^8)، مما يخلق اعتماداً لكل بايت ناتج على جميع البايتات الأربع المدخلة للعمود. AddRoundKey تطبق XOR مع مفتاح الجولة التالي، المشتق من المفتاح الأصلي عبر Key Expansion. الجولة الأخيرة تخلو من عملية MixColumns. يستخدم فك التشفير العمليات العكسية InvSubBytes و InvShiftRows و InvMixColumns و AddRoundKey بترتيب عكسي. بالنسبة لمطوري التطبيقات المحمولة، ليس من الضروري فهم البنية الداخلية لـ AES — يكفي معرفة كيفية استدعاء واجهات برمجة التطبيقات المدمجة للمنصة بشكل صحيح مع المعاملات المناسبة.
الخاصية الرئيسية لـ AES التي تضمن قوته التشفيرية هي تأثير الانهيار الجليدي. يؤدي تغيير بت واحد في النص العادي أو المفتاح إلى تغيير حوالي 50% من بتات النص المشفر، مما يجعل AES مقاوماً للغاية لتحليل الشفرات التفاضلي والخطي. يخلق الجمع بين SubBytes (اللاخطية عبر S-box) و MixColumns (الانتشار عبر الضرب في حقل غالوا) تعقيداً رياضياً بحيث لا يسمح حتى بمعرفة جزء من النص المشفر باستعادة المفتاح أسرع من القوة العمياء. وفقاً لتحليل NIST (2018)، فإن أفضل هجوم معروف على AES-128 — هجوم biclique — يقلل طول المفتاح الفعال بمقدار 2 بت فقط (إلى 126.2 بت)، دون إعطاء ميزة عملية للمهاجم. بالنسبة لـ AES-256، لا توجد أي هجمات عملية مجدية تتجاوز القوة العمياء.
AES يدعم ثلاثة أحجام للمفاتيح، كل منها يتوافق مع مستوى معين من القوة التشفيرية. يؤثر اختيار حجم المفتاح على الأمان والأداء ومتطلبات موارد الجهاز.
| حجم المفتاح | عدد الجولات | مستوى الأمان | التطبيق |
|---|---|---|---|
| AES-128 | 10 | 128 بت | التطبيقات التجارية، TLS |
| AES-192 | 12 | 192 بت | الأنظمة الحكومية (SECRET) |
| AES-256 | 14 | 256 بت | TOP SECRET، القطاع المالي |
قاعدة عملية: للتطبيقات المحمولة استخدم AES-256 افتراضياً. فرق الأداء بين AES-128 و AES-256 على الأجهزة الحديثة مع دعم AES-NI لا يتجاوز 10–15%، لكن مستوى الأمان يتضاعف. وفقاً للتحليل الكمي (Grassl et al.، 2016)، يتطلب اختراق AES-128 حوالي 2^77 عملية كمومية عبر خوارزمية جروفر، بينما يتطلب AES-256 حوالي 2^149، مما يجعل AES-256 مقاوماً للهجمات الكمومية للسنوات 20–30 القادمة. حتى AES-128 يوفر حماية كافية للغالبية العظمى من السيناريوهات التجارية: اختراق مفتاح 128 بت بالقوة العمياء يتطلب طاقة أكثر مما موجود في الكون وفقاً لتقدير بروس شناير. ومع ذلك، فإن معايير الأمان (GDPR، HIPAA، PCI DSS) غالباً ما تتطلب صراحة AES-256، لذلك يجب أن تستخدم مشاريع الإنتاج أقصى طول للمفتاح.
AES كتشفير بالكتل يقوم بتشفير كتل ذات حجم ثابت (128 بت). لتشفير بيانات ذات طول عشوائي، تُستخدم أوضاع التشغيل. يؤثر اختيار الوضع بشكل حاسم على الأمان: الوضع الخاطئ يمكن أن يلغي قوة AES.
لمشاريع المحمول استخدم AES-256-GCM مع nonce بطول 12 بايت. يحل GCM مشكلتين في وقت واحد: تشفير البيانات والمصادقة، مما يمنع هجمات padding oracle و chosen ciphertext. يدعم Android Keystore و iOS CryptoKit AES-GCM بشكل مدمج دون الحاجة إلى أساسيات تشفير إضافية. عند العمل مع GCM، من المهم جداً عدم إعادة استخدام nonce مع نفس المفتاح — فهذا يدمر أمان التشفير بالكامل. قم بتوليد nonce عشوائي جديد لكل تشفير واحفظه مع النص المشفر.
لنلقِ نظرة على مثال لتنفيذ آمن لـ AES-256-GCM على Android باستخدام Jetpack Security. يوضح الكود أدناه الدورة الكاملة: إنشاء مفتاح AES-256 عبر MasterKey، تشفير وفك تشفير سلسلة مع بيانات موثقة إضافية (AAD).
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val securePrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
fun storeSecureData(key: String, value: String) {
securePrefs.edit().putString(key, value).apply()
}
fun readSecureData(key: String): String? {
return securePrefs.getString(key, null)
}
الميزة الرئيسية لهذا الحل هي أن AES-256-GCM يُستخدم على مستويين: لتشفير أزواج المفتاح-القيمة (PrefValueEncryptionScheme) ولحماية أسماء المفاتيح نفسها (PrefKeyEncryptionScheme يستخدم AES-256-SIV، المقاوم لإعادة استخدام nonce). يتم إنشاء MasterKey باستخدام خوارزمية AES-256-GCM وتخزينه في Android Keystore، المحمي عتادياً على الأجهزة المزودة بـ Trusted Execution Environment. على الأجهزة دون دعم عتادي (TEE)، يتم تشفير المفتاح عبر Bouncy Castle، وهو مع ذلك أكثر أماناً من التخزين في SharedPreferences.
لتشفير كميات كبيرة من البيانات مباشرة (مثل الصور أو الملفات)، استخدم AES-256-GCM عبر EncryptedFile من AndroidX Security. لتصدير المفاتيح (مثل النسخ الاحتياطي)، استخدم تشفيراً إضافياً بكلمة مرور المستخدم عبر PBKDF2 مع 100000+ تكرار.
على iOS، يتم تنظيم عمليات AES عبر إطار CryptoKit (Swift 5.0+). يتم إنشاء مفتاح AES-256 عبر SymmetricKey(size: .bits256) وتخزينه في Secure Enclave — معالج تشفير عتادي معزول عن وحدة المعالجة المركزية الرئيسية ونظام التشغيل. يوفر CryptoKit تنفيذين لـ AES: AES.GCM (موصى به) و AES.CBC (للتوافق مع الصيغ القديمة). يتم التشفير عبر طريقة seal()، التي تأخذ البيانات والمفتاح و nonce (12 بايت)، وتعيد AES.GCM.SealedBox — بنية تحتوي على النص المشفر ووسم المصادقة. فك التشفير عبر open(). توصي Apple بشدة بعدم استخدام CommonCrypto مباشرة: يختار CryptoKit تلقائياً المعاملات المثلى، ويحمي من هجمات القناة الجانبية، ويستخدم تسريع AES-NI العتادي على معالجات Apple Silicon. على الأجهزة المزودة بـ Secure Enclave، لا تغادر المفاتيح الوحدة العتادية أبداً، مما يمنع سرقتها حتى مع اختراق التطبيق بالكامل. لتسلسل المفتاح، استخدم طريقة withUnsafeBytes متبوعة بالتخزين في Keychain عبر SecItemAdd مع السمة kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
الأسئلة الشائعة
AES هو خوارزمية تحول البيانات المقروءة إلى مجموعة غير مقروءة من البايتات باستخدام مفتاح سري. نفس المفتاح مطلوب لإعادة البيانات إلى شكلها الأصلي. AES موثوق لدرجة أنه يُستخدم لتشفير الوثائق السرية للحكومة الأمريكية.
AES-128 يستخدم مفتاحاً بطول 128 بت وينفذ 10 جولات تشفير. AES-256 يستخدم مفتاحاً بطول 256 بت و 14 جولة، مما يجعله أصعب 2^128 مرة في الاختراق. للتطبيقات المحمولة، يُوصى باستخدام AES-256 بسبب فرق الأداء البسيط.
AES-256-GCM هو الوضع الأكثر أماناً والموصى به. يوفر GCM تشفيراً موثقاً (تشفير + التحقق من السلامة). وضع ECB محظور، و CBC يتطلب MAC منفصلاً. GCM هو المعيار الفعلي للتطبيقات المحمولة.
نظرياً، يمكن اختراق AES بالقوة العمياء، لكن لـ AES-256 سيتطلب 2^256 محاولة — أكثر من عدد الذرات في الكون المرئي. لا توجد هجمات عملية على AES-256. هجمات القناة الجانبية (Spectre، Meltdown) لا تخترق AES بل تسرق المفاتيح من الذاكرة، لذلك التخزين العتادي للمفاتيح أمر بالغ الأهمية.
استخدم مكتبة AndroidX Security: MasterKey.Builder مع KeyScheme.AES256_GCM ينشئ مفتاحاً محمياً في Android Keystore، ويقوم EncryptedSharedPreferences بتشفير جميع البيانات تلقائياً عبر AES-256-GCM. لا حاجة لتشفير يدوي — API آمن افتراضياً، بدون خطر أخطاء المطور.
الخلاصة
سنقوم بتطوير تطبيق جوال جاهز
تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.
اقرأ أيضًا