پس از آشنایی با مفاهیم اولیه امنیت اطلاعات میخواهیم وارد مبحث رمزنگاری شویم و با روشهای مختلف رمزنگاری آشنا شویم.
در مقالهی قبلی از مجموعه مقالات مبانی امنیت اطلاعات با مفاهیم کلیدی امنیت اطلاعات آشنا شدیم. در این مقاله مبحث رمزنگاری را شروع میکنیم و پس از این که با تعاریف اولیه در این زمینه آشنا شدیم روش جانشینی ساده را بررسی میکنیم تا با استفاده از آن بگوییم منظور از یک روش رمزنگاری ایمن چیست.
این کلمات را به خاطر داشته باشید
پیش از هر چیز بهتر است با تعریف این واژگان آشنا شویم. دانستن این اصطلاحات به شما کمک می کند تا اولا اگر در متون تخصصی به آن ها برخوردید بدانید منظور از آنها دقیقا چیست و دوما اگر خواستید درباره ی این مباحث بیشتر بخوانید، بدانید دقیقا چه عباراتی را باید جستجو کنید.
رمزشناسی - Cryptology: دانش ساختن و شکستن کدهای مخفی.
رمزنگاری - Cryptography: دانش ایجاد کدهای مخفی.
تحلیل رمز - Cryptanalysis: دانش شکستن کدهای مخفی
همچنین در متون تخصصی ممکن است با واژهی Crypto برخورد کنید که می تواند به معنای هر کدام از سه واژه ی بالا به کار رفته باشد. با توجه به متن می توانید تشخیص دهید که کدام معنا مدنظر است.
یک سیستم رمزنگاری (Crypto System - Cipher) دادهی اصلی را به عنوان ورودی دریافت میکند و دادهی دیگری را به عنوان خروجی برمیگرداند که معادل رمزنگاری شدهی دادهی اصلی است. اصطلاحا به دادهی اصلی که به عنوان ورودی به سیستم رمزنگاری داده میشود متن ساده (Plain text) میگوییم و به خروجی سیستم رمزنگاری متن رمزی (Cipher text) گفته میشود. فرآیندی که طی آن متن ساده به متن رمزی تبدیل میشود رمزگذاری (Encryption) و برعکس آن یعنی تبدیل متن رمزی به متن ساده رمزگشایی (Decryption) نام دارد. همچنین در این عملیات از یک کلید (Key) نیز برای پیکربندی سیستم رمزنگاری استفاده میشود. شکل زیر درک بهتری از تعاریف بالا به دست میدهد.
شیوههای رمزنگاری به دو دستهی کلی متقارن و نامتقارن تقسیم میشوند. در رمزنگاری متقارن (Symmetric cipher) از یک کلید برای عملیات رمزگذاری و رمزگشایی استفاده میشود. زمانی که از این روش استفاده شود کلید باید به طور محرمانه نگهداری شود چرا که هر کسی که به کلید دسترسی داشته باشد میتواند متن رمزی را به متن ساده تبدیل کند. برخلاف این روش در رمزنگاری نامتقارن (Asymmetric) از دو کلید استفاده میشود. یک کلید برای رمزگذاری اطلاعات و کلید دیگر برای رمزگشایی. زمانی که این شیوهی رمزنگاری به کار گرفته شود معمولا کلیدی که برای رمزگشایی استفاده میشود در دسترس عموم قرار میگیرد و کلید دیگر محرمانه نگاه داشته میشود. به همین دلیل به این دو کلید، کلید عمومی (Public Key) و کلید شخصی (Private Key) گفته میشود. زمانی که کسی با استفاده از کلید عمومی موفق به رمزگشایی اطلاعات بشود میتواند اطمینان حاصل کند که اطلاعات توسط همان کسی که کلید شخصی را در اختیار دارد رمزگذاری شده است و توسط شخص دیگری دستکاری نشده است. به این شیوهی رمزنگاری، رمزگذاری با کلید عمومی (Public key encryption) نیز گفته میشود.
در یک سیستم رمزنگاری ایدهآل (Ideal Cipher) به دست آوردن متن ساده با استفاده از متن رمزی و بدون کلید غیر ممکن است.
امنیت یک سیستم رمزنگاری باید متکی بر کلید باشد. برای به دست آوردن امنیت بیشتر نباید لازم باشد تا جزئیات چگونگی کارکرد سیستم رمزنگاری مخفی باشد. در واقع همه باید بتوانند در مورد چگونگی عملکرد سیستم رمزنگاری اطلاعات دقیق داشته باشند و تنها چیزی که لازم است مخفی باشد کلید است. این موضوع به عنوان اصل کرکهوف شناخته میشود که در طراحی سیستمهای رمزنگاری باید به آن توجه شود.
رمزنگاری جانشینی - Substitution Cipher
حتما جعفر و مرتضی و جواد را از مقالهی اول به خاطر دارید.
مرتضی میخواهد یک پیام برای بانک جعفر ارسال کند و در این پیام اطلاعات تراکنشهایش نوشته شده است. جواد ابن امکان را دارد که پیامهای رد و بدل شده را شنود کند. به همین دلیل مرتضی نمیتواند اصل پیام را برای بانک جعفر ارسال کند. شما باید یک سیستم رمزنگاری به او ارائه کنید تا حتی اگر پیامی که رد و بدل میشود در اختیار جواد باشد باز هم اطلاعات حساب مرتضی فاش نشود.
برای این کار میتوانیم از یک سیستم رمزنگاری ساده به نام رمزنگاری جانشینی (Substitution Cipher) استفاده کنیم. در این سیستم رمزنگاری به جای هر کدام از حروف الفبا از حرف دیگری استفاده میکنیم. در سادهترین شکل آن به جای هر کدام از حروف الفبا، از حرف دیگری که به تعدادی مشخص بعد از آن حرف قرار دارد استفاده میکنیم. در این صورت فاصلهی حرف اصلی و حرفی که جایگزین آن حرف میشود به عنوان کلید رمزنگاری استفاده میشود.
شکل زیر چگونگی جانشینی حروف را نشان میدهد. در این مثال به جای هر کدام از حروف از حرفی که در ترتیب حروف الفبا ۳تا جلوتر قرار دارد استفاده شده است، در نتیجه در اینجا کلید رمزنگاری ۳ است.
این سیستم رمزنگاری زمانی که با کلید ۳ به کار گرفته شود با نام رمزنگاری سزار شناخته میشود. در روم باستان از این شیوه برای رمز کردن اطلاعات محرمانه استفاده میشده است.
با توجه به شکل بالا اگر n=3 به عنوان کلید رمزنگاری استفاده شود پیام: thisismorteza به صورت WKLVLVPRUWHCD رمزگذاری میشود. برای رمزگشایی آن نیز کافی است که برعکس همین عمل را انجام دهیم. یعنی به جای هر حرفی که در پیام رمز شده قرار دارد، ۳حرف قبل از آن در ترتیب حروف الفبا را قرار میدهیم. آیا با این کار میتوانیم اطمینان داشته باشیم که اگر جواد پیام رمزگذاری شده را دریافت کند نمیتواند به محتوای پیام اصلی پی ببرد؟
موضوع دیگری که باید به آن دقت شود اندازهی فضای کلید (Key Space) است. فضای کلید به معنای همهی مقادیری است که ممکن است به عنوان کلید رمزنگاری مورد استفاده قرار بگیرند. در روش رمزنگاری جانشینی ساده که آن را مورد بررسی قرار دادیم، در زبان انگلیسی با توجه به این که ۲۶ حرف در الفبا وجود دارد، کلید میتواند مقادیر 0 تا ۲۵ را داشته باشد. در نتیجه اندازهی فضای کلید در این روش برابر با ۲۶ است. به این ترتیب جواد در صورتی که بداند از رمزنگاری جانشینی ساده استفاده شده است، برای این که کلید رمزنگاری را به دست بیاورد باید همهی ۲۶ مقدار ممکن را امتحان کند تا کلید را به دست بیاورد. امتحان کردن همهی این ۲۶ کلید کار چندان دشواری نیست. پس نمیتوانیم بگوییم این مکانیزم رمزنگاری امنیت کافی را فراهم میکند.
به این نوع حمله که در آن تمام فضای کلید به دنبال مقدار واقعی کلید رمزنگاری جستجو میشود جستجوی جامع کلید (Exhaustive key search) گفته میشود.
اندازهی فضای کلید چقدر باید بزرگ باشد؟
دیدیم که رمزنگاری جانشینی ساده روش خوبی برای رمزگذاری اطلاعات نیست، چرا که تنها مقدار وجود دارد که میتوان به عنوان کلید از آنها استفاده کرد و به این ترتیب کسی که قصد شکستن این رمزگذاری را داشته باشد تنها کافیست این ۲۶ مقدار را عنوان کلید یک به یک آزمایش کند تا کلید درست را پیدا کند. اما اندازهی فضای کلید واقعا چقدر باید بزرگ باشد تا اطمینان داشته باشیم که به این روش نمیتوان رمزنگاری را مورد حمله قرار داد؟
فرض کنیم کامپیوتر جواد از توان محاسباتی کافی برخوردار است تا 2^40 کلید را در هر ثانیه امتحان کند. در این صورت اگر تعداد کلیدهای ممکن 2^56 عدد باشد، تنها 2^16 ثانیه یعنی چیزی در حدود ۱۸ ساعت طول میکشد تا جواد تمام کلیدهای ممکن را امتحان کند و کلید درست را بیابد. به همین ترتیب اگر اندازهی فضای کلید به 2^64 برسد بیش از ۶ ماه و با فضای کلیدی به اندازهی 2^128 بیش از ۹۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰۰ قرن زمان لازم است تا جواد تمام کلیدهای ممکن را با کامپیوتر خود امتحان کند.
پس لازم است تغییری در روش رمزنگاری جانشینی ساده ایجاد کنیم تا فضای کلید به اندازهی کافی بزرگ شود. برای این کار شیوهی جانشینی حروف را به این صورت تغییر میدهیم که هر حرفی میتواند جانشین هر حرف دیگر بشود. یعنی برای انتخاب این که چه حرفی را به جای حرف a استفاده کنیم 26 انتخاب میتوانیم داشته باشیم و پس از آن برای انتخاب جانشین حرف b نیز 25 انتخاب خواهیم داشت (واضح است که حرفی که جانشین حرف a شده است را نمیتوانیم دوباره انتخاب کنیم) و به این ترتیب برای انتخاب کلید 26! یعنی حدود 2^88 گزینه در اختیار داریم. این فضای کلید به اندازهی کافی بزرگ است تا جواد نتواند با امتحان کردن همهی کلیدها، کلید رمزنگاری را پیدا کند. شکل زیر نمونهای از یک کلید در این شیوهی رمزنگاری است.
تحلیل رمز - Cryptanalysis
گفتیم که تحلیل رمز یا Cryptanalysis دانش شکستن رمز است. حالا میخواهیم با یک مثال ساده ببینیم برای شکستن یک روش رمزنگاری چگونه است. فرض کنید جواد موفق شده است این پیام را شنود کند:
با توجه به این که کلید رمزنگاری میتواند هر جایگشتی از حروف انگلیسی باشد، امتحان کردن تمام کلیدهای ممکن برای جواد امکان پذیر نیست. پس او باید از روشی هوشمندانهتر استفاده کند تا بتواند به محتوای پیام دست یابد.
شکل زیر نمودار فراوانی حروف در زبان انگلیسی است.
و این شکل نیز، نمودار فراوانی حروف در پیامی که جواد شنود کرده است.
با نگاه کردن به این پیام و نمودارها میتوان حدس زد که به جای حرف e از حرف F در پیام رمز شده استفاده شده است. معمولا اولین کلمه را راحتتر از هر کلمهی دیگری میتوان حدس زد. با نگاه کردن به نمودارها و دانستن این که سومین حرف در واقع e بوده است که به جای آن F نوشته شده است میتوان حدس زد کلمهی اول در پیام اصلی the بوده است. با در نظر گرفتن این فرض، دو حرف دیگر از پیام نیز مشخص میشوند و میتوان از این موضوع برای پیدا کردن حروف بعدی استفاده کرد. کاری مانند حل کردن جدول. در نهایت جواد با ادامهی همین روش میتواند پیام را رمزگشایی کند و یا قسمت باقیمانده از کلید را به اندازهای کوچک بکند که این امکان را داشته باشد که با آزمون و خطا کلید درست را به دست بیاورد.
پس بزرگ بودن فضای کلید اگرچه برای این که یک شیوهی رمزنگاری ایمن داشته باشیم لازم است اما کافی نیست. چطور باید از ایمن بودن یک روش رمزنگاری اطمینان داشته باشیم؟
منظور از ایمن چیست؟
اگر بتوانیم یک اثبات ریاضی برای این موضوع داشته باشیم که رسیدن از متن رمزگذاری شده به متن ساده بدون داشتن کلید امکانپذیر نیست میتوانیم اطمینان داشته باشیم که شیوهی رمزنگاری مورد استفادهی ما ایمن است. اما چنین اثباتی معمولا وجود ندارد. برای هیچکدام از روشهای رمزنگاری پرکاربرد چنین اثباتی ارائه نشده است. در نبود یک اثبات ریاضی برای ایمن بودن سیستم رمزنگاری، اگر بهترین حملهی شناخته شده برای یک روش رمزنگاری به لحاظ محاسباتی امکانپذیر نباشد میتوانیم آن سیستم رمزنگاری را قابل اطمینان بدانیم.
در ادامهی این مجموعه مقالات هر کجا از واژهی ایمن (Secure) برای یک سیستم رمزنگاری استفاده میکنیم منظورمان این است که بهترین حملهی شناخته شده برای آن سیستم رمزنگاری تقریبا به اندازهی جستجوی جامع کلید (Exhaustive key search) زمان و توان محاسباتی میطلبد.
در مقالهی بعدی با One Time Pad آشنا خواهیم شد. One Time Pad تنها شیوهی رمزنگاری است که میتوان ایمن بودن آن را اثبات کرد.
همچنین اگر میخواهید بدانید که رمزنگاری چندمین مرحله از مراحل موجود در نقشه راه تبدیل شدن به یک مخصص امنیت (هکر قانونی) است، میتوانید به این لینک مراجعه کنید که یک نقشه راه کامل برای ورود به دنیای هک و امنیت محسوب می شود.
ثبت نظر