الگوریتمستان

یادداشت‌های یک معلم علاقه‌مند به نوشتن از آنچه آموخته و یاد می‌دهد
 

  

✤  واژه‌شناسی رمزنگاری

        #ریاضیات 

یکی از شاخه‌های مهم علم ریاضیات دوست‌داشتنی کاربرد آن در حوزه امنیت ارتباطات و اطلاعات است. استفاده از رمزنگاری در متون مهم و حساس قدمت زیادی دارد. در زمان سزار روم روشی برای رمزنگاری استفاده می‌شده که امروزه به روش رمزنگاری سزار مشهور است. در الگوریتم سزار به جای هر حرف از متن اصلی، سومین حرف بعد از این حرف در الفبای زبان را جایگزین می‌کردند. مثلا در زبان انگلیسی به جای A از D و به جای Y از B استفاده می‌شد.

تمامی روش‌های رمزنگاری برای انجام عملیات خود از کلید رمز استفاده می‌کنند. با تغییر این کلید، متن رمز شده تغییر پیدا می‌کند. پس می‌توان گفت کلید رمز نقش مهمی در سری باقی ماندن متن رمز شده ایفا می‌کند. مثلا کلید رمز روش سزار عدد ۳ بود. اگر قرار بذاریم که به جای سومین حرف، دهمین حرف بعدی را جایگزین حروف متن اصلی کنیم، کلید رمز ما عدد ۱۰ خواهد بود. هر کس که از این عدد خبر نداشته باشد نمی‌تواند متن رمز شده را به متن اصلی برگرداند. مگر اینکه بخواهد با روش آزمون و خطا همه حالت‌ها را (مثلا در زبان انگلیسی اعداد ۱ تا ۲۶) امتحان کند که در روش‌های رمزنگاری امروزی جوابگو نیست.

  

اصل اساسی کرکهف

  [برگرد بالا]

«سیستم رمزنگار باید هیچ نکته پنهان و محرمانه‌ای نداشته باشد. بلکه تنها چیزی که باید سری نگاه داشته شود، کلید رمز است. طراح سیستم رمزنگار نباید جزئیات سیستم خود را حتی از دشمنان مخفی نگاه دارد.»

  

با توجه به اصل اساسی کرکهف هیچ روش رمزنگاری معتبری وجود ندارد که روش رمزنگاری یا رمزگشایی آن از کسی مخفی باشد. بزرگترین رقابت هم زمانی پیش می‌آید که سعی می‌شود با در دست داشتن جزئیات روش رمزنگاری یا رمزگشایی راهی برای شکستن ساده‌تر متن رمز شده پیدا کرد.

  

امنیت در مقابل ایمنی

  [برگرد بالا]

واژه‌ Security (معادل واژه‌ «امنیت» در زبان فارسی) زمانی کاربرد دارد که محرمانه ماندن اطلاعات یا غیرقابل نفوذ بودن یک سامانه در مقابل حملات نفوذگران مطرح باشد. به عنوان مثال رمزنگاری یک روش تامین امنیت اطلاعات ذخیره شده در یک مرکز اطلاعاتی یا اطلاعات ارسالی بین دو کاربر شبکه است. اما منظور از Safety (معادل واژه «ایمنی» در زبان فارسی) رفتار درست سامانه در هر شرایطی از عملکرد (حتی در صورت بروز خطا) است.

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

  

رمز کردن در مقابل کد کردن

  [برگرد بالا]

هدف از کد کردن اطلاعات تغییر ساختار آن برای استفاده در کاربری‌های دیگر است. به عنوان مثال اطلاعات به کد بریل (Braille Code) تبدیل می‌شوند تا خواندن آن برای نابینایان مقدور گردد؛ یا اطلاعات به کد مورس (Morse Code) تبدیل می‌شوند تا بتوان آنها را از طریق تلگراف منتقل کرد. به همین ترتیب کدینگ‌های UTF7، UTF8، Unicode، ASCII و بسیاری دیگر، هر کدام یک روش کدینگ کاراکترهای نوشتاری هستند که سامانه‌های کامپیوتری امروزی استفاده می‌شوند. مثال دیگری از کد کردن‌ها نمایش اعداد ریاضی با کدینگ‌های مختلف Binary، Hex و Gray است.

بر اساس اصل اساسی کرکهف، در روش‌های رمزنگاری الگوریتم رمز کردن یا رمزگشایی نباید لزوما مخفی بماند. به عبارت دیگر، حتی اگر الگوریتم رمزنگاری لو برود، نباید اطلاعات رمز شده توسط این الگوریتم به راحتی فاش شوند. همین اصل تفاوت بنیادی کد کردن و رمز کردن را مشخص می‌کند. در کد کردن هر کاربر که به روش کد کردن آشنا باشد، می‌تواند اطلاعات را کد کرده (Encoding) یا از آن کد به کد مطلوب خود برگرداند (Decoding). در حالی که اطلاعات تبدیل شده توسط روش‌های رمزنگاری (علاوه بر الگوریتم) به کلید رمز (Key) نیز وابسته است و صرف آگاه بودن از الگوریتم امکان رمزگشایی (Decrypting) متنی که با کلید محرمانه‌ای رمز شده است (Encrypting) وجود ندارد.

