رمزنگاری مقدماتی : مرور و جمع بندی

رمزنگاری مقدماتی به زبان ساده : مرور و جمع بندی
رمزنگاری مقدماتی به زبان ساده : مرور و جمع بندی


در این مقاله که آخرین قسمت از سری رمزنگاری مقدماتی به زبان ساده هست میخوایم بریم سراغ یه مثال و عملی باهم هرچیزی که گفتیم رو ببینیم و بررسی کنیم چطوری میتونیم به سه هدفی که داشتیم یعنی Integrity یا صحت پیام ، Authentication یا احراز هویت و Confidentiality یا محرمانگی برسیم

در این سناریو ما همه چیزو بهم میچسبونیم ، و این سازوکار هر الگریتم امنیتی ای هست که تاحالا یادگرفتیم ، مثل SSL-TLS - IPSEC -SSH و هر پروتوکولی که در آینده بیاد

ما 5 مرحله داریم :

1 - Protocol Negotiation

2 - Authentication

3 - Key Exchange

4 - Session Key Derivation

5 - Secure Communication

فاز اول :

در فاز 1 هردو باهم توافق میکنن که از چه پروتوکولی هایی استفاده کنن ، لازم به ذکره که هم الکس و هم رز همه این مراحلو باهم طی میکنن :

13-1
13-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 تا چیز باهم توافق کردن و هر کدوم یه عدد رندوم ساختن و به هم دیگه دادن

13-2
13-2

تو اینجا ما هندشیک سه تا پروتوکول رو میبینیم ، تو 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

به پـــــــایـــــــــان آمد این دفتر، حکـــــــــایت همچنان باقـــــــیست .....