حملۀ مخوف بر روی AES!

میدونید که بی شک AES یکی از مشهورترین، پر استفاده ترین، و امن ترین الگوریتم های رمزنگاری متقارن است که سالهای سال هیچکس نتونسته بهش نفوذ جدی بکنه. یعنی درواقع میشه گفت به احتمال زیاد حتی در حال حاضر هم هنوز پراستفاده ترین و امن ترین الگوریتم بحساب میاد.

البته کم و بیش همینطوره، ولی یکی از خفن ترین حمله هایی که من تازگی دیدم انجام شده این هست: دانلود

البته این مقاله مال سالها پیشه، زیاد جدید نیست، ولی من تازه دیدم، یا شایدم باید بگم تازه روش دقت بیشتری کردم و بنظرم مطرح کردنش مهم اومد مفید بود.

در این حمله که البته طرف خودش با شبیه سازی عملی تستش کرده، تونسته کلید رمزنگاری AES رو بطور کامل بدست بیاره. و این یعنی شکست کامل سیستم رمزنگاری! اما یعنی چی؟ یعنی AES شکسته شده؟ باید بگم نه به این سادگی ها هم نیست. حمله ای که این طرف انجام داده اصطلاحا یک نوع Side-channel attack است.
خب یعنی چی؟
در اینطور حمله ها مستقیما به خود الگوریتم حمله نمیشه نیازی نیست در اساس الگوریتم ضعف ماهیتی جدی وجود داشته باشه، بلکه میان و از یکسری کانال ها و اطلاعات جانبی برای فهمیدن اینکه در داخل الگوریتم داره چی میگذره استفاده میکنن. مثلا از روی نوسانات شدت بار CPU و مصرف برق، نوسانات و امواجی که ایجاد میکنه میتونن با متدهای آماری خاصی که هست در نهایت اطلاعات مهمی رو استخراج کنن. این مثل این میمونه که رایانهء شما ظاهرا امن است، ولی وقتی پسورد خودتون رو با کیبورد تایپ میکنید در ساختمون بغلی ممکنه کسی با دستگاههای مخصوص این کار که امواج ساطع شده از کیبرد شما رو ردیابی میکنه، درمیاره که شما چه کلیدهایی رو تایپ کردید.
پس درواقع اینطور حملات نقص اساسی در خود الگوریتم رمزنگاری نیستن و میتونن قابل برطرف کردن باشن، و ضمنا در خیلی شرایط و سناریوها هم نمیشه اینطور حمله ها رو صورت داد چون نیاز به دسترسی ها و امکانات و طرز کاربرد خاصی هست که بشه. بهرصورت در خیلی موارد هم هست که میشه اینطور کارها رو کرد. و بهرصورت اینکه بتونی کلید رمزنگاری رو فقط از طریق اطلاعات زمانی اونم وقتی دسترسی به سیستم هدف فقط از طریق شبکه است بدست بیاری، کار واقعا مخوفی است و ظریف و شکننده بودن بحث امنیت رو نشون میده.

حمله های Side-channel امروزه انواع زیاد و جالبی از اونا شناسایی شدن که کارایی زیادی دارن و در عمل هم خیلی از اونا با موفقیت تست شدن.
یه چیزای عجیبی آدم میخونه مثل اینکه جایی اخیرا خوندم نوشته بود مثلا گوشی موبایل رو میذارن روی میز کامپیوتر و فقط با همون سنسورهای حرکت و ارتعاش که گوشی های موبایل امروزی داره میتونن ارتعاشاتی رو که در اثر تایپ در کیبورد یا جاهای دیگه حتی ایجاد میشه ضبط کنن و بعدا با تحلیل این اطلاعات توسط برنامه ها و الگوریتم های خاص خودش میتونن اطلاعات زیادی و حتی کل پسوردها و غیره رو بدست بیارن. حتی از روی صدای کیبورد این کار رو میکنن. حالا دقیق یادم نیست در جزییات شاید اشتباهات کرده باشم دقیق نگفته باشم، اما منظورم فقط ذکر مثالهایی نشون بود که مفهوم و گستردگی Side-channel_attack رو درک کنید.
حالا اینا فقط بحث های ساده راجع به کیبورد بود. بیشتر الگوریتم های رمزنگاری هم در برابر خیلی از این حمله ها ضعف دارن، مگر اینکه تمهیدات خاص که میتونه هم نرم افزاری و هم سخت افزاری نیاز باشه، صورت بگیرن.