با توجه به توضیحات داده شده، هدف از کد کردن (Coding) مخفی‌سازی اطلاعات نیست و روش تبدیل از هر کد به کد دیگر به صورت عمومی در اختیار عموم قرار دارد. در حالی که هدف از رمز کردن (Ciphering) مبهم کردن ظاهر اطلاعات و محرمانه نگه داشتن اصل آنها است. بنابراین نباید این دو مفهوم را با هم یکی دانست یا به جای هم استفاده کرد. اگرچه در بسیاری از زبان‌ها (از جمله انگلیسی و فارسی) گاهی این دو واژه به جای هم استفاده می‌شوند.

  

محرمانگی در مقابل اصالت

  [برگرد بالا]

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

اهم کاربرد الگوریتم‌های درهم‌سازی (Hashing) در همین راستا است و با استفاده از آنها می‌توان از اصالت پیام (Integrity) دریافتی مطمئن شد. گاهی نیز ممکن است محرمانگی مهم نبوده اما اصالت آن بسیار حائز اهمیت باشد. به عنوان مثال در صدور چک، مبلغ و سایر اطلاعات روی چک محرمانه نیست؛ اما این اطلاعات و به ویژه مبلغ چک نباید دستکاری شوند. در حالت کلی امکان جلوگیری از تغییر اطلاعات در کانال ارتباطی یا بازگرداندن اطلاعات تغییر یافته وجود نداشته و تنها می‌توان تغییر غیرمجاز را تشخیص داد.

  

محرمانگی در مقابل احراز هویت

  [برگرد بالا]

در کنار محرمانه ماندن اطلاعات و اطمینان از اصالت آن، همواره باید مطمئن بود فرستنده پیام همان کسی است که ادعا دارد. به ویژه آنکه در بسیاری از کاربردها محرمانگی اهمیتی نداشته و تنها هویت فرستنده مهم است. امضای دیجیتال (Digital Signature) راهکاری است برای تایید هویت طرف مقابل که روش‌های مختلف آن عموما بر اساس مفاهیم ریاضی و رمزنگاری کلید عمومی (نامتقارن) پایه‌گذاری شده‌اند.

  

کلید رمز در مقابل کلمه عبور

  [برگرد بالا]

گاوصندوقی را تصور کنید که باز شدن آن وابسته به اطلاع از کلمه عبور است. اگر به هر نحوی بتوان این گاوصندوق را به صورت غیرمجاز باز کرد، محتوای آن بدون آگاهی از کلمه عبور در اختیار مهاجم قرار می‌گیرد. در واقع کلمه عبور (یا Password) نقش کنترل‌کننده‌ای را دارد که شاید بتوان آن را دور زد یا از مسیری وارد شد که نیاز به کنترل نباشد. زمانی که اطلاعات رمز می‌شوند، متن اصلی در دسترس نیست و امکان استخراج متن اصلی از متن رمز شده بدون اطلاع از کلید رمز وجود ندارد. به عبارت دیگر، کلید رمز (که عموما با عبارت Key یاد می‌شود) بر خلاف کلمه عبور یک کنترل‌کننده نیست و بدون اطلاع از آن (اگر الگوریتم رمزنگاری به قدر کافی قدرتمند بوده و کلید رمز نیز به درستی انتخاب شده باشد) به هیچ عنوان نمی‌توان به متن اصلی دست یافت.

  

رمزنگاری کلید متقارن در مقابل رمزنگاری کلید نامتفارن

  [برگرد بالا]

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

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

  

الگوریتم رمزنگاری در مقابل پروتکل رمزنگاری

  [برگرد بالا]

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

  

پروتکل‌های مرسوم در مقابل پروتکل‌های استاندارد

  [برگرد بالا]

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

مسعود اقدسی فام

مسعود اقدسی فام هستم.

دانش‌آموخته علوم کامپیوتر و فعال حوزه‌های برنامه‌نویسی پایتون، علم داده و یادگیری ماشین

algs.ir/spqtvly     اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram
نوشته‌ها از این دست
آخرین نوشته‌ها
نوشته‌های پرمخاطب
  • 1
  • 2
  • 3
  • 4
  • 5

نام: *  

پست الکترونیک (محرمانه):

متن پیام: *  

01 02 06 07 08 09 10 11 12 13 14

• میثم لطفی
۶ مرداد ۱۳۹۴، ساعت ۱۸:۲۵

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