حمله لغزش

حمله لغزش حالتی از تحلیل رمز است که برای مقابله با این ایده عمومی که حتی رمزهای ضعیف می‌توانند از طریق افزایش تعداد دورها بسیار قوی شوند و با یک حمله تفاضلی مقابله کنند، طراحی شد. حمله لغزش طوری عمل می‌کند که تعداد دورها را در یک رمز، نامرتبط کند. به جای نگاه کردن به جنبه‌های تصافی کردن داده‌های رمز بلوکی ، حمله لغزش فهرست کلیدها را تحلیل می‌کند و نواقص آن را کشف کرده تا رمز را بشکند. رایج‌ترین مورد، کلیدهایی است که به صورت چرخه‌ای تکرار می‌شوند.
اولین بار این حمله توسط دیوید واگنر و الکس بیریوکو توصیف شد. در ابتدا بروس اسچنیر اصطلاح حمله لغزش را به آن‌ها پیشنهاد داد و آن‌ها این اصطلاح را در مقاله‌ای که در سال ۱۹۹۹ چاپ کردند و در آن به توصیف حمله پرداختند، به کار بردند.
تنها نیازمندی این حمله برای کار بر روی یک رمز این است که بتواند به چندین دور مرتبط به یک تابع f شکسته شود. این مسئله احتمالا به این معناست که دارای یک فهرست چرخه‌ای برای کلید است. تابع f باید نسبت به حمله متن رمزنشده مشخص حساس باشد. حمله لغزش در ارتباط با حمله کلید مرتبط است.
ریشه‌های ایده حمله لغزش به مقاله ادنا گرسمن و بریانت توکرمن در سال ۱۹۷۷ برمی گردد. این دو حمله را بر یک بلوک رمز ضعیف توضیح دادند. حمله به این واقعیت که رمز دارای زیرکلیدی یکسان در هر دور است، بستگی داشت. بنابراین رمز یک کلید با فهرست چرخه‌های مربوط به تنها یک کلید که آن را تبدیل به نسخه‌ای از حمله لغزش می‌کند، ارتباط داشت. خلاصه‌ای از گزارش شامل توصیفی از رمز بلوکی ان دی اس و حمله، در سیستم‌های رمز (بکر و پیپر، ۱۹۸۲) ارائه شده است.
حمله حقیقی
در ابتدا نمادگذاری‌ها را بیان می‌کنیم. تعداد بیت‌های بلوک رمز n است و فهرست کلیدها به صورت بیان می‌شود، به طوری که کلیدها دارای طول‌های مختلف هستند.
حمله لغزش از طریق شکستن رمز به توابع جایگشت یکسان عمل می‌کند. این توابع می‌توانند از بیش از یک دور رمز تشکیل شده باشند. به عنوان مثال اگر یک رمز از یک فهرست کلید متناوب استفاده کند، به طوری برای هر دور بین و یکی را انتخاب کند. تابع f از دو دور تشکیل می‌شود. هر کدام از کلیدهای حداقل یک بار در تابع به کار می‌روند.
مرحله بعد جمع آوری جفت متن رمزنشده به همراه متن رمزشده آن هاست. بسته به خصوصیات رمز تعداد کمتری ممکن است کفایت کند، اما بر اساس مسئله تاریخ تولد حداکثر جفت لازم است. این جفت‌ها که به صورت نمایش داده می‌شوند برای پیدا کردن یک جفت لغزش که به صورت نشان داده می‌شود، به کار می‌روند. جفت لغزش دارای دو ویژگی و است. هر زمانی که جفت لغزش شناسایی می‌شود، رمز به خاطر حساسیت حملات متن رمزنشده مشخص، شکسته می‌شود. کلید می‌تواند به سادگی از این جفت‌ها استخراج شود. جفت لغزش می‌تواند چیزی که برای یک پیام بعد از یک بار استفاده از تابع اتفاق می‌افتد، در نظر گرفته شود.
پرونده:Slideattack.jpg
فرایند پیدا کردن یک جفت لغزش چیزی متفاوت از هر رمز است اما از همان طرح اولیه پیروی می‌کند. با انتخاب هر جفت متن رمزنشده و متن رمزشده آن و چک کردن با هدف پیدا کردن کلیدهای مطابق با و ، استخراج کلید از فقط یک تکرار تابع امکان پذیر می‌شود. اگر این کلیدها با هم مطابق باشند، این جفت یک جفت لغزش است در غیر این صورت جفت بعدی بررسی می‌شود.
با جفت متن رمزنشده و متن رمزشده آنها، وجود یک جفت لغزش انتظار می‌رود. مثبت کاذب می‌تواند از طریق کاربرد کلیدهایی روی یک جفت متفاوت دیگر برای پی بردن به اینکه رمزنگاری صحیح است یا نه ، حذف شود. احتمال اینکه کلید نادرست به درستی دو یا تعداد بیشتری پیام را رمز کند، در مورد یک رمز خوب بسیار پایین است.
گاهی اوقات ساختار رمز به شدت تعداد جفت‌های لغزش لازم را کاهش می‌دهد و بنابراین بخش زیادی از کار را کاهش می‌دهد. واضح‌ترین مثال رمز فیستل است که از فهرست چرخشی کلیدها استفاده می‌کند. علت این است که جستجو برای صورت می‌گیرد. این مسئله تعداد جفت پیام‌های ممکن را از به کاهش می‌دهد (به این دلیل که نیمی از پیام ثابت است) و بنابراین حداکثر جفت متن رمزنشده و متن رمزشده برای پیدا کردن جفت لغزش لازم است.