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

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

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

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

حمله حقیقی
----------

در ابتدا نمادگذاری‌ها را بیان می کنیم. تعداد بیت‌های بلوک رمز n است و فهرست کلیدها به صورت {\displaystyle K\_{1}\cdots K\_{m}} بیان می‌شود، به طوری که کلیدها دارای طول‌های مختلف هستند.

حمله لغزش از طریق شکستن رمز به توابع جایگشت یکسان عمل می‌کند. این توابع می توانند از بیش از یک دور رمز تشکیل شده باشند. به عنوان مثال اگر یک رمز از یک فهرست کلید متناوب استفاده کند، به طوری برای هر دور بین {\displaystyle K\_{1}} و {\displaystyle K\_{2}} یکی را انتخاب کند. تابع f از دو دور تشکیل می‌شود. هر کدام از کلیدهای {\displaystyle K\_{i}} حداقل یک بار در تابع به کار می روند.

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

  

فرایند پیدا کردن یک جفت لغزش چیزی متفاوت از هر رمز است اما از همان طرح اولیه پیروی می‌کند. با انتخاب هر جفت متن رمزنشده و متن رمزشده آن {\displaystyle (P\_{0},C\_{0})(P\_{1},C\_{1})} و چک کردن با هدف پیدا کردن کلیدهای مطابق با {\displaystyle P\_{0}=F(P\_{1})} و {\displaystyle C\_{0}=F(C\_{1})}، استخراج کلید از فقط یک تکرار تابع امکان‌پذیر می‌شود. اگر این کلیدها با هم مطابق باشند، این جفت یک جفت لغزش است در غیر این صورت جفت بعدی بررسی می‌شود.

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

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

منابع
-----

ویکی‌پدیای انگلیسی