رمزنگاری (Cryptography) را میتوان به صورت زیر تعریف کرد:
«هنر حفاظت از اطلاعات با تبدیل آنها به شکلی که به غیر از مخاطب مورد نظر، فرد دیگری نتواند آنها را بخواند».
در رمزنگاری، شکل اولیه پیام که انسان میتواند آن را بخواند و «متن آشکار» (plaintext) نام دارد، با استفاده از یک الگوریتم یا مجموعهای از توابع ریاضیاتی، به شکلی به نام «متن رمزنگاری شده» (ciphertext) تبدیل میشود که فقط مخاطب هدف میتواند آن را درک کند و برای دیگران قابل درک نیست.
سیستمهای رمزنگاری نیازمند روشهایی هستند تا به مخاطب هدف، امکان خواندن پیام رمزنگاری شده را بدهند. معمولا (ولی نه همیشه)، این روشها «متن رمزنگاری شده» را به «متن آشکار» تبدیل میکنند.
پیش از اینکه بیشتر در رابطه با رمزنگاری صحبت کنیم، بد نیست که بعضی مفاهیم مرتبط را که گاهی اوقات به اشتباه به جای رمزنگاری استفاده میشوند، برای شما توضیح دهیم و تفاوتهای این مفاهیم را با همدیگر روشن کنیم.
واژه crypt از کلمهای یونانی به معنی مخفی یا راز، برگرفته شده است. cryptography در لغت به معنی «رازنویسی» (secret writing) است. رمزشناسی یا cryptology در لغت معنی «دانش رازداری» (knowledge of secrecy) میدهد؛ اگر رمزنگاری را عمل نوشتن پیامهای رمزی بدانیم، رمزشناسی را میتوان دانش نوشتن پیامهای رمزی دانست. از سوی دیگر، رمزگذاری یا encryption در لغت به معنی «ساخت راز» و در اصطلاح به معنی تبدیل «متن آشکار» به «متن رمزنگاری شده» است اما کل دانش رمزشناسی را در بر نمیگیرد. رمزگشایی (decryption) به عمل متضاد رمزگذاری گفته میشود.
یکی از مهمترین جنبههای فرایند رمزگذاری این است که همیشه، یک الگوریتم و یک کلید دارد. کلید، مقداری اطلاعات و معمولا همیشه به صورت یک عدد است که چگونگی اعمال الگوریتم روی «متن آشکار» برای تبدیل آن به «متن رمزنگاری شده» را تعیین میکند.
در یک سیستم رمزنگاری امن، حتی اگر روش رمزگذاری پیامی را بدانید، کدگشایی آن بدون داشتن کلید، بسیار دشوار یا حتی غیر ممکن است. دو مفهوم الگوریتم و کلید را در ذهن خود نگه دارید زیرا در ادامه این مقاله، به آنها نیاز خواهید داشت.
یکی از اولین شکلهای رمزنگاری، رمز سزار (Cesar cipher) نامیده میشود زیرا ژولیوس سزار از آن برای ارتباطات محرمانه استفاده میکرده است. سوئتونیوس در زندگینامه ژولیوس سزار میگوید: «اگر او میخواست چیزی محرمانه بنویسد، آن را به صورت رمزی مینوشت و برای این کار، ترتیب حروف را در الفبا، تغییر میداد. اگر کسی میخواست این نوشتهها را رمزگشایی و معنی آنها را استخراج کند، میبایستی حرف چهارم حروف الفبا را با حرف اول جایگزین میکرد و با این کار ترتیب کل حروف الفبا را تغییر میداد».
توصیف سوئتونیوس از رمز سزار، شامل دو مؤلفه رمزنگاری است که در بالا به آنها اشاره کردیم؛ الگوریتم و کلید. الگوریتم رمز سزار بسیار ساده است: هر حرف با حرف دیگری در حروف الفبا جایگزین میشود. کلید رمز سزار این بود که هر حرف باید با چندمین حرف در حروف الفبا جایگزین میشد. همانطور که سوئتونیوس میگوید، کلید رمز سزار، جایگزینی هر حرف با سه حرف عقبتر بود. مشخص است که ژولیوس سزار میتوانست هر بار، رمز و کلید را تغییر دهد. برای مثال، میتوانست کلید را به این صورت تعریف کند که هر حرف با پنج حرف عقبتر، جایگزین شود.
با رمزنگاری به شیوه سزار میتوانید هر پیامی را که بخواهید، به صورت محرمانه منتقل کنید. بر خلاف رمز سزار، اگر از یک سیستم دارای عبارات کد استفاده کنید، فردی که پیام را دریافت میکند، باید سندی از همه عبارات کد در اختیار داشته باشد و نمیتوان هر پیامی را با این سیستم انتقال داد.
برای مثال، ممکن است در یک سیستم رمزنگاری بر اساس عبارت کد، «چوب دستی» به صورت «تفنگ ژ۳» کدگشایی شود ولی هیچ رمزی برای عبارت «سلاح ضد تانک» تعریف نشده باشد و در نتیجه، امکان مخابره این پیام به صورت رمزی با چنین سیستمی وجود ندارد.
این در حالی است که در سیستم رمز سزار، یک الگوریتم ثابت وجود دارد و با استفاده از آن میتوان هر پیامی را که فکرش را بکنید، رمزنگاری کرد و هر کسی که این الگوریتم را بداند، میتواند پیام شما رمزگشایی کند. یکی دیگر از مزیتهای رمز سزار در مقایسه با سیستم رمزنگاری با استفاده از عبارات کد، امنیت بالاتر و راحت بودن استفاده از آن است زیرا نیازی به یک سند قطور از عبارات کد ندارد.
رمز سزار به «رمز جانشینی» (Substitution cypher) نیز معروف است زیرا در این سیستم، هر حرف، جانشین حرف دیگری میشود. انواع دیگری از رمز جانشینی وجود دارند که در آنها، چندین حرف یا کل یک کلمه، جایگزین میشوند.
در بیشتر طول تاریخ، از رمز جانشینی برای انتقال پیامهای محرمانه دولتی و نظامی استفاده میشد تا اینکه ریاضیدانان عرب در دوران قرون وسطی، دانش رمزنگاری را کمی به جلو برند. با این حال، اکثر سیستمهای رمزنگاری که پیش از دوران مدرن توسعه یافتهاند، بسیار ساده هستند زیرا پیش از اختراع و توسعه کامپیوترها، انجام تبدیلات ریاضیاتی برای رمزگشایی پیامها، بسیار زمانبر بود.
در واقع، رمزنگاری به موازات توسعه کامیپوترها پیشرفت کرده است. چارلز بابیج (Charles Babbage) که ایده «ماشین تفاضلی» (Difference Engine) او زمینهساز توسعه کامپیوترهای مدرن شد، به رمزنگاری علاقهمند بود. در طول جنگ جهانی دوم، آلمانها از نوعی وسیله الکترومکانیکی به نام «ماشین انیگما» (Enigma Machine) برای رمزنگاری پیامها استفاده میکردند و آلن تورینگ (Alan Turing) معروف نیز تیمی در بریتانیا تشکیل داد تا ماشین مشابهی برای رمزگشایی پیامهای آلمانها توسعه دهند که کار آنها، زمینهساز توسعه کامپیوترهای مدرن شد. با اختراع و توسعه کامپیوترهای مدرن، رمزنگاری به شکل دیوانهواری پیچیده شد ولی به مدت چندین دهه، فقط جاسوسها و نظامیها از آن استفاده میکردند.
پیش از اینکه وارد موضوع رمزنگاری مدرن شویم، باید دو اصل مهم رمزنگاری را برای شما توضیح دهیم. اصل اول، «اصل کرکهوفس» (Kerckhoffs’s principle) نامیده میشود که برگرفته از نام رمزنگار هلندی قرن نوزدهم به نام آگوست کرکهوفس (August Kerckhoffs) است. همانطور که گفتیم، هر سیستم رمزنگاری، یک الگوریتم و یک کلید دارد. کرکهوفس بر این باور بود که «حتی اگر همه مردم، همه چیز را به غیر از کلید، در مورد یک سیستم رمزنگاری بدانند، آن سیستم رمزنگاری باید کاملا امن باشد».
در قرن نوزدهم، رمزنگاری فقط کاربرد نظامی داشت و دلیل اصل کرکهوفس این بود که هر چقدر هم از یک سیستم رمزنگاری محافظت کنید تا کاملا محرمانه باقی بماند، دشمن نهایتا از سیستم شما با خبر خواهد شد. کلاود شانون (Claude Shannon) که یکی از رمزنگاران معروف در جنگ جهانی دوم بود و میتوان او را یکی از پیشگامان «نظریه اطلاعات» (Information Theory) دانست، میگوید: «دشمن از سیستم با خبر است». منظور کرکهوفس و شانون این است که شما باید الگوریتمی طراحی کنید که برای سری نگه داشتن کردن اطلاعات محرمانه، نیازی به مخفی نگه داشتن این الگوریتم نداشته باشید.
در دنیای امروز، دیدگاه مثبتی نسبت به مفهوم رمزنگاری وجود دارد و دیگر کسی رمزنگاری را به عنوان روشی برای جاسوسی یا نظامیگری نمیبیند. امروزه، مطالعات زیادی روی الگوریتمهای رمزنگاری استاندارد انجام میشود و تلاش برای توسعه یک سیستم رمزنگاری محرمانه، محکوم به شکست است.
تنها چیزی که شما باید از آن محافظت کنید و آن را محرمانه نگه دارید، کلید رمزگشایی است. در بخش دیگری از مقاله در رابطه با نحوه کار کلید در رمزگشایی صحبت خواهیم کرد اما اکنون میخواهیم اصل دوم رمزنگاری را که به نحوه کار کلید مربوط میشود، توضیح دهیم.
اصل دوم رمزنگاری میگوید که هر سیستم رمزنگاری باید به «توابع یک طرفه» (One-way functions) وابسته باشد. ضرب دو عدد اول بسیار بزرگ، مثالی کلاسیک از یک تابع یک طرفه است. با اینکه محاسبه این تابع بسیار ساده است اما اگر فقط جواب را داشته باشید، پیدا کردن این دو عدد، کاری بسیار دشوار و حتی غیر ممکن است. البته، این موضوع که آیا توابع میتوانند یک طرفه باشند یا خیر، در ریاضیات مورد تردید است اما بسیاری از توابعی که یک طرفه نامیده میشوند، با توجه به توان پردازشی کامپیوترهای کنونی، در عمل، یک طرفه محسوب میشوند.
از زمان شکلگیری اولین شبکههای کامپیوتری، شهروندان معمولی نیز درگیر موضوع مهم رمزنگاری شدند. در شبکههای باز مثل اینترنت، همه کامپیوترها با همدیگر ارتباط دارند. با اینکه چنین شبکههایی از بسیار جهات، سازنده و مفید هستند اما سرقت اطلاعات در این شبکهها، بسیار ساده است. از آنجایی که خدمات مالی، از اولین خدماتی بودند که استفاده از شبکههای کامپیوتری در آنها مرسوم شد، موضوع حفاظت اطلاعات و امنیت شبکه خیلی زود در اولویت توسعهدهندگان شبکههای کامپیوتری قرار گرفت.
در اواخر دهه ۱۹۶۰، شرکت IBM نوعی روش رمزنگاری تحت عنوان لوسیفر «Lucifer» توسعه داد که نهایتا، مؤسسه ملی فناوری و استانداردهای ایالات متحده آمریکا (US National Bureau of Standards) آن را به عنوان نخستین استاندارد رمزنگاری داده (Data Encryption Standard یا DES) ثبت کرد.
با افزایش سریع اهمیت اینترنت، نیاز به رمزنگاری بیشتر و بیشتر شد و امروزه، بخش عمده دادهایی که در دنیا بر بستر اینترنت جا به جا میشوند، از پروتکلهای رمزنگاری مختلف عبور میکنند تا از دسترسی غیرمجاز به آنها، جلوگیری شود.
تا اینجا، به بعضی از کاربردهای خاص رمزنگاری مثل انتقال پیامهای نظامی، جاسوسی و مخابره اطلاعات مالی بر بستر اینترنت، اشاره کردیم. با این حال، کاربردهای رمزنگاری بسیار بیشتر از موارد یاد شده است و این دانش گسترده، به ویژه در حوزه امنیت سایبری کاربر دارد. متخصصان امنیت سایبری میتوانند با استفاده از تکنیکهای رمزنگاری:
انواع بسیار زیادی الگوریتم برای رمزنگاری وجود دارد ولی میتوان این الگوریتمهای متعدد را به چند دسته کلی تقسیمبندی کرد که به شرح زیر هستند:
رمز سزار که در بالا توضیح داده شد، مثالی عالی از این دسته الگوریتم رمزنگاری است. در مثالی که برای شما آوردیم، اگر پیامی محرمانه از سزار به یکی از فرماندهان نظامیاش ارسال میشد، هر دو طرف، کلید را داشتند (هر حرف باید با چند حرف عقبتر جا به جا میشد تا پیام، رمزگشایی شود). به این نوع رمزنگاری، رمزنگاری متقارن (symmetrical cryptography) گفته میشود. در این سیستم رمزنگاری، کلید باید محرمانه باقی بماند و به غیر از ارسالکننده و دریافتکننده پیام، هیچ کس نباید به آن دسترسی داشته باشد. به همین دلیل، نام دیگر رمزنگاری متقارن، «رمزنگاری کلید محرمانه» (secret key cryptography) است.
در این تکنیک، شما نمیتوانید کلید را با پیام ارسال کنید زیرا اگر هر دو به دست دشمن بیافتند، پیام شما لو میرود. ژولیوس سزار، هر زمانی که با فرماندهانش دیدار محرمانه داشت، کلید را به آنها میگفت ولی وقتی جنگها کیلومترها دورتر از پایتخت امپراتوری روم رخ میدادند، انتقال کلید به فرماندهان برای ژولیوس سزار به این سادگیها نبود.
استفاده از رمزنگاری متقارن برای محرمانه نگه داشتن دادهها، بسیار رواج دارد. با این روش، به راحتی میتوان اطلاعات درون یک هارد درایو لوکال را رمزنگاری کرد زیرا یک کاربر، هم رمزنگاری و هم رمزگشایی داده را انجام میدهد و نیازی به انتقال کلید به کاربر دیگری نیست.
گذشته از این، میتوان از رمزنگاری متقارن برای محرمانه نگه داشتن دادهها انتقالی بر بستر اینترنت نیز استفاده کرد اما برای این کار، باید از رمزنگاری غیرمتقارن (Asymmetrical cryptography) نیز که در زیر توضیح داده شده است، استفاده کنید.
سزار میتوانست در ملاقاتهای محرمانه، کلید رمزگشایی نامههایش را به فرماندهان نظامیاش بگوید ولی به لطف تکنیک جدیدی به نام رمزنگاری نامتقارن، امروزه دیگر نیازی نیست که برای انجام یک تراکنش بانکی، به بانک مراجعه کنید و کلید خود را به بانکدار بگویید تا کار شما انجام شود.
در بانکداری آنلاین، کلیدها بر بستر اینترنت جا به جا میشوند ولی نیاز است که روشی ایمن برای انتقال کلید وجود داشته باشد. به همین دلیل، وقتی تراکنشی آنلاین انجام میدهید، نیاز به یک کانال ارتباطی امن دارید. برای ایجاد این کانال ارتباطی از رمزنگاری نامتقارن یا رمزنگاری کلید عمومی (public key cryptography) استفاده میشود.
در این نوع رمزنگاری، ارسالکننده و دریافتکننده پیام، هر کدام دو کلید در اختیار دارند. یکی از این کلیدها عمومی است و برای تمامی مخاطبانی که فرستنده میخواهد با آنها ارتباط برقرار کند ارسال میشود. از این کلید برای رمزنگاری پیامها استفاده میشود. کلید دیگر، خصوصی است و در اختیار هیچ کس قرار نمیگیرد اما برای رمزگشایی پیامها ضروری است. به عنوان مثال، میتوان کلید عمومی را همانند شکاف صندوق پست در نظر گرفت که میتوان نامه را درون آن انداخت ولی امکان خروج نامه از این شکاف وجود ندارد و فقط پستچی که کلید خصوصی جعبه را دارد میتواند نامههای درون صندوق را خارج کند.
از توابع یک طرفه برای رمزگشایی نامتقارن استفاده میشود. این دو کلید باید از نظر ریاضیاتی به هم دیگر مرتبط باشند ولی رابطه آنها باید به قدری پیچیده باشد که نتوان به راحتی از کلید عمومی به کلید خصوصی رسید. برای مثال، کلید خصوصی میتواند از دو عدد اول بزرگ تشکیل شده باشد و کلید عمومی از حاصلضرب این دو عدد به دست بیاید.
محاسبات مورد نیاز برای رمزگشایی غیرمتقارن نیاز به امکانات و منابعی دارد که بسیار فراتر از امکانات و منابع زیرساختهای متقارن است. خوشبختانه، شما برای ارسال هر پیام آنلاین به چنین امکاناتی نیاز ندارید. در واقع، یکی از طرفین ارسالکننده یا دریافتکننده پیام، از رمزنگاری متقارن برای رمزنگاری پیامی که حاوی کلید رمزنگاری دیگری است، استفاده میکند. این کلید دوم، به صورت کاملا محرمانه بر بستر ناامن اینترنت، منتقل و به کلید خصوصی تبدیل میشود که نشستهای ارتباطی بسیار طولانیتری را از طرف رمزگشایی متقارن، کدگشایی میکند.
بدین ترتیب، رمزگشایی نامتقارن به محرمانگی انتقال اطلاعات کمک میکند. البته، خود این کلیدها، بخشی از مجموعهای بزرگتر از توابع به نام زیرساخت کلید عمومی (public key infrastructure یا PKI هستند. از KPI برای اطمینان از اینکه هر کلید عمومی با شخص یا سازمان خاصی ارتباط دارد، استفاده میشود. هر پیام با یک کلید عمومی رمزنگاری میشود و هویت فرستنده را تأیید میکند و احراز هویت و «عدم انکار» را انجام میدهد.
هم الگوریتمهای متقارن وهم الگوریتمهای نامتقارن، متن آشکار را به متن رمزنگاری شده و سپس این متن را مجددا به متن آشکار تبدیل میکنند. در مقابل، توابع هش (hash functions) نوعی رمزنگاری یک طرفه را انجام میدهند؛ اگر از این توابع برای رمزنگاری متنی استفاده کنید، هرگز نمیتوانید آن متن را رمزگشایی کنید. در این روش نیز از توابع یک طرفه استفاده میشود.
ممکن است این طور به نظر برسد که رمزنگاری با استفاده از توابع هش، کاری بیهوده است اما دقت داشته باشید که هیچ دو متن متفاوتی، پس از رمزنگاری با این روش، هش یکسانی تولید نمیکنند (این گفته از نظر ریاضیاتی کاملا درست نیست اما در مورد توابع هش که در رمزنگاری استفاده میشوند، صدق میکند زیرا احتمال ایجاد دو هش یکسان از دو متن متفاوت، به قدری پایین است که میتوان آن را نادیده گرفت).
بنابراین، الگوریتمهای هش ابزاری عالی برای حفاظت از تمامیت و درستی دادهها هستند. برای مثال، میتوان پیامی را همراه با هش آن ارسال کرد. دریافتکننده میتواند از همان الگوریتم برای هش کردن پیام استفاده کند. اگر هش ایجاد شده با هش ارسال شده متفاوت باشد، دریافتکننده متوجه میشود که پیام تغییر کرده است و همان پیامی نیست که ارسالکننده برای شما فرستاده است.
از هش کردن برای محرمانه نگه داشتن گذرواژهها نیز استفاده میشود. ذخیره کردن گذرواژهها به صورت متن آشکار، از نظر امنیتی اصلا درست نیست و به هیچ وجه، توصیه نمیشود زیرا احتمال لو رفتن این گذرواژهها بسیار زیاد است. به جای این کار، شما میتوانید نسخه هش شده از گذرواژه را ذخیره کنید و بنابراین، اگر این هش به دست هکرها بیافتند، هیچ کاربردی برای آنها نخواهد داشت زیرا امکان به دست آوردن گذرواژه از روی هش وجود ندارد. زمانی که یک کاربر مجاز میخواهد با گذرواژهاش وارد سیستم شود، گذرواژه وارد شده، توسط سیستم هش میشود و با هش ذخیره شده انطباق داده میشود. در صورتی کاربر میتواند به سیستم وارد شود که این دو هش، کاملا با هم انطباق داشته باشند.
همانطور که دیدید، رمزنگاری به هیچ وجه موضوع تازهای نیست و حتی ژولیوس سزار نیز برای مخابره پیامهای خودش به فرماندان نظامی از رمزنگاری استفاده میکرده است. با اینکه رمزنگاری تا همین چند دهه گذشته فقط کاربرد نظامی و جاسوسی داشته است اما امروزه تقریبا در تمامی جنبههای زندگی روزمره ما کاربرد دارد.
با گسترش کاربرد اینترنت و استفاده از شبکههای باز برای مخابره اطلاعات حساس و محرمانه مثل گذرواژههای حسابهای بانکی، اهمیت رمزنگاری در زندگی روزمره انسان بیشتر و بیشتر شد و امروزه تقریبا تمامی اطلاعاتی که بر بستر اینترنت منتقل میکنیم، رمزنگاری میشوند.
تکنیکهای بسیار زیادی برای رمزنگاری وجود دارد ولی به طور کلی میتوان این تکنیکها را در سه دسته رمزنگاری متقارن، رمزنگاری نامتقارن و رمزنگاری بر اساس توابع هش جای داد. رمزنگاری متقارن همان روشی است که ژولیوس سزار از آن استفاده میکرد اما در دو روش دیگر، از توابع ریاضیاتی یک طرفه استفاده میشود. امروزه از این روشهای رمزنگاری در امنیت سایبری و امنیت شبکه به طور گستردهای استفاده می کنند.
منبع: