چهارشنبه 5 اردیبهشت 1397   
 
رمزنگاري

 

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

رمزنگاری هر سه محور اصلی در مباحث مربوط به امنیت را در بر می‌گیرد که عبارتند از: محرمانگی، تمامیت، تأیید هویت.
 
Ÿ محرمانگی: رمزنگاری یک شیوه بسیار خوب برای حفظ اطلاعات به صورت محرمانه است. حتی اگر رایانه یا فایل‌های حاوی اطلاعات رمزنگاری شده به سرقت روند، پی بردن به محتویات فایل‌های رمزنگاری شده بسیار مشکل خواهد بود.
 
Ÿ تمامیت: رمزنگاری همچنین روشی بسیار خوب برای اطمینان از صحت یا تمامیت اطلاعات است. برخی از الگوریتم‌های رمزنگاری علاوه بر حفظ محرمانگی اطلاعات، از آنها در برابر دستکاری اطلاعات نیز محافظت به عمل می‌آورند. این قبیل پردازش‌ها قدرت تشخیص تغییرات جزئی بدخواهانه یا غیرعمدی در اطلاعات را دارا هستند. در حالی که بسیاری از کاربران نظامی، اطلاعاتی یا تجاری بسیار به محرمانه ماندن اطلاعات اهمیت می‌دهند، کاربران مؤسسات مالی برای صحت و دقت اطلاعات اهمیت بسیاری قائل هستند. برای آنها بسیار مهم است که یک ممیز جابجا یا یک صفر کم یا زیاد نشود. همچنین آزمون تمامیت به کاربران شبکه‌ها اطمینان می‌دهد که ارتباطات آنها تحت تأثیر ویروس‌ها یا دیگر نفوذها قرار نگرفته است.
 
Ÿ تأیید هویت: رمزنگاری یک روش موفق در فهمیدن موثق بودن اطلاعات است. در واقع با رمزنگاری می‌توان مطمئن شد که اطلاعات از همان‌جایی که ادعا می‌کنند، می‌آیند. برخی تکنیک‌های خاص رمزنگاری به کاربر امکان می‌دهد تا مشخص کند دقیقاً چه کسی یک بسته اطلاعاتی را ارسال کرده است. این قضیه در مراودات حقوقی یا مالی اهمیت ویژه‌ای پیدا می‌کند. یکی از تکنیک‌های رایج تأیید هویت، امضای دیجیتال است. امضای دیجیتالی برای هر تراکنش یکتا بوده و جعل آن بسیار سخت می‌باشد.
 

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

 جولیوس سزار در مصر از یک سیستم رمزنگاری استفاده می‌کرده که هنوز هم به نام او یعنی Caesar's Cipher شناخته می‌شود. در این روش به این صورت عمل می‌شده است که حروف الفبا را به صورت دورانی 3 تا شیفت می‌دادند. برای مثال الف به ت تبدیل می‌شود ( اگر به آخر الفبا رسیدیم دوباره از اولین حرف الفبا شروع می‌کنیم) مثلاً فرض کنید بخواهیم جمله‌ی اول را رمز کنیم:

  pick up supplies at location x

که به این صورت در می‌آید: 

slfn xt vxttolhv dw orfdwlrq a

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

یا در طول جنگ جهانی دوم آمریکایی‌ها برای آنکه از شکسته شدن رمزهایشان توسط ژاپنی‌ها جلوگیری کنند مجبور به استفاده از Navajo شدند. Navajo یک زبان محلی مربوط به بومیان هندی که در شمال New Mexico سکونت داشتند، می‌باشد و تعداد زیادی از افرادی که به این زبان صحبت می‌کردند و در جنگ به آمریکایی‌ها کمک کردند، نشان‌های عالی نظامی گرفتند.

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

 ممکن است بپرسید چه ریاضیاتی در کار است. ریاضی وقتی وارد ماجرا می‌شود که به هر حرف یک عدد نسبت دهیم. در این صورت فرآیند کد کردن مثل اضافه کردن‌ عدد 3 به عدد اولیه خواهد بود.
 
 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

 مثلاً برای به رمز درآوردن 'A' : داریم  0+ 3 = 3 برای اینکه در مورد حرف‌های نزدیک به پایان الفبا دچار مشکل نشویم، بهتر است به جای جمع معمولی از جمع به پیمانه 26 استفاده کنیم، یعنی به جای هر عدد از باقیمانده تقسیم آن عدد بر 26 استفاده کنیم.

