آخرین اخبار
همهٔ اخبار
گزارش‌ها و تحلیل‌ها گزارش بحرانیت ۲/۱۰

تحلیل رمزنگاری Speck با استفاده از شبکه‌های عصبی: پیاده‌سازی یک تشخیص‌دهنده (Distinguisher) کوچک

تحلیل رمزنگاری Speck با استفاده از شبکه‌های عصبی: پیاده‌سازی یک تشخیص‌دهنده (Distinguisher) کوچک

در دنیای تحلیل بدافزار و رمزنگاری، شناسایی الگوهای آماری در داده‌های رمزگذاری شده یکی از چالش‌های کلیدی است. در این مقاله، یک آزمایش یادگیری ماشین (Machine Learning) برای بررسی این موضوع انجام شده است که آیا یک شبکه عصبی کوچک می‌تواند رابطه آماری بین دو بلوک رمزگذاری شده را تشخیص دهد یا خیر. هدف این آزمایش، پیاده‌سازی یک تشخیص‌دهنده (Distinguisher) برای رمزنگاری Speck32/64 است.

مفهوم کلی تشخیص‌دهنده عصبی

ایده اصلی این است که اگر یک بلوک متن آشکار (Plaintext) و بلوک دیگری با یک تفاضل XOR ثابت ($Delta$) را رمزگذاری کنیم، ممکن است پس از چند دور (Round) رمزنگاری، همچنان الگویی قابل اندازه‌گیری در خروجی‌ها باقی بماند. در این مدل، دو کلاس داده تعریف می‌شود:

  • کلاس ۱: بلوک‌هایی که دارای تفاضل ورودی مشخص هستند.
  • کلاس ۰: بلوک‌های تصادفی و مستقل که تحت یک کلید رمزگذاری شده‌اند.

مدل شبکه عصبی تنها به متن‌های رمز شده (Ciphertexts) دسترسی دارد و هیچ اطلاعاتی از متن آشکار، کلید یا برچسب‌ها در مرحله ورودی دریافت نمی‌کند.

ساختار رمزنگاری Speck32/64

الگوریتم Speck32/64 از ساختار ARX (Addition, Rotation, XOR) استفاده می‌کند. این الگوریتم شامل دو کلمه داده ۱۶ بیتی، یک کلید ۶۴ بیتی و در حالت کامل ۲۲ دور رمزنگاری است. استفاده از جمع پیمانه‌ای (Modular Addition) باعث ایجاد تداخل بین بیت‌ها می‌شود که تحلیل تک‌تک بیت‌های خروجی را دشوار می‌کند و همین موضوع، استفاده از مدل‌های غیرخطی مانند شبکه‌های عصبی را جذاب‌تر می‌سازد.

پیاده‌سازی فنی و آزمایش

برای اجرای این آزمایش، ابتدا یک مرجع رمزنگاری به زبان C برای تولید داده‌ها و اعتبارسنجی نوشته شده است. سپس با استفاده از کتابخانه PyTorch، یک مدل یادگیری ماشین طراحی شده است. مراحل اجرای آزمایش به شرح زیر است:

  • برداری کردن رمز (Vectorization): عملیات رمزنگاری در PyTorch با استفاده از تنسورهای int64 پیاده شده تا عملیات ماسک کردن (Masking) پس از جمع به صورت صریح انجام شود.
  • تبدیل کلمات به بیت: برای جلوگیری از ایجاد فاصله عددی مصنوعی (مثلاً بین مقدار ۳۲۷۶۷ و ۳۲۷۶۸)، هر کلمه ۱۶ بیتی به ۱۶ بیت مجزا تبدیل شده و به عنوان ورودی مدل داده می‌شود.
  • مدل شبکه عصبی: از یک پرسپترون چندلایه (MLP) با دو لایه پنهان (۱۲۸ و ۶۴ نورون) و تابع فعال‌ساز ReLU استفاده شده است. این مدل دارای حدود ۱۶,۶۴۱ پارامتر قابل آموزش است.

تحلیل نتایج و کاربرد در امنیت

در این آزمایش، عملکرد مدل عصبی با یک خط مبنای آماری (Statistical Baseline) مقایسه شده است. نتایج نشان می‌دهد که مدل‌های غیرخطی می‌توانند روابط پیچیده‌تری را نسبت به تحلیل‌های ساده‌ی مبتنی بر بیت شناسایی کنند. این رویکرد در تحلیل بدافزارها، به‌ویژه هنگام بررسی رمزگشاوهای سفارشی (Custom Decoders) یا روتین‌های رمزنگاری تغییر یافته، بسیار کاربردی است؛ زیرا نشان می‌دهد که توزیع تصادفی بایت‌ها لزوماً به معنای از بین رفتن روابط بین ورودی‌ها در پس از تبدیل نیست.