چطور به این سطح از امنیت اطلاعات رسیدیم؟

بعد از کلی تلاش و تحمل مشقت و سختی تونستم الگوریتم های رمزنگاری متقارن و به خصوص AES و DES رو یاد بگیرم و دقیقا وقتی مرحله‌ی یادگیریم تموم شد متوجه شدم که عمرا از این دوتا توی امتحان سوال بده:| امتحان امنیت شبکه یا همون رایانش امن.در نتیجه از اونجایی که یادگیری این دوتا واسه من آزاردهنده و سخت بود، تصمیم گرفتم که اینجا بنویسم تا شاید واسه یه نفر دیگه این روند آسون تر بشه. (شایدم سخت تر بشه نمیدونم).رمزنگاری ها کلا دو مدل هستن، متقارن و نامتقارن.متقارن به این صورت هست که کلید باید محرمانه بمونه و فقط فرستند و گیرنده این کلید رو دارن. رمزگذاری متقارن، به کلید کوچیکتری نیاز داره و در نتیجه سریعتر از نامتقارن انجام میشه.دو الگوریتم معروف رمزنگاری متقارن، AES و DES هستن که در ادامه کارکرد DES رو توضیح میدم. الگوریتم AES پیشرفته تر از DES هست و الان توی حوزه ی وب استفاده میشه و ارتباطات پروتکل هایی مثل HTTP رو رمزنگاری میکنه.رمزنگاری DES بر پایه ی فیستل (بعضی موارد مشاهده شده فایستل!)خب اول باید بگیم که فیستل که بود و چه کرد. فیستل اومد روی رمزنگاری SPN (جایگشتی، جانشینی) کار کرد و مدل زیر رو ارائه داد:هر قطعه ورودي رو به دو قسمت مساوی تقسیم میکنه؛ طی چند مرحله یا اصطلاحا دور پردازش میکنه.به صورت زیر:نیمه ی سمت راست رو توی سمت چپ قطعه ی بعدی قرار میده. بعد نیمه ی راست و کلید رو میفرسته به تابع دور و نتیجه رو با نیمه ی چپ متن xor میکنه و نتیجه ی نهایی رو میریزه توی قسمت سمت راست قطعه‌ی بعدی.اگه متوجه شدید که واقعا من نمیدونم چی بگم :| حتما عکس پایین رو ببینید و همزمان دوباره توضیحات رو بخونید تا متوجه شید.خب DES = Data Encryption standard دقیقا همین مدلی کار میکنه.با این مشخصات:طول کلید 56 بیتطول قطعه هاي ورودي و خروجی : 64 بیتتعداد دورها: 16 دوراین الگوریتم در کل مثل شکل زیر هستش و جایگشت اولیه و نهایی هم معکوس همدیگه هستن یعنی همدیگه رو خنثی میکنن. پس نگرانشون نباشید.چیزی که ما باید یاد بگیریم این هستش که 1- تابع دور که همون F هستش، چیکار میکنه. 2- کلید از کجا میاد.تابع دور Fهمونطور که بالاتر گفتم ورودی و خروجی 64 هرمرحله بیتی هستش. این قطعه رو به دو قسمت مساوی تقسیم میکنیم بعد 32 بیت سمت راست رو مستقیما میفرستیم به 32 بیت سمت چپ قطعه ی بعدی. دوباره همین 32 بیت سمت راست رو برمیداریم به همراه کلید (بعدا میگم کلید رو ، فقط بدونید 48 بیته) میفرستیم به تابع دور. پس رسیدیم به تابع دور و میخوایم بدونیم چیکار میکنه. ساختار این تابع به شکل زیر هستش:تابع دور 32 بیت ورودی (همون سمت راست) و 48 بیت زیر کلید رو دریافت میکنه. برای اینکه بتونیم این دوتا رو با هم xor کنیم، باید تعداد بیت‌هاشون برابر باشه. در نتیجه 32 بیت قطعه ی ورودی رو میفرستیم به E Box. توی این قسمت 32 بیت دریافت شده رو تبدیل میکنه به 48 بیت.(32 بیت رو که از قبل داشت، چند بیت رو هم تکرار میکنه طبق روش خودش)پس الان 48 بیت زیر کلید و 48 بیت ورودی داریم. این دوتا قطعه رو با هم xor میکنیم و در نتیجه 48 بیت خواهیم داشت. حالا دوباره باید برگردیم به همون 32 بیت خودمون. پس این 48 بیت رو میفرستیم به S-Box . این بخش 48 بیت رو به 8 تا قطعه ی 6 بیتی تبدیل میکنه. S-Box مراحل زیر رو انجام میده:1- دو بیت اول و آخر هر قطعه رو به عنوان شماره ی سطر انتخاب میکنه مثلا سطر x.2- 4 بیت وسطی رو به عنوان شماره ستون برمیداره مثلا ستون y.3- مقدار موجود توی سطر x و y در جدول جانشینی، که 4 بیت هستش رو برمیداره و به جای قطعه ی 6 بیتی قرار میده.4- اینکار رو برای 7 قطعه ی 6 بیتی دیگه هم تکرار میکنه تا در نتیجه 8 قطعه ی 4 بیتی داشته باشیم که میشه همون 32 بیت.در ادامه 32 بیت رو میفرسته به p_Box . این بخش میاد با استفاده از الگوریتم و کلیدی که داره، 32 بیت رو جابجا میکنه و جایگشت مختلفی ایجاد میکنه.خروجی تابع دور 32 بیت هست که باید با 32 بیت نیمه ی سمت چپ قطعه، xor بشه و نتیجه ی نهایی توی نیمه ی سمت راست قطعه ی بعدی قرار میگیره.قضیه ی کلید چیه؟در هر مرحله کلیدی که برای تابع دور استفاده میشه، 48 بیت هستش. اما کلید اصلی 64 بیته. زمان بند کلید میاد از این 64 بیت، 56 بیت رو برمیداره و از این 56 بیت هر سری 48 بیت رو انتخاب میکنه و میفرسته به تابع دور.ساختار زمانبند کلید :بالاخره تموم شد!احتمالا یه خرده الان گیج باشید اما توصیه میکنم دوباره متن رو بخونید و هر مرحله رو همون لحظه با صدای بلند توضیح بدید. بعد از چند بار به نظر میاد که دیگه اونقدرا هم سخت و طاقت فرسا نیست.اگه سوالی داشتید بپرسید، اگه بلد بودم که جواب میدم بلد نبودم هم یه کاریش میکنیم بالاخره (خدا نگیره گوگل رو)نظراتتون رو هم بنویسید، استقبال می‌شود :)