همانطور که در مقاله الگوریتم‌های رمزنگاری مشاهده کردید، الگوریتم AES و یا استاندارد رمزنگاری پیشرفته یکی از الگوریتم‌های رمزنگاری متقارن است که برای رمز کردن داده و رمز گشایی آن از یک کلید مشترک استفاده می‌شود. این الگوریتم در سال 2001 توسط موسسه ملی استانداردها و فناوری آمریکا معرفی شده و زیرمجموعه رمزنگار ریندال است که توسط متخصصین رمزنگاری بلژیکی ژوآن دیمن و وینسنت رینمن توسعه داده شده است. ریندال شامل رمزنگارهایی با اندازه‌ی کلید و بلوک داده متفاوت است. NIST برای الگوریتم استاندارد رمزنگاری پیشرفته سه دسته ریندال های با اندازه‌ی بلوک 128 بیتی و اندازه کلید 128 و 192 و 256 بیتی را انتخاب کرده است.

ژوآن دیمن و وینسنت رینمن، مبدعان خانواده الگوریتم‌های ریندال

ژوآن دیمن و وینسنت رینمن، مبدعان خانواده الگوریتم‌های ریندال

تاریخچه

AES در اواخر دهه 1990 و به منظور جایگزینی با استاندارد رمزنگاری قبلی برای دولت ایالات متحده آمریکا توسعه یافت. الگوی پیشین در اوایل دهه 1970 توسط شرکت IBM ایجاد شد و با نام استاندارد رمزنگاری داده (DES) شناخته شده بود. در سال 1977 این استاندارد جهت استفاده دولت ایالات‌ متحده مورد پذیرش واقع شد ولی بعدتر مشخص شد که این الگوریتم به دلیل استفاده از کلید کوتاه 56 بیتی به راحتی قابل شکستن است. پس از آن در آغاز یک فرآیند 5 ساله، 15 الگوریتم رمزنگاری مختلف جهت جایگزینی استاندارد DES توسط دولت ایالات‌ متحده آمریکا پیشنهاد داده شد. آژانس امنیت ملی به بررسی 15 الگوریتم ارایه شده اولیه پرداخت و تا آگوست سال 1999 این طیف به 5 الگوریتم شامل Rijndael، Serpent، RC6، Twofish  و MARS محدود شد. در ادامه این الگوریتم‌ها از جنبه‌هایی نظیر توان امنیتی، سهولت پیاده‌سازی، حق امتیاز رایگان الگوریتم و سرعت و دقت فرآیند رمزنگاری و رمزگشایی مورد تجزیه و تحلیل بیش‌تر قرار گرفتند. با پایان پروسه تجزیه و تحلیل، الگوریتم رمزنگاری Rijndael به‌عنوان برنده برگزیده شد.

عملکرد رمزنگار

الگوریتم AES بر اساس شبکه جانشینی جایگشت طراحی شده است و هم به صورت نرم‌افزاری و هم به صورت سخت‌افزاری کاراست. این الگوریتم بر روی آرایه‌های 4*4 بایتی با ترتیب ستونی به نام حالت و یا state عمل می‌کند. اندازه‌ی کلید الگوریتم تعداد دورهایی را که طی آن ورودی را به خروجی رمز شده تبدیل می‌شود مشخص می‌کند. تعداد دفعات برای کلید 128 بیت 10 دور، کلید 192 بیتی 12 دور و کلید 256 بیتی 14 دور است.

الگوریتم AES چهار مرحله کلی بسط کلید، چرخه‌ی اولیه، چرخه‌ها و مرحله‌ی نهایی است. در مرحله اول کلیدهای چرخه با استفاده از زمان‌بندی کلید AES به دست می‌آید. در مرحله‌ی بعد با کمک یک XOR بیتی بایت هر حالت با بایت کلید دور ترکیب می‌شود. مرحله سوم خود 4 بخش دارد و بسته به نوع الگوریتم (128، 192 و یا 256 بیتی) 9، 11 و یا 13 بار تکرار خواهد شد. بخش اول این مرحله SubBytes است که در آن بر اساس یک جدول جستجو بایت‌ها به صورت غیر خطی جابه‌جا می‌شوند. شکل زیر این بخش را نشان می‌دهد.

گام SubBytes در الگوریتم AES

گام SubBytes در الگوریتم AESبخش بعد در مرحله‌ی چرخه‎ها ShiftRows است که در آن حداقل سه سطح از حالت به تعداد گام‌های معینی شیفت پیدا می‌کند.

گام ShiftRows در الگوریتم AES

گام ShiftRows در الگوریتم AES

بخش سوم مرحله‌ی چرخه‌ها بخش MixColumns خواهد بود. در این بخش 4 بایت از هر ستون حالت با یک انتقال خطی ترکیب می‌شوند. این تابع چهار بایت به عنوان ورودی دریافت کرده و 4 بایت خروجی تولید می‌کند. این بخش به همراه بخش قبل پخش شدن رمزنگاری را فراهم می‌کند.

گام MixColumns در الگوریتم AES

گام MixColumns در الگوریتم AES

بخش آخر مرحله‌ی سوم گام AddRoundKey است. در این بخش زیر کلید با حالت ترکیب می‌شود. برای هر دور، یک زیرکلید از کلید اصلی با کمک زمان‌بندی کلید ریندال ایجاد شده و هر زیرکلید هم اندازه‌ی حالت خواهد بود. زیرکلید با ترکیب هر بایت از حالت با بایت متناظرش در زیرکلید به کمک xor بیتی جمع می‌شود. شکل زیر این گام را نشان می‌دهد

گام AddRoundkey در الگوریتم AES

گام AddRoundkey در الگوریتم AES

در مرحله‌ی نهایی، گام‎های SubBytes، ShiftRows و addRoundKey یک دور دیگر اجرا شده و تعداد کل دورهای اجرای الگوریتم را به 10، 12 و یا 14 دور می‌رسانند.

امنیت الگوریتم

پس از معرفی الگوریتم AES این الگوریتم مورد حملات گوناگونی به جهت بازیابی کلید رمزنگاری واقع شده است. پیچیدگی زمانی این حملات که مستقیم و یا غیرمستقیم بوده‌اند بسیار بالا بوده است و حملاتی موفق‌تر بوده‌اند که برروی همان سیستمی اجرا شده‌اند که رمزگذار AES برروی آن در حال اجرا بوده است. در پی این حملات همچنین مشخص شد که پیچیدگی زمانی دستیابی به کلیدها با افزایش اندازه‌ی کلید به صورت نمایی افزایش می‌یابد.