و اما برگردیم به مورد خاص خودمون و حمله ای که طرف روی AES انجام داده که این حمله بوسیلهء Timing صورت گرفته، یعنی از روی اختلاف زمان برگشت پاسخ ها از سرور تونسته اطلاعاتی راجع به کارکرد و وضعیت داخلی الگوریتم رمزنگاری بدست بیاره که در نهایت با جمع آوری تعداد کافی از این اطلاعات و آزمون ها تونسته کلید رمزنگاری رو بصورت کامل استخراج کنه که این مسئله بسیار مخوفه چون کلید رمزنگاری یعنی تمام امنیت مطلق یک سیستم و وقتی بشه به این راحتی همه چیز رو دور زد و الگوریتم رمزنگاری با اون عظمت بی فایده بشه بدون اینکه ظاهرا هیچ ضعف و حفره و نفوذی در سیستم هدف مشاهده بشه، اونوقت آدم باید تصور و تخمین خودش دربارهء امنیت رو اصلاح کنه.

پس ما تا اینجا فهمیدیم که AES زیاد هم مقصر نیست و نمیشه گفت شکسته شده!
ولی یک نکته ای که طرف اشاره میکنه اینه که میشه پردازش الگوریتم AES رو طوری توسط ساختارهای برنامه نویسی خاصی انجام داد که این نشت اطلاعاتی از بین بره، اما این کار سرعت الگوریتم رو به میزان زیادی پایین میاره!
شاید بیست سال پیش اینکه الگوریتم خودش از نشت اطلاعات Side-channel جلوگیری کنه در برابرش مقاوم باشه چندان مهم و جزو خصیصه های مورد نیاز یک الگوریتم رمزنگاری بحساب نمی آمد، اما امروز با تجربه ها و علم و آزمون های گسترده تر و شناخته شده تر این مسئله مهمتر شده و بنابراین میشه این مسئله رو ضعفی برای خود الگوریتم هم دونست. البته این به معنای این نیست که الان دیگه AES کلا امن نیست و مثلا اگر شما اطلاعاتی فایلی چیزی رو روی رایانهء خودتون رمز کنید یا حتی در برنامه هاتون روی وب، دیگه امنیت نداره. نه، برای اجرای اینطور حمله ها نیاز به شرایط محیطی و طرز کاربرد خاصی هست که فقط در کسری از کاربردهای خاص این الگوریتم ها وجود داره. مثلا در حملهء خاصی که در این مقاله مطرح شده ظاهرا شرط لازم این هست که حمله کننده بتونه دیتاهای دلخواهی (دیتاهایی که خودش ازشون اطلاع داشته باشه که دقیقا چی بودن) رو طوری به خورد سیستم بده تا سیستم اونا رو با کلید محرمانه رمز کنه. شاید فکر کنید چنین شرایطی در عمل نمیتونه یا خیلی بعید وجود داشته باشه، اما باید بگم اینطورها هم نیست و در خیلی پروتکل ها و سیستمها این امر به شکلی و تاحدی هم که شده میتونه امکان پذیر باشه و اصولا الگوریتم های رمزنگاری طوری ساخته میشن و معیارهای ارزیابی اونا طوری هست که در برابر تمام سناریوها و شرایط و اشکال کاربرد امنیت داشته باشن. مثلا میگن حتی وقتی نفوذگر بتونه هر تعداد دیتای دلخواه رو به سیستم بده و خروجی رمز شده رو تحویل بگیره، نباید بتونه با تحلیل این اطلاعات امنیت سیستم رو پایین تر بیاره به شناسایی کلید رمزگذاری حتی نزدیک بشه! بله یک چنین شرایط سخت و کلی ای داره برای تحلیل و تایید الگوریتم های رمزنگاری.
مسئله ای که طرف بهش اشاره میکنه اینه که میگه NIST موقعی که این الگوریتم رو بررسی و بعنوان کاندیدا در بین الگوریتم های دیگر انتخاب میکرد نسبت به Side-channel attack هم اهمیت میداد و معیارهایی برای ارزیابی اون داشت، ولی در این مورد اشتباه کردن و متوجه نشدن که بخش خاصی از الگوریتم AES در این زمینه ضعف داره، و اینکه اگر سعی میکردن این ضعف رو با تغییر ساختارهای برنامه نویسی نویسی موجود در این الگوریتم برطرف کنن سرعتش بقدری کم میشد که بعید بود بعنوان یک کاندیدا انتخاب میشد. همینطور خیلی های دیگر هم تاکنون متوجه این قضیه نشده بودن.

من این مقاله رو اینجا گذاشتم هم چون جالب بود و هم چون شاید بعدها خودم بهش نیاز پیدا کنم بخوام بهش رجوع کنم.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

*

شما می‌توانید از این دستورات HTML استفاده کنید: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>