رمزنگاری AES:
DES قربانی حمایت دولت فدرال آمریکا شد. NIST نخواست که تجربه ناموفق DES را تکرار کند. بنابراین رقابتی چند مرحله ای از ژانویه 1977 تا نوامبر 2001 ترتیب داد تا استاندارد جدیدی برای رمزنگاری از بین روش هایی که توسط شخصیتهای حقیقی پیشنهاد شده اند، انتخاب شود و هر گونه شائبه دخالت در فرآیند طراحی و وجود (Backdoor) را از بین ببرد.
پس از طی مراحل چندگانه این رقابت:
دو جوان بلژیکی Rijmen و Daemen پیروز این رقابت شدند.
الگوریتم این دو توسط NIST استاندارد سازی و در سند FIPS 197 تحت نام AES (Advanced Encryption Standard ) عرضه شد. این الگوریتم در ابتدا Rijndael نامیده شد. این روش نه تنها DES را که الگوریتمهای دیگری مثل RC4 را نیز به حاشیه رانده است.
دلایل شگفتی سازی روش رمزنگاری Rijndael در دنیای رمزنگاری کلید متقارن :
1) عدم پیروی این روش از الگوی سنتی روشهای فیستلی و مبتنی بر حالت خاصی از «میدان های گالوا» (Galios Field ) می باشد.
2) انتخاب این روش بعنوان استاندارد دولت فدرال آمریکا در فضائی آزاد و بدون اعمال نفوذ عوامل جاسوسی یا امنیتی ایالات متحده و ثبت تحت قوانین غیر انحصاری و لذا بهره برداری آزاد از آن در محصولات مختلف
3) امنیت بسیار بالا، سرعت زیاد، پیاده سازی ساده، فضای حافظه مورد نیاز کم و قابلیت انعطاف بالا
اختلاف بين Rijndael و AES :
1) در Rijndael، طول کلید و طول بلوک داده می تواند 128، 192 و 256 بیت باشند لذا می توان گفت که Rijndael دارای 9 انتخاب متفاوت برای رمزنگاری اطلاعات است.
2) در AES طول بلوک داده صرفاً باید 128 بیتی (معادل 4 کلمه 32 بیتی) باشد ولی طول کلید را از بین یکی از مقادیر 128، 192 و 256 بیتی انتخاب می کنند بدین ترتیب AES کلاً دارای سه انتخاب است.
این پارامترها باید به الگوریتم رمزنگاری وارد شوند:
Nb: طول بلوک داده ورودی (در AES هميشه 4 است.)
Nk: طول کليد (4 ، 6 يا 8)
Nr : تعداد دورهای رمزنگاری( به طول کليد وابسته است)
بلوک داده و کليد طبق الگوی شکل زير در ماتريسی با 4 سطر ذخيره می شود و عمليات پردازش بر روی ستون های 4 بايتی انجام می گيرد.
بررسی شبه کد AES برای حالت خاص AES-128:
تابع رمزنگار rijndael دارای 3 آرگومان است:
1) plaintext: آرايه ای به طول 16بايت حاوی داده های رمز نشده اصلی
2) Ciphertext: آرايه ای به طول 16 بايت برای برگرداندن معادل رمزنگاری شده ی داده های ورودی
3) Key : آرايه ای به طول 16 بايت حاوی کليد رمزنگاری
متغير دو بعدی state يک آرايه 4*4 است که داده های ورودی درون آن منتقل و پردازش ها بر روی آن انجام می گیرد. (متغير حالت)
متغير سه بعدی rk دارای 11 عنصر است، که هر عنصر يک کليد است. هر عنصر آن خود یک ماتریس 4×4 است بنابراین rk[0] تا rk[10] همگی ماتریس هائی هستند که باید در هر دور از برنامه با «متغیر حالت» XOR شوند.
فقط یک شاه کلید 16 بایتی وجود دارد مابقی ده کلید فرعی، طبق الگوریتم نسبتاً پیچیده ای از روی شاه کلید اصلی تولید می شود.
اولین اختلاف AES با DES:
DESبر روی بیت ها کار می کند و AES بر روی کلمات 32 بیتی
متغیر سه بعدی rk:
1) در ابتدای برنامه با فراخوانی تابع() expand-key، شاه کلید (یعنی متغیر key) به یازده کلید فرعی، توسعه داده می شود و درون متغیر rk قرار می گیرد تا در برنامه از آنها استفاده شود.
2) در مرحله بعدی ،متن اصلی به درون آرایه state منتقل می شود تا در ده دور متوالی پردازش شود. عمل کپی داده ها به درون آرایه state باید به صورت ستونی انجام گیرد: یعنی چهار بایت اول در ستون اول، چهار بایت دوم در ستون دوم و...... شماره گذاری سطر ها و ستونها از صفر آغاز می شود.
3) قبل از شروع حلقه تکرار،rk[0] با آرایه state، بایت به بایت XOR می شود.