رمزگشایی از جدول مرموز RC2؛ چگونه مقادیر ثابت رمنگار رون ریвест از عدد پای استخراج شدند؟ — How RC2's π table was made
خلاصه
این مقاله به کشف نحوه تولید جدول جایگشت ۲۵۶ بایتی در رمزنگار کلاسیک RC2 میپردازد. با استفاده از الگوریتم فیشر-ییتز و ارقام عدد پای (π)، محققان توانستهاند دقیقاً همان مقادیری را بازسازی کنند که دههها پیش توسط رون ریвест طراحی شده بود و منبع آنها یک راز باقی مانده بود.
مقدمه و زمینه تاریخی
رمزنگار RC2 یک بلاکسیفر (Block Cipher) است که در اواخر دهه ۱۹۸۰ میلادی توسط رون ریвест (Ron Rivest)، رمزنگار مشهور و یکی از بنیانگذاران RSA، برای شرکت Lotus طراحی شد. در آن دوران، دولت ایالات متحده صادرات رمزنگاریهای قوی را به شدت کنترل میکرد و شرکت Lotus برای عرضه نرمافزار معروف Notes به یک الگوریتم قابل صادرات نیاز داشت.
هنگامی که ریвест این رمزنگار را طراحی کرد، برای تبدیل کلید به کلید داخلی از یک جدول ثابت ۲۵۶ بایتی (اعداد صفر تا ۲۵۵ در همریخته) استفاده کرد. در مشخصات رسمی این الگوریتم (RFC 2268) ذکر شده بود که این جدول «بر اساس ارقام عدد پای (π)» ساخته شده است، اما هیچگاه روش دقیق تولید آن منتشر نشد. این موضوع دههها به عنوان یک سوال بیپاسخ در جامعه رمزنگاری باقی ماند.
جزئیات فنی بازسازی جدول
تحقیقات جدید با استفاده از ابزارهای هوش مصنوعی نشان داده است که این جدول با ترکیب دو مؤلفه شناختهشده اما با روشی نامبهم تولید شده است:
- الگوریتم بر زدن فیشر-ییتز (Fisher-Yates Shuffle): روشی استاندارد و منصفانه برای تصادفیسازی آرایهها که در آن هر درایه با یک درایه دیگر در جایگاهی تصادفی جابجا میشود.
- ارقام عدد پای (π): به جای استفاده از منابع تصادفی نامشخص، ارقام اعشاری عدد پای (شروع از رقم اول یعنی ۳.۱۴۱۵۹...) دستهای و سهتایی خوانده شدهاند.
الگوریتم دقیق شامل مراحل زیر است:
- ایجاد آرایهای از اعداد صفر تا ۲۵۵.
- خواندن سه رقم متوالی از ارقام اعشاری عدد پای برای تعیین شاخص تصادفی.
- استفاده از یک مرحله حذف (Discard) برای جلوگیری از سوگیری و حفظ توزیع کاملاً منصفانه هنگام محاسبه با عملگر باقیمانده (
mod). - اجرای الگوریتم بر روی آرایه.
نکته جالب اینجاست که جدول دوم موجود در استاندارد RC2 (معروف به جدول نسخه یا Version Table) نیز دقیقاً با همین الگوریتم تولید شده است، با این تفاوت که روند خواندن ارقام پای از پنجمین رقم اعشار آغاز میشود. این جدول دوم بعدها در نرمافزارهایی نظیر Lotus Notes و Domino برای هش کردن رمزهای عبور نیز مورد استفاده قرار گرفت.
چرا این موضوع برای مهندسین نرمافزار اهمیت دارد؟
اگرچه رمزنگار RC2 سالهاست که منسوخ شده و استفاده از آن در استانداردهای مدرن توصیه نمیشود، اما کشف این مکانیزم چند درس مهم برای مهندسین امنیت و توسعهدهندگان دارد:
- اعدادی که آستین را بالا میزنند (Nothing-up-my-sleeve numbers): در طراحی توابع هش و رمزنگارها، استفاده از ثابتهای مشتقشده از اعداد ریاضی مانند پای تضمین میکند که طراح عمداً درگاه پشتی (Backdoor) یا ضعفی را به صورت دستی در الگوریتم تعبیه نکرده است. با این حال، انتشار نیاروش تولید این مقادیر همواره شکبرانگیز بود.
- شفافیت در رمزنگاری: این کشف نشان میدهد که چگونه بررسی دقیق کدهای قدیمی و استفاده هوشمندانه از ابزارهای کمکی مدرن (مانند دستیارهای هوش مصنوعی در تحلیل کدهای منسوخ) میتواند رازهای دیرینه مهندسی معکوس را آشکار کند.
دیدگاهها در Hacker News
نویسنده مقاله در بحثهای Hacker News اشاره کرده است که این پژوهش پس از حل یک معمای مشابه درباره بذر منحنیهای بیضوی NIST آغاز شد. با استفاده از ابزارهای پیشرفته تحلیل کد، تلاش شد تا ثوابت مرموز موجود در رمزنگارهای قدیمی بررسی شوند که در نهایت با الگوبرداری از نحوه ساخت جدول هش MD2 (که آن هم توسط ریвест طراحی شده بود)، فرمول دقیق RC2 کشف و تمام ۲۵۶ درایه آن با دقت صددرصدی بازسازی شد.
این مطلب بهصورت کاملاً خودکار و با هوش مصنوعی از مقالهٔ اصلی و بحث هکرنیوز تهیه شده و ممکن است خطا داشته باشد. حقوق مطلب اصلی متعلق به نویسندهٔ آن است. قوانین و گزارش مشکل