یک عدد جونیور علاقه مند به حوزه امنیت :)
رمزنگاری مقدماتی : مرور و جمع بندی
در این مقاله که آخرین قسمت از سری رمزنگاری مقدماتی به زبان ساده هست میخوایم بریم سراغ یه مثال و عملی باهم هرچیزی که گفتیم رو ببینیم و بررسی کنیم چطوری میتونیم به سه هدفی که داشتیم یعنی Integrity یا صحت پیام ، Authentication یا احراز هویت و Confidentiality یا محرمانگی برسیم
در این سناریو ما همه چیزو بهم میچسبونیم ، و این سازوکار هر الگریتم امنیتی ای هست که تاحالا یادگرفتیم ، مثل SSL-TLS - IPSEC -SSH و هر پروتوکولی که در آینده بیاد
ما 5 مرحله داریم :
1 - Protocol Negotiation
2 - Authentication
3 - Key Exchange
4 - Session Key Derivation
5 - Secure Communication
فاز اول :
در فاز 1 هردو باهم توافق میکنن که از چه پروتوکولی هایی استفاده کنن ، لازم به ذکره که هم الکس و هم رز همه این مراحلو باهم طی میکنن :
در اولین قدم ، برای دستیابی به Confidentiality میرن سراغ استفاده از پروتوکول های رمزنگاری متقارن مثل :3DES-AES-CHACHA20 و ... ، و برای Integrity میرن سراغ HMAC و الگریتم های هشینگ ، مثل MD5 - SHA1 و .. ؛ مورد بعدی Secret key هست که جفتی باید حتما داشته باشن ، پس میرن سراغ یه الگریتم تبادل کلید انتخاب کنن، همونطور که گفتیم یا دفی هلمن یا RSA یا ورژن منحنی بیضوی دفی هلمن یا از قبل اصلا باهم ساخته باشنش (Pre-shared -OOB) ؛ و باید هویت همدیگه رو هم اعتبار سنجی کنن پس برای این کارم باید سر پروتوکولش توافق کنن ، مثل RSA یا Digital Certificate یا اصلا Pre-shared Keys و...
همچنین تو این مرحله یه عدد رندوم هم میسازن و بهم دیگه میدن ، هدفش رو بعدا بهتون میگم و یادتون باشه ولی بدونید که این برای ساخت session استفاده میشه که هر session رو منحصر به فرد بکنه ، و جلوگیری بکنه از شنود session (جلوگیری از Session Replay Attack میکنه ، یعنی اینکه اگر مقدار session رو مهاجم بدست اورد نتونه Replay اش بکنه ، یعنی نیاد ازش استفاده کنه و خودشو به عنوان یکی دیگه جا بزنه)
نکته : این که میگیم توافق میکنن یعنی اینکه مثلا الکس میاد میگه آقا من از MD5 و SHA1 و SHA2 ساپورت میکنم ، رز میگه من فقط از MD5 ساپورت میکنم ، پس جفتی روی MD5 توافق میکنن ، یا اینکه رز میگه من MD5 و SHA1 ساپورت میکنم و جفتی روی SHA1 توافق میکنن که بالاترین امنیت رو داره (همیشه یادتون باشه که تفاهم اصل قضیس ، اگر یدونه الگریتم رو فقط یکی از طرفین ساپورت بکنه ، اون الگریتم برای دو طرف انتخاب میشه ، اما اگر تعداد گزینه ها زیاد باشه ، امن ترینشون انتخاب میشه)
پس تا اینجا سر 4 تا چیز باهم توافق کردن و هر کدوم یه عدد رندوم ساختن و به هم دیگه دادن
تو اینجا ما هندشیک سه تا پروتوکول رو میبینیم ، تو SSH ما این فاز رو توی چند پکت ابتدایی داریم ، توی SSL-TLSتوی دوتا پیام اول یعنی client hello و server hello داریمش ، توی IPSEC ما توی پکت های اول و دوم داریمش
فاز دوم :
وقتی این فاز تموم شد میریم سراغ فاز دوم که مهم ترین بخشه که مطمئن شیم کسی که باهاش صحبت میکنیم همونیه که باید ، ، این فاز هم چیز خاصی نداره و ما یه متدی رو داریم ، یا از قبل انتخاب کردیم که اگر صحبت کنیم و یه کد خاصی رو بدیم به هم یعنی ما همونیم ، یا مثلا اسم رمز خاصی بینمونه (گربه سیاه مثلا) ؛ یا بهم دیگه Certificate بدیم ، یا از طریق کلید عمومی هم دیگه که RSA Public Key هست بفهمیم واقعا طرف خودشه !
فاز سوم :
میریم فاز سوم و بریم سراغ تبادل کلید : میتونیم از الگریتم دفی هلمن استفاده کنیم (یا ورژن منحنی بیضویش) یا RSA استفاده کنیم
در تمامی این روش ها هدف ما تفاهم سر SEED هست و انتقال اون به طرف مقابل ، یعنی یا با دفی هلمن جفتی به یه SEED میرسیم ، یا با RSA یکی از طرفین یه SEED میسازه و با کلید خصوصیش رمز میکنه و میده به اون یکی که با کلید عمومی فرستنده بازش کنه
فاز چهارم :
حالا میریم فاز 4 و ساخت Session Keys ؛ اینجا یکم مطالب سنگین میشه ، پس با دقت بخونید :
ما 5 تا چیزو باهم ترکیب میکنیم برای رسیدن به کلید ، اولین چیز دوتا عدد رندومیه که تو فاز اول ردوبدل شد ، این دو عدد برای هر سشن متفاوته و باعث تفاوت کلید ها و جلوگیری از شنود میشه (چون برای سشن جدید باید عدد رندوم جدید ایجاد بشه)؛ بعد ما یه مقدار از مرحله Authentication استفاده میکنیم ، چون مطمئن نیستیم که این عدد رندوم حتما از سمت اونیه که میخوایم یا نه (چون قبل فاز احراز هویت ردوبدل شده) پس میاییم و یه چیزی از فاز Authentication هم قاطی میکنیم که من توی عکس با حرف A نشونش دادم ، بعدیش مقدار SEED هست که داریمش، و در نهایت یه # گذاشتم که به معنی یه دیتا رندوم هست ، چرا حالا؟ از کجا میاد؟ ممکنه یه عدد ساده باشه یا حرف ساده .. برای این میاد که بتونیم چندین کلید بسازیم ، چون مقادیر RR و A و S ثابته ، ما اگر بخوایم چند تا کلید داشته باشیم باید بریم سراغ یه چیزی که الگریتم هش مون رو عوض کنه و اون هرچیزی میتونه باشه (چه کوچیک چه بزرگ فرقی نداره) ، پس اینم مد نظر داشته باشید
حالا میریم سراغ کلید ها ، ما 4 تا کلید میسازیم (برای اکثر الگریتم ها اینطوریه) : دوتا کلید متقارن برای الکس و رز و دوتا کلید مخصوص MAC برای الکس و رز ، این 4 تا کلید تضمین میکنن که دیتایی که از سمت الکس به رز ارسال میشه ، جدا و منحصر به فرد رمز میشه نسبت به دیتایی که از سمت رز به الکس ارسال میشه
خوبیش اینه که اگر الکس و رز بخوان یه متن یا فایل یکسان به هم دیگه بفرستن ، وقتی شنود میشه متفاوت میشه و اگر کلید های یکی از این افراد لو بره ، فقط ارتباط یک طرف لو رفته و هردو طرف به خطر نمی افتن
برای اینکه قشنگ تر درک کنید، توی عکس در مرحله 4 من 4 تا کلید کشیدم ، دو جفت کلید ، یه جفت کلید قرمز و ابین و یه جفت زرد و سبز ، اینطوری فرض کنید که وقتی کلید ساختن ، الکس امده یه کلید متقارن برای رمزنگاریش ساخته و اون کلید قرمزه که دست خودشه و همونو رز هم داره ، رز هم یه کلید متقارن ساخته که ابیه و هم خودش داره هم الکس ، به همین ترتبیت الکس هم یه کلید واسه MAC خودش داره که زرده و دادتش به رز ، رز هم یه کلید برای MAC خودش داره که سبزه و دادتش به الکس
فاز پنجم :
و در نهایت در فاز 5 هم با خوشی و خوشحالی شروع میکنن به برقراری ارتباط ، با کلید های متقارن Confidentiality رو بدست میارن ، با کلید های MAC هم Integrity و هم Authentication رو بدست میارن (چرا ؟ چون تو مرحله 2 بدست اوردن و تو مرحله 4 قاطی فرایند ساخت کلیدشون کردن)
و میرن حال میکنن :)
امید وارم این سری مقالات به دردتون خورده باشه ، منتظر نظرات ریز و درشت شما هستم ، هرجاش که احساس کردید بهتره تغییر کنه بهم بگید
هرجاشم نفهمیدید یا احساس کردید کامل جا نیفتاده بهم بگید، حتما جواب میدم
رمزنگاری چیزیه که باید چند بار بخونید و درکش کنید ، اصلا حفظی و آسون نیست ، اونطوریم سخت نیست ولی خب تلاش نیازه
منتظر سری پیشرفته باشید و با حمایت و بازنشر از این سری ، من مشتاق تر میشم برای نوشتن سری پیشرفته XD
به پـــــــایـــــــــان آمد این دفتر، حکـــــــــایت همچنان باقـــــــیست .....
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی : بررسی حملات رمزنگاری
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی : ریاضیات و شرح کارکرد الگریتم های نامتقارن
مطلبی دیگر از این انتشارات
رمزنگاری مقدماتی :رمزنگاری منحنی بیضوی یا Elliptic-Curve