مثلا برای 'X' داریم: (به پیمانه 26) 23 + 3 = 26 = 0
مثلا برای 'Y' داریم: (به پیمانه 26) 24 + 3 = 27 = 1
  حالا به سراغ یک روش پیچیده‌تر می‌رویم. فرض کنید به ازای هر حرف الفبا یک علامت جایگزین کنیم، مثلا '*' به جای 'A' و '+' به جای 'B' مثل رمزی که ماری ملکه اسکاتلند برای مکاتباتش بر علیه الیزابت اول ملکه انگلیس به کار می‌گرفت. تا مدت‌ها مردم فکر می‌کردند شکستن این رمز ناممکن است تا اینکه سرو کله آمار ریاضی پیدا شد.
نموداری که می بینید فراوانی حروف الفبا را در زبان انگلیسی نشان می‌دهد.

 این اطلاعات از شمارش حروف مختلف در حجم زیادی از نوشته‌ها مثل کتاب‌ها و روزنامه‌ها بدست آمده است. این نمودار مثلاً نشان می‌دهد بطور میانگین 13.5 درصد از حروف بکار رفته در متن‌های انگلیسی E هستند، که فراوان‌ترین حرف الفبا است. بنابراین وقتی رمزی از نوع بالا داریم، احتمالاً علامتی که بیش از همه تکرار می‌شود علامت متناظر E است و فراوانترین علامت بعد از آن متناظر 'T' است. سرنخ‌های دیگری هم وجود دارد، مثلاً تنها دو کلمه یک حرفی در انگلیسی وجود دارد 'I' و 'A' و همچنین 'AND' و 'THE' کلمات خیلی معمولی هستند. با کمک این سرنخ‌ها و کمی آزمایش و خطا می‌توان اینگونه رمزها را شکست. همین روش باعث شد که ماری سرش را از دست بدهد.
لازم به ذکر است که رمزنگاری یک مبحث بسیار پیچیده است و در اینجا ما قصد توضیح پایه‌های ریاضی الگوریتم‌های رمزنگاری یا باز کردن تمام جزئیات را نداریم و تنها به معرفی کلیات این مقوله خواهیم پرداخت. برای دریافت اطلاعات و جزئیات بیشتر می‌توانید به کتاب‌هایی که در این زمینه نگارش شده اند مراجعه فرمایید.

 

  در اوایل رمزنگاری تنها در حوزه‌های نظامی، آژانس‌های امنیتی و دیپلماتیک مورد استفاده قرار می‌گرفت، اما با پیشرفت‌های صورت گرفته در زمینه دیجیتال و انتقال الکترونیک اطلاعات، تقاضا جهت رمزنگاری اطلاعات به سرعت افزایش یافت؛ به طوری که اکنون این دانش به زندگی عموم افراد جامعه راه یافته است و هر شهروند در کشورهای‌ پیشرفته به طور روزمره با شاخه‌هایی از آن برخورد می‌نماید، همانند کاربردهای آن در زمینه‌های:
 
