مقدمه
انسان به طور ذاتی، موجودی اجتماعی است و نیاز به برقراری ارتباط با دیگران و همچنین اشتراک اطلاعات دارد. با تكامل تمدن ها، انسان ها در قبایل، گروه ها و پادشاهی ها زندگی کردند و ایده هایی مانند قدرت، نبرد، برتری و سیاست ظهور کرد. این ایده ها به نیاز طبیعی مردم برای برقراری ارتباط پنهانی با گیرنده انتخابی دامن زد که به نوبه خود باعث به وجود آمدن رمزنگاری نیز شد. [3]
کلمه "رمزنگاری" با ترکیب دو کلمه یونانی ، "کریپتو" به معنای پنهان و "گرافن" به معنای نوشتن ، ابداع شده است.
هنر و علم پنهان کردن پیام ها برای ایجاد رازداری در امنیت اطلاعات به عنوان رمزنگاری شناخته می شود. [3] هنر رمزنگاری به همراه هنر نوشتاری متولد شد. اولین شکل رمزنگاری نوشتن پیام ساده بود ، زیرا در آن زمان بیشتر مردم نمی توانستند بخوانند. در حقیقت، رمزنگاری اولیه فقط مربوط به تبدیل پیام به گروه های غیرقابل خواندن ارقام برای محافظت از محتوای پیام در مدت زمان ارسال پیام از یک مکان به مکان دیگر بود. [2]
ریشه های رمزنگاری در تمدن های رومی و مصر یافت می شود. در طول تاریخ رفته رفته، رمزنگاری از رویکردهای موقت به هنر و علم امنیت اطلاعات تکامل و توسعه یافت.
در اوایل قرن بیستم اختراع ماشین های مکانیکی و الکترومکانیکی، مانند ماشین های چرخشی، ابزار پیشرفته تر و کارآمد تری برای رمزنگاری اطلاعات فراهم کرد. [4]
امروزه رمزنگاری با استفاده از رایانه ها و با کمک علم ریاضی به پیشرفت های چشمگیری دست یافته است. از جنگ گرفته تا هر صنعتی که روی کره ی زمین است، سازمان های دولتی و حتی گروه ها یا افراد از رمزگذاری برای محافظت از اطلاعات محرمانه که از طریق اینترنت انتقال می یابد، استفاده می کند. [4]
به دلیل اینکه افراد، نیازمند راه و روشی مطمئن و کارآمد برای حفظ محرمانگی اطلاعات خود هستند و کلید حل آن را در رمزنگاری می بینند، تاکنون روش ها و تکنیک های زیادی در این زمینه معرفی شده است. [1]
بنابراین به دلیل درک اهمیت این موضوع، تصمیم بر آن گرفتیم که در این متن به شرح دو نمونه از این روش ها، یعنی رمز مستوی (Affine) و ویژنر (Vigenère) بپردازیم. مباحثی که در ادامه بیان خواهد شد شامل آشنایی با رمزنگاری های مستوی و ویژنر و نحوه ی به کارگیری آنها، همچنین بررسی روند کلی و چالش های آنها، خواهد بود.
به طور کلی، در این نگارش این متن کوشیده ایم تا نقاط مبهم و تاریک مربوط به این موضوع را تا حد ممکن واضح تر و روشن تر کنیم.
رمزنگاری به روش مستوی
از آنجا که رمزنگاری جایگزینی معمول (Substituiton cipher)، قادر به تولید تنها 25 حالت متفاوت از متن می باشد، پس روشی بسیار ایمن برای رمزگذاری محسوب نمی شود. نوع خاصی از این رمزنگاری به وجود آمد که به آن اصطلاحا رمز مستوی (Affine) می گویند. [5]
این نوع رمزگذاری که نسخه ی مونو الفابتیک (که در آن هر واحد از متن اصلی بر طبق یک سیستم معین با رمز شده آن جایگزین میشود) جایگزینی معمول محسوب می شود، می تواند امنیت بیشتری را به نسبت فراهم کند. [5]
برای رمز گذاری(encryption) هم از یک تابع ریاضیاتی ساده استفاده می شود که عبارت است از:
E(x) = (ax + b) mod m
در اینجا m تعداد حروف الفبا، x مقدار عددی حرف استفاده شده در متن و E نتیجه ی تبدیل به رمز است و a و b هم اعداد صحیحی هستند که کلید ما را می سازند و مقدارشان باید بین 0 تا m-1 باشد.
توجه به این نکته هم ضروری است که اگر چنانچه a دارای یک مقسوم علیه کننده مشترک با m باشد، آنگاه ممکن است چندین حرف به یک حرف یکسان رمزگشایی شود که در نهایت منحصر به فرد نباشند. بنابراین، بایستی همواره بزرگترین تقسیم کننده مشترک (ب.م.م) a و m بایستی 1 باشد. [5]
اما این روش هم مشکلات خاص خودش را دارد و نمی توان از آن به عنوان روشی ایمن و مطمئن استفاده کرد، چرا که با حدس زدن مقدار a و b و جایگذاری آنها در معادله قابل شکستن است.
فرایند رمزگذاری (Encryption) مستوی
در این روش رمزنگاری، ابتدا تمامی حروف الفبایی به سایز m، به اعداد صحیحی در بازه 0 تا m-1 نگاشت می شوند.
سپس با رعایت شرط 1 = ( gcd (m, a، مقادیر مربوط به متغیر هایمان را در رابطه ی ریاضی که در بالا معرفی کردیم، جاگذاری می کنیم.
برای بهتر متوجه شدن الگوریتم، می توانید به این مثال دقت کنید:
فرض کنید می خواهیم کلمه ی "affin cipher" را با این روش رمزگذاری کنیم، کلید های ما شامل a=5 و b=8 می باشد. در ابتدای کار، هر حرف از الفبای متن را به یک عدد صحیح نگاشت می کنیم.
سپس، در گام بعدی، محاسبات لازم مربوط به جایگذاری مقادیر در رابطه انجام می دهیم که در اینجا به طور خلاصه برای هر حرف از متن اولیه در غالب جدولی آورده شده است:
بدین ترتیب، رشته ی اولیه ما که "affine cipher" بود، به "IHHWVC SWFRCP" رمز گذاری شد.
فرآیند رمزگشایی مستوی (Decryption)
برای رمز گشایی، لازم است تا تابع معکوس E را اجرا کنیم تا بتوانیم متن اولیه و بدون رمز را به دست آوریم. قدم اول تبدیل هر یک از حروف متن رمز شده به مقادیر اعداد صحیح می باشد. تابع رمزگشایی هم عبارت است از:
D(X) = a^-1 (x-b) mod m
توجه داشته باشید که معکوس (a)، مقداری است که اگر در خودش و mod m، ضرب گردد، نتیجه 1 خواهد بود، به عبارت دیگر:
(a * inverse(a)) mod m = 1
حال، ما نیاز به یافتن x ای داریم که در معادله، صدق کند؛ پس x معکوس a است و آن را a^-1 می نامیم. شاید آسان ترین راه برای حل این معادله، بررسی تک تک اعداد از 1 تا 25 و در نهایت یافتن عدد مناسبی که در این معادله صدق می کند است.
در ادامه ی مثال قبلی، این بار می خواهیم رشته ی رمز شده ی "IHHWVC SWFRCP" را به رشته ی اولیه ی آن تبدیل و به نوعی آن را رمز گشایی کنیم. بنابراین فرآیند مان را با پیدا کردن معکوس a شروع می کنیم، از آنجا که:
21 *5 = 105 = 1 mod 26, as 26* 4 = 104, and 105 - 104 = 1
پس a=21 است. اکنون باید محاسبات معکوس را روی مقادیر عدد صحیح متن رمزنگاری انجام دهیم و برای یک بار دیگر، ما باید این جوابها را 26 mod بگیریم و در نهایت هم اعداد صحیح را به حروف ساده تبدیل کنیم. این محاسبات در جدول زیر نشان داده شده است:
رمزنگاری به روش ویژنر
رمزگذاری ویژنر، توسط یک فرانسوی، به نام Blaise de Vigenère در قرن شانزدهم اختراع شد. این یک رمزنگاری شامل چندین حلقه است زیرا از دو یا چند الفبای رمزگذاری شده برای رمزگذاری داده ها استفاده می کند. به عبارت دیگر، حروف موجود در متن با مقادیر مختلف جابجا می شوند که معمولاً با استفاده از یک کلمه یا عبارت به عنوان کلید رمزگذاری انجام می شود. به طور کلی رمز گذاری، از طریق یک جدول (جدول و مربع ویژنر) انجام می شود. این جدول شامل حروف الفبایی است که در ردیف و ستون به ترتیب منتشر شده است. [5]
هرچند رمزنگاری به این روش، نسبتا ایمن است اما هنوز آسیب پذیر می باشد. هر چه کلمه کلیدی انتخابی طولانی تر باشد، رمزگذاری امنیت بیشتری خواهد داشت. همچنین اگر چنانچه طول کلمه کلیدی به اندازه طول متن اصلی باشد، (به عنوان مثال، یک نمونه از متن که قبلاً مورد توافق قرار گرفته باشد)، و از کلید جدید برای هر پیام استفاده شود، متن رمز شده تقریبا غیر قابل شکست است. [5]
فرآیند رمزگذاری ویژنر (Encryption)
برای رمزگذاری متن با استفاده از این روش، ابتدا باید یک کلمه یا عبارت کلیدی انتخاب کنیم. سپس، این کلمه کلیدی را بارها و بارها تا زمانی که اندازه ی طول آن برابر با اندازه طول متن اصلی شود، تکرار می کنیم. به این روند، جریان کلیدی (key stream) می گویند. [6]
اکنون به ازای هر حرف از متن اصلی، حرف مربوطه را از جریان کلیدی دریافت کرده و آن را در ستون های جدول ویژنر پیدا می کنیم. سپس حرف اصلی را در ردیف ها می یابیم؛ جایی که این دو خط در جدول متقاطع هستند حرف رمزگذاری متن مورد استفاده است. [6]
به عنوان نمونه، می خواهیم متن "a simple example" را با استفاده از کلمه کلیدی battista رمزگذاری کنیم. ابتدا باید با تکرار حروف کلمه کلیدی، کلید اصلی را تولید کنیم تا طول آن با طول متن اصلی یکسان شود.
حال، باید از جدول ویژنر و اطلاعات موجود در جدول بالا استفاده کنیم. به طوری که با توجه به Keystream b (به معنای این است که در تصویر بالا ازای حرف a، حرف b نگاشت شده) ستون B را انتخاب می کنیم و با کمک حرف "a" از متن اصلی به معنای انتخاب سطر با برچسب A در سمت چپ است. در این صورت حرف رمز شده ی "B" را دریافت می کنیم. [6]
به همین ترتیب برای حروف بعدی در متن اصلی، این منوال را ادامه می دهیم و در پایان، متن رمز شده نهایی "BSBF XDXEYA FITW" را دریافت می کنیم. البته برای سخت تر شدن عمل شکستن رمز، می توانیم در برخی نقاط متن نهایی، به صورت تصادفی فضا های خالی (space) هم ایجاد کنیم. توجه کنید که در اینجا "a" و "i" هر دو به "B" و همچنین سه "e" موجود درمتن هر کدام به "X" ، "E" و "W" رمزگذاری می شوند.
فرآیند رمزگشایی ویژنر (Decryption)
فرض می کنیم متن رمز شده ی ما "ZPSPNOXMOFAORMQDPUKZ" است و می خواهیم آن را رمز گشایی کنیم تا به متن اصلی برسیم. برای رمز گشایی هم به طور مشابه ابتدا، کلمه کلیدی را تا یکسان شدن با طول متن رمز شده، تکرار می کنیم و جریان کلیدی را تولید می کنیم.
سپس برچسب ستون را با حرف جریان کلیدی در بالا (که در اینجا g است) پیدا کرده و این ستون را تا وقتی که به حرف متن رمز شده برسیم به سمت پایین پیمایش می کنیم. اکنون از این نقطه، به سمت چپ جدول به صورت افقی می رویم تا اینکه به ردیفی که کلید ما اشاره دارد، ارجاع می کنیم، بعد، محل قرارگیری حرف استفاده شده در متن رمز شده را در این ردیف (t)می یابیم. در مراحل بعدی هم همین روند را تکرار می کنیم. [6]
و در نهایت پس از یافتن هر کدام از حروف، به متن اصلی "theunbreakablecipher" می رسیم.
منابع
در پایان، به معرفی منابعی که برای شرح این مباحث کمک گرفتیم، می پردازیم:
[1] برای بررسی تاریخچه رمزنگاری از زاویه ای دیگر و همچنین درک بیشتر اهمیت رمزنگاری در سراسر دنیا توصیه می شود که از این سایت با این نشانی بازدید کنید
[2] برای اطلاع بیشتر از تاریخچه هنر رمز نگاری و ارتباط آن با هنر نوشتاری پیشنهاد می کنیم از این سایت بازدید کنید.
[3] در صورت علاقه مند بودن به دانستن بیشتر راجع به رمزنگاری های اولیه در زمان های گذشته و روند پیشرفت و توسعه ی روش ها در طول زمان، می توانید به نشانی این سایت مراجعه کرده و مطالبی راجع به چگونگی تبدیل رمزنگاری های به رمزنگاری های پیشرفته کنونی مطالعه کنید.
[4] بخشی از مباحث امنیت شبکه به همراه تعدادی از کاربرد های رمزنگاری را در سایت با این نشانی خواهید یافت.
[5] چنانچه نیاز به بررسی رمزنگاری به روش مستوی دارید این سایت می تواند تا حدی آگاهی لازم را به شما بدهد.
[6] جهت پی بردن به جزئیات بیشتر در تمام مراحل رمزنگاری های مستوی و ویژنر، و بررسی دقیق تر مثال های مطرح شده در این موضوع، می توانید به نشانی این سایت مراجعه کنید.
[7] قبل از نگارش این متن، بخش هایی از کتاب Stinson D.R., Cryptography Theory and practice را مطالعه کردیم که دید آگاهانه ای نسبت به روش های رمزنگاری به ما بخشید؛ اگر شما هم علاقه مند به بخش های اثبات الگوریتم های رمزنگاری های مستوی و ویژنر و بررسی عمیق تر نکات آنها دارید، بهتر است آن را مطالعه کنید.
"این مطلب در راستای درس رمزنگاری و امنیت در دانشگاه تحصیلات تکمیلی علوم پایه زنجان نوشته شده است."
امیدواریم که خواندن این مطلب برایتان مفید واقع شده باشد، منتظر نظرات و انتقادات شما برای بهبود این مقاله هستیم.