رمز ویژنر (Vigenère cipher)، رمزی که می‌گفتن نمی‌شکنه؛ اما شکست!

سلام مجدد
این جلسه در ادامه سری جلسات مربوط به رمزنگاری اطلاعات هست که قول دادم بهش بپردازیم.
جلسه قبل به رمز سزار پرداختیم که از اینجا می‌تونید مطالعه‌اش کنید 🙂
با من همراه باشید.

رمز ویژنر یکی از اون رمزنگاری‌های قدیمی و جذابیه که یه زمانی برای خودش برو بیایی داشته.
داستان این رمز پر از نکات جالبیه که نشون می‌ده چطور ذهن انسان‌ها برای پنهان کردن اطلاعات و در عین حال تلاش برای کشف این پنهان‌کاری‌ها فسفر سوزونده.

تاریخچه

خوبه بدونیم این رمز برای حدود 300 سال به عنوان یه رمز «غیرقابل شکستن» شهرت داشته و حتی توی ارتش و دولت‌های مختلف هم برای محافظت از اطلاعات مهم استفاده می‌شده!
تصور کن، یه رمز که قرن‌ها کسی نتونسته شکستش بده، چه قدر قدرتمند به نظر می‌رسیده! (اما خیلی تند نرو…)

giovan battista bellaso picture

این رمز توسط Giovan Battista Bellaso که اهل ایتالیا بوده در سال 1553 بیان شده ظاهرا؛
اما بخاطر این اسمش ویژنر هست که توی قرن 19 به اشتباه، طرحش به Blaise de Vigenère نسبت داده شده.
(اگه اینطور باشه، ظلمه واقعا 😐) (اینا رو ویکی‌پدیا خدمتمون عارض شده)

راستی عکس این بنده خدا (تبیین کننده اولی و اصلی رمز، همین باتیستا) رو براتون گذاشتم.

چرا بهش می‌گفتن «رمز غیرقابل شکستن»؟

دلیل این لقب به تفاوت اساسی رمز ویژنر با رمزهای ساده‌تری مثل رمز سزار برمی‌گرده.
توی رمز سزار، ما فقط یه کلید(همون مقدار انتقال) داریم و همه‌ی حروف متن اصلی با یه مقدار ثابت جابه‌جا می‌شن.
این یعنی اگه کسی بتونه یک یا چند حرف از متن رمز شده رو با متن اصلی تطبیق بده، به راحتی می‌تونه کلید رو پیدا کنه و کل پیام رو رمزگشایی کنه.

اما رمز ویژنر با استفاده از یه کلمه‌ی کلیدی، برای هر حرف از متن اصلی یه شیفت متفاوت اعمال می‌کنه.
این تنوع در شیفت‌ها باعث می‌شه که تحلیل فرکانس حروف، که یکی از روش‌های رایج برای شکستن رمزهای ساده هست، دیگه به راحتی جواب نده. 🙃
توی یه متن رمز شده با ویژنر، دو حرف یکسان در متن اصلی ممکنه به حروف مختلفی در متن رمز شده تبدیل بشن، و برعکس، دو حرف یکسان در متن رمز شده ممکنه از حروف مختلفی در متن اصلی به وجود اومده باشن.
این پیچیدگی باعث می‌شد که برای مدت‌ها کسی نتونه یه روش سیستماتیک برای شکستن این رمز پیدا کنه.

یه مثال:

فرض کن می‌خوایم جمله‌ی «THIS IS SECRET» رو با کلید «CODE» رمزنگاری کنیم.

  1. تکرار کلید: کلید رو تکرار می‌کنیم تا به اندازه‌ی طول متن اصلی بشه:


    (سه بار کلید “code” تکرار شده تا به طول متن اصلی برسه!)

  2. تبدیل حروف به اعداد:


    خب حالا هم متن اصلی و هم کلید تکرار شده رو به معادل عددی تبدیل کنید. (از صفر شروع میشه اعداد و صفر رو معادل A در نظر می‌گیریم)

  3. جمع اعداد و مود 26:


    در واقع mod 26 برای اینه که اگه یه وقت بیشتر از 26 بود حاصل جمع، به مشکل نخوریم و برگرده به بازه‌ی اعداد معادل حروف!
    منظور از مد (mod)، باقی‌مانده تقسیم هست!

    مثال:
    فکر کنید یه عددمون 22 هست و اون یکی 23 هست.
    22 + 23 = 45
    حالا تقسیم بر 26 می‌کنیم و باقی مانده رو به عنوان عدد معادل حرف رمز انتخاب می‌کنیم.
    45 % 26 = 19

    توجه داشته باشید که اگه زیر 26 بود، اصلا نیازی به گرفتن باقی‌مونده نیست! و خود حاصل جمع، معادل حرف رمز هست.

    اینکه چرا 26 هم بخاطر تعداد حروف الفبای انگلیسی هست.

  4. نتیجه: متن رمزنگاری‌شده می‌شه «VVLW KGV IE FHX».
    می‌بینی که حروف تکراری مثل ‘S’ در متن اصلی به حروف مختلف (‘W’ و ‘G’ و ‘V’) در متن رمز شده تبدیل شدن.
    واقعا آدم لذت می‌بره! 😀