1- رمزکردن و تصدیق هویت (Authentication) در کارت‌های ملی و بانکی، تلفن‌های (Wireless) ، تجارت الکترونیک (E-Commerce)، تلویزیون‌های اعتباری (Pay-TV) و ...
2- کنترل دسترسی در سیستم‌های قفل اتومبیل‌ها و کنترل‌های از راه دور درب‌ها و (Lifts ski)
3- پرداخت‌های الکترونیکی، رأی دادن الکترونیکی و ...
4- امنیت اطلاعات در فضای اینترنت و ...
در یک نگاه کلی، سیستم‌های رمزنگاری به دو دسته سیستم­های رمزی متقارن و سیستم­های رمزی کلید عمومی (نامتقارن) تقسیم می‌شوند.
تکنیک‌ها یا قوانینی که برای رمزنگاری مورد استفاده قرار می‌گیرند، به عنوان الگوریتم‌های رمزنگاری شناخته می‌شوند، که میزان سادگی یا پیچیدگی یک فرآیند رمزنگاری را تعیین می‌کنند. بسیاری از روش‌های رمزنگاری از فرمول‌های ساده ریاضی استفاده می‌کنند که چندین بار و با ترکیب‌های متفاوت بکار گرفته می‌شوند. بسیاری از آنها نیز از یک مقدار محرمانه به نام کلید برای رمزنگاری و رمزگشایی استفاده می‌کنند. کلید نوعی کلمه عبور است که تنها فرستنده و گیرنده متن از آن آگاهی دارند. الگوریتم رمزنگاری با استفاده از قوانین ریاضی کلید مزبور را که معمولاً رشته‌ای طولانی از اعداد است، بر اطلاعاتی که باید رمزنگاری یا رمزگشایی شوند، اعمال می‌کند.
  

 

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

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

روند تولید کلید‌ها برای رمزنگاری است. یک کلید رمزنگاری را انجام می‌دهد و یک کلید رمزگشایی می‌کند. سیستم‌های رمزنگاری جدید، سیستم رمزنگاری متقارن مانند الگوریتم‌های DES و AES و سیستم رمزنگاری با کلید عمومی مانند الگوریتم RSA را شامل می‌شوند. الگوریتم‌های متقارن از یک کلید به اشتراک گذاشته شده استفاده می‌کنند و الگوریتم‌های کلید عمومی از کلید عمومی و کلید خصوصی بهره می‌گیرند که کلید عمومی در دسترس هرکس است و وقتی فرستنده داده‌ها را با کلید عمومی رمزگذاری می‌کند، گیرنده تنها با داشتن کلید خصوصی می‌تواند داده‌ها را رمزگشایی کند.

 

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

پروتکل رمزنگاری معمولاً در ابتدایی‌ترین حالت موارد زیر را شامل می‌شوند: بررسی و تأیید صحت کلید؛ تعیین اعتبار موجود بودن کلید در سیستم؛ در مورد روش متقارن اعتبار لازم را به یک پیام می‌دهد؛ حفظ امنیت داده در سطح برنامه؛ روش‌هایی که اجازه نمی‌دهد کاربر امضای خود را تکذیب کند (ویژگی غیرقابل انکار بودن). به عنوان مثال؛ پروتکل امنیت لایه‌های حمل اطلاعات یک پروتکل رمزنگاری است که برای حفظ امنیت اتصالات در سطح وب را تأمین می‌کند. طرز کار این پروتکل بر مبنای سیستم X509است که یک مرحله تولید کلید و با استفاده از کلید عمومی و روش رمزنگاری با کلید عمومی داده‌ها را در سطح برنامه‌ها حمل می‌کند. ولی این پروتکل نمی‌تواند ویژگی غیرقابل انکار بودن رمزنگاری را تأمین کند. انواع دیگری از پروتکل‌های رمزنگاری وجود دارند که برخی از آن‌ها خود شامل چندین پروتکل مختلف دیگر می‌شوند. مروزه تنوع گسترده‌ای در زمینه پروتکل‌ها به وجود آمده است و شرکت‌های مختلف برای رفع معایب امضای دیجیتال و ایجاد امنیت هرچه بیشتر در این ساختار تلاش‌های چشمگیری انجام داده‌اند.