حمله لغزش

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو

حمله لغزش حالتی از تحلیل رمز است که برای مقابله با این ایده عمومی که حتی رمزهای ضعیف می توانند از طریق افزایش تعداد دورها بسیار قوی شوند و با یک حمله تفاضلی مقابله کنند، طراحی شد. حمله لغزش طوری عمل می کند که تعداد دورها را در یک رمز، نامرتبط کند. به جای نگاه کردن به جنبه های تصافی کردن داده های رمز بلوکی ، حمله لغزش فهرست کلیدها را تحلیل می کند و نواقص آن را کشف کرده تا رمز را بشکند. رایج ترین مورد، کلیدهایی است که به صورت چرخه ای تکرار می شوند.

اولین بار این حمله توسط دیوید واگنر و الکس بیریوکو توصیف شد. در ابتدا بروس اسچنیر اصطلاح حمله لغزش را به آن ها پیشنهاد داد و آن ها این اصطلاح را در مقاله ای که در سال ۱۹۹۹ چاپ کردند و در آن به توصیف حمله پرداختند، به کار بردند.

تنها نیازمندی این حمله برای کار بر روی یک رمز این است که بتواند به چندین دور مرتبط به یک تابع f شکسته شود. این مسئله احتمالاً به این معناست که دارای یک فهرست چرخه ای برای کلید است. تابع f باید نسبت به حمله متن رمزنشده مشخص حساس باشد. حمله لغزش در ارتباط با حمله کلید مرتبط است.

ریشه های ایده حمله لغزش به مقاله ادنا گرسمن و بریانت توکرمن در سال ۱۹۷۷ برمی گردد. این دو حمله را بر یک بلوک رمز ضعیف توضیح دادند. حمله به این واقعیت که رمز دارای زیرکلیدی یکسان در هر دور است، بستگی داشت. بنابراین رمز یک کلید با فهرست چرخه های مربوط به تنها یک کلید که آن را تبدیل به نسخه ای از حمله لغزش می کند، ارتباط داشت. خلاصه ای از گزارش شامل توصیفی از رمز بلوکی ان دی اس و حمله، در سیستم های رمز (بکر و پیپر، ۱۹۸۲) ارائه شده است.

حمله حقیقی[ویرایش]

در ابتدا نمادگذاری ها را بیان می کنیم. تعداد بیت های بلوک رمز n است و فهرست کلیدها به صورت K_1 \cdots K_m بیان می شود، به طوری که کلیدها دارای طول های مختلف هستند.

حمله لغزش از طریق شکستن رمز به توابع جایگشت یکسان عمل می کند. این توابع می توانند از بیش از یک دور رمز تشکیل شده باشند. به عنوان مثال اگر یک رمز از یک فهرست کلید متناوب استفاده کند، به طوری برای هر دور بین K_1 و K_2 یکی را انتخاب کند. تابع f از دو دور تشکیل می شود. هر کدام از کلیدهای K_i حداقل یک بار در تابع به کار می روند.

مرحله بعد جمع آوری 2^{n/2} جفت متن رمزنشده به همراه متن رمزشده آن هاست. بسته به خصوصیات رمز تعداد کمتری ممکن است کفایت کند، اما بر اساس مساله تاریخ تولد حداکثر 2^{n/2} جفت لازم است. این جفت ها که به صورت (P,C) نمایش داده می شوند برای پیدا کردن یک جفت لغزش که به صورت (P_0,C_0) (P_1,C_1) نشان داده می شود، به کار می روند. جفت لغزش دارای دو ویژگی P_0 = F(P_1) و C_0 = F(C_1) است. هر زمانی که جفت لغزش شناسایی می شود، رمز به خاطر حساسیت حملات متن رمزنشده مشخص، شکسته می شود. کلید می تواند به سادگی از این جفت ها استخراج شود. جفت لغزش می تواند چیزی که برای یک پیام بعد از یک بار استفاده از تابع اتفاق می افتد، در نظر گرفته شود.


Slideattack.jpg

فرایند پیدا کردن یک جفت لغزش چیزی متفاوت از هر رمز است اما از همان طرح اولیه پیروی می کند. با انتخاب هر جفت متن رمزنشده و متن رمزشده آن (P_0,C_0) (P_1,C_1) و چک کردن با هدف پیدا کردن کلیدهای مطابق با P_0 = F(P_1) و C_0 = F(C_1)، استخراج کلید از فقط یک تکرار تابع امکان پذیر می شود. اگر این کلیدها با هم مطابق باشند، این جفت یک جفت لغزش است در غیر این صورت جفت بعدی بررسی می شود.

با 2^{n/2} جفت متن رمزنشده و متن رمزشده آنها، وجود یک جفت لغزش انتظار می رود. مثبت کاذب می تواند از طریق کاربرد کلیدهایی روی یک جفت متفاوت دیگر برای پی بردن به اینکه رمزنگاری صحیح است یا نه ، حذف شود. احتمال اینکه کلید نادرست به درستی دو یا تعداد بیشتری پیام را رمز کند، در مورد یک رمز خوب بسیار پایین است.

گاهی اوقات ساختار رمز به شدت تعداد جفت های لغزش لازم را کاهش می دهد و بنابراین بخش زیادی از کار را کاهش می دهد. واضح ترین مثال رمز فیستل است که از فهرست چرخشی کلیدها استفاده می کند. علت این است که جستجو برای P_0=(R_0, L_0 \bigoplus F(R_0,K)) صورت می گیرد. این مسئله تعداد جفت پیام های ممکن را از 2^n به 2^{n/2} کاهش می دهد (به این دلیل که نیمی از پیام ثابت است) و بنابراین حداکثر 2^{n/4} جفت متن رمزنشده و متن رمزشده برای پیدا کردن جفت لغزش لازم است.

منابع[ویرایش]

ویکی‌پدیای انگلیسی [۱]