نقاط ضعف و چگونگی شکسته شدن

همون‌طور که گفتم، بالاخره این رمز به ظاهر غیرقابل شکستن هم شکسته شد. کلید این شکست، درک نقاط ضعف این روش بود:

  • تکرار کلید: مهم‌ترین ضعف رمز ویژنر، تکرار شدن کلید بود.
    اگه طول پیام خیلی بیشتر از طول کلید باشه، کلید به صورت دوره‌ای تکرار می‌شه.
    این تکرار باعث ایجاد الگوهایی در متن رمز شده می‌شه. (شما رو نمیدونم ولی اینا برای من معادل ترشح دوپامین هست 😁)

  • تحلیل کاسیسکی: فریدریش کاسیسکی، یه افسر ارتش و رمزنگار آلمانی، در قرن 19 (حدود سال 1863) روشی برای بهره‌برداری از این ضعف پیدا کرد. روش کاسیسکی بر پایه‌ی پیدا کردن توالی‌های تکراری در متن رمز شده و فاصله‌ی بین این تکرارها استوار بود.
    فرض کنید یه توالی چند حرفی در متن رمز شده چند بار تکرار شده باشه. احتمال زیادی وجود داره که این توالی‌ها مربوط به یه توالی یکسان در متن اصلی با بخش یکسانی از کلید باشن. فاصله‌ی بین این توالی‌های تکراری معمولاً مضربی از طول کلید هست.
    و با پیدا کردن چندین توالی تکراری و محاسبه‌ی بزرگ‌ترین مقسوم‌علیه مشترک فاصله‌های بینشون، می‌شه طول احتمالی کلید رو حدس زد.
    اگه از ریاضی به عنوان دوست یا دشمنی که خیلی ساله باهاش مواجه نشدید یاد می‌کنید، اشکالی نداره. به زبون ساده‌تر:
    اگه بتونیم چند تا تیکه تکراری از متن رمز شده رو پیدا کنیم و فاصله بینشون رو حساب کنیم، بعد بزرگ‌ترین عددی که این فاصله‌ها بهش بخش‌پذیرن رو پیدا کنیم، می‌تونیم حدس بزنیم طول کلید چقدره.

  • تحلیل فرکانس با طول کلید مشخص: وقتی طول کلید مشخص شد، می‌تونیم متن رمز شده رو به ستون‌هایی تقسیم کنیم که هر ستون با یه حرف خاص از کلید رمزنگاری شده.
    حالا هر کدوم از این ستون‌ها در واقع یه متن رمز شده با یه شیفت ثابت (مثل رمز سزار) هستن.
    با تحلیل فرکانس حروف در هر ستون و مقایسه‌ی اون با فرکانس حروف در زبان اصلی، می‌شه حرف مربوط به اون شیفت (یعنی حرف کلید) رو حدس زد. این کار رو برای همه‌ی ستون‌ها انجام می‌دیم تا کلید به دست بیاد.

اهمیت تاریخی

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

امروزه دیگه از رمز ویژنر برای محافظت از اطلاعات حساس استفاده نمی‌شه، چون روش‌های بسیار قوی‌تر و پیچیده‌تری وجود دارن.
اما به عنوان یه مثال آموزشی و یه قطعه‌ی جذاب از تاریخ رمزنگاری، همچنان مورد توجه قرار می‌گیره و به ما کمک می‌کنه تا تکامل این علم رو بهتر درک کنیم.

منتظر مطلب بعدی باشید و اگه مطلب قبلی رو نخوندید، برید سراغش…
و اما…
کامنت یادتون نره 🙂

2 دیدگاه دربارهٔ «رمز ویژنر (Vigenère cipher)، رمزی که می‌گفتن نمی‌شکنه؛ اما شکست!;

  1. عالی بود ، من طاقت پیدا کردن همچین مطالبی رو ندارم و فقط چشمم بهشون میخوره میخونم ، اما خدا یه دوست برامون قرار داده که بخاطر دوست داشتنش مجبور میشیم مطالبشو بخونیم😅😅

    پاسخ

دیدگاهتان را بنویسید