ماشین انیگما
فیلم Imitation Game رو به تازگی دیدم و این فیلم در مورد ماشین انیگما که یه سیستم رمز گذاری برای ارتباط مخابراتی بین نظامیهای آلمانی در جنگ جهانی دوم و شکستن این رمز توسط انگیسیها به کمک آلن تورینگ بود.
با توجه به چیزی که بالا نوشتم و سعی کردم یه نگاه دقیقتر به این ماشین رمزگذار بندازم.
منابع
خب مهمترین چیز در مورد این تحقیق منابع اون هستند و من برای سر در آوردن از طرز کار این ماشین این منابع رو بررسی کردم.
۱. لینک یوتیوب که یه مفهوم تصویری از این ماشین به ما میده
۲. مقاله
۳. ویکیپدیا که البته نگاه انداختن بهش در این مورد بسیار پرفایده هست.
۴. مقاله
حتما و حتما منبع شماره یک رو کامل ببینید در غیر این صورت، متوجه شدن مکانیزم این ماشین سخته. اگر هم خوندن این متن براتون سخته میتونید بعد از دیدن منبع شماره یک چند لحظه به آخرین عکس موجود در در این گزارش دقت کنید و متوجه بشید عملکرد این سیستم رو.
متنی که در ادامه مینویسم از ترکیبی از چهار منبع بالا هست و تمرکز بیشتر روی منبع شماره ۴ هست که کد هم داره.
خب اصلا ماشین انیگما دقیقا چیه؟
ماشینهای انیگما مجموعهای از ماشینهای رمز روتور الکترومکانیکی هستند. اولین ماشین ها در پایان جنگ جهانی اول توسط مهندس آلمانی آرتور شربیوس اختراع شد و عمدتاً برای محافظت از ارتباطات تجاری، دیپلماتیک و نظامی استفاده می شد. ماشینهای انیگما پیچیدهتر و پیچیدهتر شدند و در طول جنگ جهانی دوم بهشدت توسط ارتش آلمان برای رمزگذاری سیگنالهای رادیویی مورد استفاده قرار گرفتند
از دستگاه انیگما برای رمزگذاری یا رمزگشایی پیام های انیگما استفاده می شد (رمزگذاری انیگما متقارن است، به این معنی که از تنظیمات یکسانی می توان برای رمزگذاری یا رمزگشایی یک پیام استفاده کرد).
در این چالش ما یک برنامه رمزگذار انیگما برای رمزگذاری و رمزگشایی پیام ها با استفاده از تنظیمات خاص Enigma ایجاد میکنیم. اما قبل از انجام این کار، باید درک بهتری از نحوه عملکرد ماشین انیگما به دست بیاریم. برای این کار میتونیم از شبیه ساز آنلاین Enigma ما برای شروع رمزگذاری یا رمزگشایی پیام های مخفی استفاده کنیم که آخر مطلب لینکهاش رو گذاشتم.
ماشین انیگما یک ماشین رمزگذاری نسبتاً پیچیده است که از چهار بخش اصلی تشکیل شده است:
۱− صفحه کلید
صفحه کلید برای گرفتن ورودی پیام از کاربر استفاده می شود. ماشین انیگما یک ماشین رمزگذاری متقارن است. به این معنی که می توان از آن برای رمزگذاری یا رمزگشایی یک پیام با استفاده از تنظیمات یا کلید یکسان و مشابه استفاده کرد. بنابراین از صفحه کلید برای وارد کردن متن ساده ای که باید رمزگذاری شود یا متن رمزی که باید رمزگشایی شود استفاده می شود پس متوجه شدیم که اگر تنظیمات دو تا انیگما یکسان باشه از یکی شون برای رمز گذاری و از اون یکی برای رمزگشایی استفاده کرد (البته میشه با همونی که رمز میکنه هم رمز گشایی کرد) .
صفحه کلید آنها از 26 کلید برای هر حرف الفبا تشکیل شده است. یعنی پیام های رمزگذاری شده بدون هیچ فاصله یا علامت نقطه گذاری به یکدیگر متصل می شوند.
توجه کنید که صفحه کلید با حروف QWERTZ به جای QWERTY شروع می شود. بخاطر اینکه که در زبان آلمانی از حرف Z بیشتر از حرف Y استفاده می شود.
۲− صفحه سیمبندی
هنگامی که یک کلید روی صفحه کلید فشار داده می شود، از صفحه سیمبندی عبور می کند که اولین مرحله از فرآیند رمزگذاری را فراهم می کند. این بر اساس اصول رمز جایگزین، نوعی رمزگذاری جابجایی است.
برای راهاندازی صفحهکلید، از سیمهای کوتاه برای اتصال جفتهایی از حروف استفاده میشود که جایگشت میشوند. به عنوان مثال در تصویر زیر حرف W با یک D جایگزین می شود و حرف D با یک W به عنوان سیم (قرمز) برای اتصال این دو حرف / دوشاخه استفاده می شود. به همین ترتیب حرف V به حرف Z و Z تبدیل به V می شود.
در code book تنظیمات صفحه سیمبندی یا پلاگین به صورت رو به رو ثبت می شود (با توجه به تصویر بالا) : DW VZ
در واقع code book یا کتاب کد انیگما لیستی از تنظیمات کلید روزانه و اسناد کمکی اون برای رمزگذاری یا رمز گشایی هست و برای تحقیق بیشتر این لینک رو ببینید.
۳- چرخدندهها (روتورها)
- بعد از صفحه سیمبندی، متن یا پیام به ترتیب از سه روتور عبور می کنه (از راست به چپ) که هر کدام با استفاده از ترکیب رمز جابجایی و رمز سزار آن را به طور متفاوت تغییر می ده! در engima M3 سه شیار روتور و سه یا پنج روتور برای انتخاب وجود دارد. هر روتور با استفاده از یک عدد رومی از I تا V شناسایی میشود. این موارد تنظیمات ماشین انیگما را فراهم میکنه:
از کدام روتورها استفاده کنیم
به چه ترتیبی آنها را قرار بدیم (در کتاب کد، این حالت به عنوان IV II III (روتورهای چپ، میانی و راست) ثبت میشه)
هر یک از پنج روتور با استفاده از یک رمز جابجایی/جایگزینی، حرف را به طور متفاوتی رمزگذاری میکنند و میتوانند در دستگاه انیگما با تنظیمات حلقه متفاوت متصل شوند. تنظیم دیگر موقعیت اولیه روتورها است که قرار است هر روتور را با کدام حروف شروع کنیم (مثلاً A/B/C../Z که گاهی اوقات در کتاب کد با استفاده از اعداد ثبت می شود (01 برای A، 02 برای B تا 26 برای Z) این یک تغییر در Caesar Cipher ایجاد میکند. در دستگاه Enigma می توانیم با چرخاندن سه چرخ موقعیت روتورها را تغییر بدیم.
نسخههای مختلف Enigma (به عنوان مثال M4) شامل چهار روتور بود که فرآیند رمزگذاری و تعداد تنظیمات ممکن را حتی بیشتر میکرد.
چیزی که شکستن کد انیگما را سخت می کنه این هست که با هر بار فشار دادن یک کلید، روتور سمت راست به اندازه 1 حرف می چرخد. این بدان معنی است که تنظیمات رمزگذاری به طور مداوم برای هر حرف از یک پیام تغییر می کند. همچنین به این معنی است که یک حرف متن ساده بسته به موقعیت آن در پیام به طور متفاوتی رمزگذاری می شود. روتورها نیز به یکدیگر متصل شده اند تا وقتی روتوری که در سمت راست قرار دارد به حرف خاصی برسد، روتور را در وسط فعال می کند تا یک حرف بچرخد. به طور مشابه وقتی روتور در وسط به یک حرف خاص می رسد، روتور سمت چپ را فعال می کند تا یک حرف بچرخد.
اطلاعات بیشتر در مورد نحوه عملکرد روتورها را در این صفحه ویکی پدیا هستش.
۴− بازتابنده
رفلکتور نوع دیگری از ساختار مکمل چرخ دندهها یا روتور داخل دستگاه هست. هنگامی که متن پیام از میان سه روتور از راست به چپ عبور میکنه، بازتابنده جریان الکتریکی را از طریق روتورها منعکس میکند و نامه رمزگذاری شده را از طریق روتورها از چپ به راست برای 3 مرحله دیگر رمزگذاری و سپس دوباره از طریق صفحه سیمبندی برای رمزگذاری ارسال میکند. رمز جایگزینی نهایی هنگام عبور از بازتابنده، یک رمز جایگشت نیز به حرف اعمال میکند.
نسخه های مختلف بازتابنده در نسخه های مختلف ماشین های انیگما استفاده شد. هر بازتابنده رمز جایگشت متفاوتی را اعمال می کند. ماشینهای Enigma M3 به یک بازتابنده UKW-B یا UKW-C مجهز بودند.
۵- صفحه نمایش لامپی
تخته چراغ آخرین مرحله از فرآیند رمزگذاری است و برای نشان دادن خروجی (حروف رمزگذاری شده) استفاده میشود. این لامپ از 26 لامپ برای هر حرف الفبا تشکیل شده است.
نمودار زیر سفر یک نامه را از طریق فرآیند رمزگذاری Enigma M3 نشان میده و اگر بهش خوب دقت کنیم بدون درک عمیق موارد بالا میشه مکانیزم کلی ماشین انیگما رو از روی تصویر پایین متوجه شد.
کدها
در این مرحله سراغ کدهای اجرایی میریم که نمونه کد اجرایی روی colab از این لینک و gist این پروژه رو از این لینک میتونید ببینید
مطلبی دیگر از این انتشارات
تجربه من و دوستام از ساخت یک کنسول ساده بازی
مطلبی دیگر از این انتشارات
تاریخچه زبان جاوا - قسمت 1
مطلبی دیگر از این انتشارات
ساخت Snapp food Clone 🍔 _ بخش اول