سلام دوستان
در ماه های اخیر ، صحبت امنیت Email های کاربران و اطلاعات شخصی کمی داغ شده بود و خیلی از کاربران اینترنت بابت امنیت اطلاعات شخصیشون ، اظهار نگرانی کردن.
صحبت های زیادی در مورد توانایی مسئولین مخابرات از خوندن Email های شخصی کاربران شد و نگرانی های زیادی بوجود اومد.
به هر حال تصمیم گرفتم این تاپیک رو ایجاد کنم تا یه مقدار بصورت تخصصی و علمی این موضوع رو بررسی کنیم و ببینیم چطور ممکنه امنیت سرور های قدرتمندی نظیر Gmail و . . . به خطر بیفته و اون سرویس دهنده ها برای محافظت از اطلاعات کاربران چه تدابیری اتخاذ کردن.
قبل از شروع ، بهتره یه مقدار به زبون ساده در مورد شبکه و چگونگی ارتباط کامپیوتر شما به سرور های دیگه توضیح داده بشه.
وقتی شما درخواست یا اطلاعاتی رو از کامپیوترتون به یه کامپیوتر دیگه میفرستین ، این اطلاعات از کامپیوتر های مختلفی عبور میکنه و اون کامپیوتر ها قادر به خوندن اطلاعات شما هستن.
شیوه ی بسیار ساده ی انتقال درخواست و اطلاعات کامپیوتر شما به کامیپوتر Server ، مسیری مشابه مسیر زیر رو طی میکنه.
توو عکس بالا به عنوان مثال ، شما در خواستی رو برای سرور ارسال میکنید و سرور هم اطلاعات مورد نیاز شما رو براتون ارسال میکنه.
همونطوری که مشخصه ، این درخواست از کامپیوترهای مختلفی میگذره.
درخواست شما اول از ISP میگذره ، بعد از مرکز مخابراتی و بعد هم به سرور میرسه.
اطلاعات مورد نیاز شما هم همین مسیر رو طی میکنه تا به دست شما برسه.
بعنوان یه نمونه ی عملی میتونیم از دستور Tracert موجود در ویندوز استفاده کنیم.
این دستور ، تعداد مراحل و واسطه هایی که بین کامپیوتر شما و سرور مورد نظر شما وجوود داره رو نشونتون میده.
مثلا من میخوام بدونم بین کامپیوتر من و سایت Yahoo چه تعداد از این کامپیوتر های واسطه وجوود داره.
در شکل بالا مشخصه که اگه من بخوام وارد وب سایت **** بشم ، باید از چندین واسطه عبور کنم تا درخواستم به وب سایت **** برسه.
IP Address های کامپیوتر های واسطه نشون میده که :
طی چندین مرحله این درخواست من از سرور های ISP نظیر DNS Server های ISP میگذره. ( rasana.net )
طی دو مرحله از سازمان تنظیم مقررات میگذره ( 78.38.255.57 و 78.38.245.85 ) . ( همونجایی که میترسیم ازش
)
بعد از اون وارد خارج از کشور میشیم و از سرور های خارج از کشور میگذره تا به سایت **** برسه.
خب چیزی که واضحه اینه که هر کامپیوتری بین ما و سرور **** باشه میتونه اطلاعات و درخواست هایی که ما به اون سرور ارسال میکنیم رو ببینه.
پس باید کاری کرد که این اتفاق نیفته.
کاری که میشه انجام داد اینه که ما این پیام ها رو بصورتی ارسال کنیم که برای دیگران قابل خوندن نباشه و فقط ، طرف مقابلمون بتونه این اطلاعات رو بخونه. ینی اطلاعاتمون رو رمز گذاری میکنیم.
برای اینکه نکات رمز گذاری و نوشته های بالا رو بهتر متوجه بشین ، توجه شما رو به سناریوی مسخره و خیالی زیر جلب میکنم!! :
میگن در زمان های قدیم در یکی از محله های تهران ، آقایی به اسم اصغر آقا وجوود داشته که عاشق دختر همسایشون به اسم کلثوم خانم میشه!
این اصغر آقای ما هر شب از عشق این کلثوم خانم گریه میکرده و از اونجایی که اون زمان ، هنوز تلفن اختراع نشده بود ، اصغر آقا برای بیان احساساتش مجبور بود با کلثوم خانم نامه نگاری کنه!
یه رووز که اصغر آقا دیگه از عشق کلثوم خانم کارش داشت به تیمارستان میکشید ، تصمیم گرفت به کلثوم خانم نامه بنویسه و همه چیز رو بهش بگه! چون از برخورد روو در روو خجالت میکشید!
اصغر آقا نامه ی عاشقانه رو با خط خوانا و درشت مینویسه و اون رو میندازه پشت در خونه ی کلثوم خانم و خیالش راحت میشه که کلثوم خانم نامه رو میبینه!
این نامه نیم ساعت بعدش میفته دست برادرای کلثوم خانم و اونا هم غیرتی میشن و میان دم خونه ی اصغر آقا ، تا میخوره میزننش و میگن بار آخرت باشه برا آبجیمون نامه نگاری میکنی!!!
اصغر آقا میشینه دو ساعت به مغزش فشار میاره که چرا اینجوری شد!! بعد به این نتیجه میرسه که باید نامه رو رمزنگاری کنه.
مثلا بجای عشق مینویسه : باقالی و بجای دوستت دارم مینویسه : اذان مغرب!
اینبار نامه رو مینویسه و میندازه پشت در خونه ی کلثوم اینا و بالاش مینویسه : برسد به دست کلثوم!
دفعه ی بعد : برادرای کلثوم نامه رو میگیرن و میبینن یه مشت شر و ور نوشته ! میدنش به کلثوم. کلثومم میبینه یه مشت شر و ور نوشته شده ! اعصابش خورد میشه و کلی بد و بیراه مینویسه و تحویل اصغر آقا میده!!
اصغر آقا بازم سر خورده میشه و کلی به عقل ناقصش فشار میاره که : من که همه ی نکات رو رعایت کردم! چرا بهم فحش داده پس!!
بعد یهو یادش میاد که : ای دل غافلللللل! من کلید رمز رو ندادم به کلثوم ! پس اینبار همون نامه رو دوباره میندازه دم در خونه ی کلثوم اینا با این تفاوت که پایین نامه مینویسه : کلثوم اگه گفتم اذان مغرب ینی اینکه دوستت دارم!!
به نیم ساعت نکشیده باز برادرای کلثوم اومدن و زدن دهن اصغر آقا رو صاف کردن! غافل از اینکه وقتی رمز نامه رو توی نامه نوشته خب خود برادرا هم میتونن نامه رو رمزگشایی کنن دیگه!!
اصغر آقا درمونده میشه! بعد از کلی فکر کردن تصمیم میگیره که خودش بره سراغ کلثوم خانم و کلید نامه ها رو بهش بده و بهش بگه این کلید رو خوب نگهش دار و به هیشکی نده! منم هر وقت برات نامه نوشتم با همین کلید که بهت دادم بازش کن!
از اون به بعد اصغر آقا بدون اینکه فحش و کتک بخوره ، نامه هاش رو برای کلثوم خانم مینوشت و کلثوم خانم هم جوابش رو میداد و با هم لاو میترکوندن!
نشستم این همه داستان مسخره رو سر هم کردم تا شما رو با نمونه ی عینی و روز مره ی واسطه ها و رمز نگاری آشنا کنم!
توو این داستان خوندیم که در مرحله ی آخر ، اصغر آقا خودش کلثوم خانم رو فراخوند و بهش کلید رمزگشایی رو داد و یه نسخه از این کلید رو هم برای خودش نگه داشت.
در دنیای کامپیوتر به این نوع کلید ، کلید متقارن یا Symmetric Key گفته میشه.
خصوصیت Symmetric Key ها اینه که اگه بخوایم با این کلید ها ، داده یا نامه ای رو رمز نگاری کنیم، میتونیم از همون کلید برای رمز گشایی اون استفاده کنیم.
نمونه ی عینی اون ، عین کلید دروازه ی خونه هست.
شما با همون کلید ، در رو قفل میکنین و با همون کلید هم در رو باز میکنین.
حالا بیاین یکم کامپیوتری تر ، مفهوم Symmetric Key رو تجسم کنیم :
خانم آلیس ( کلثوم داستان!!) میخواد به آقای باب ( اصغر آقا!!) یه فایلی رو ارسال کنه.
قبل ارسال ، این فایل رو با کلید متقارنش ، رمزنگاری ( Encrypt ) میکنه و اون رو برای باب میفرسته.
آلیس میدونه که باب هم ، کلید متقارن رو داره پس از این بابت خیالش راحته. ( آلیس قبلا کلید رو بهش داده بوده )
باب اطلاعات رمزنگاری شده رو دریافت میکنه و با کلید متقارنی که آلیس بهش داده ، اونا رو باز میکنه.
استفاده از الگوریتم های کلید متقارن ، مزایای زیادی داره که مهم ترین اون ، سرعت بالای رمزگذاری برای حجم بالای اطلاعات هست.
در واقع این نوع الگوریتم ، حجم بالایی از اطلاعات رو به سرعت به رمز تبدیل میکنه.
یه نوع ساده از رمز نگاری Symmetric شبیه شکل زیر هست :
در نوشتن حروف جملات ، از سه تا حرف جلوتر استفاده کنیم . مثلا بجای A از D استفاده کنیم!
اونوقت Hello میشه کلمه ی بی معنی زیر :
Khqqr
مزیت دیگه ی الگوریتم Symmetric اینه که این الگوریتم میتونه کلید های تصادفی سریعی رو بر پایه ی همون الگوریتم تولید کنه و برای رمزنگاری استفاده کنه.
به این مفهوم Session Key گفته میشه که جلوتر در موردش توضیح میدم.
الگوریتم های مختلفی برای Symmetric Key ها وجوود داره . الگوریتم هایی مثل AES , RC4 و . . .
در اینترنت میتونین در مورد هر یک از این الگوریتم ها اطلاعات مختلفی بدست بیارین.
اما استفاده از Symmetric Key یه سری معایبی داره :
وقتی شما بخواین اطلاعاتی رو به کمک کلید های متقارن رمزنگاری کنین ، باید یه نسخه از کلیدتون رو در اختیار یه شخص دیگه قرار بدین. پس نیاز به یه کانال ارتباطی امن برای ارسال اون کلید دارین تا کلید رو ارسال کنین! اولا وقتی اون کانال ارتباطی امن وجوود داشته باشه ، خب دیگه نیازی به رمزنگاری نیست!! از همون کانال ، اطلاعاتتون رو هم عبور میدین دیگه! ثانیا شما فکر کنین مثلا سرویس دهنده ی ایمیل Gmail که میلیون ها کاربر در اون عضویت دارن ، از کلید متقارن استفاده کنه! بعد از چند مدت ، همه ی کاربرا ، کلید متقارن رو دارن و میتونن باز هم پیامای همدیگه رو ببینن! خب این که نتیجش همون افتضاحات به بار اومده ی تئوری اصغر-کلثوم میشه! پس باید یه تدبیر دیگه اندیشید.
خب متوجه شدیم که برای استفاده از الگوریتم کلید متقارن ، نیاز به یه کانال ارتباطی امن داریم . در ثانی اگه این کلید به دست نا اهل بیفته ، ما باید کازه کوزمون رو جم کنیم! باید چیکار کرد!؟ میگم بهتون.
الگوریتم رمز نگاری ایی اختراع شده به نام رمز نگاری از نوع Asymmetric یا نامتقارن.
خب حالا این کلید نامتقارن چیه!؟
ما برای رمزنگاری متقارن ، یه کلید داشتیم که هم با اون رمزنگاری میکردیم و هم رمزگشایی!
اما در رمز نگاری نامتقارن ، ما از دو کلید استفاده میکنیم که هیییییچ ربطی به هم ندارن!
فرض کنین ما در الگوریتم نامتقارن از کلید های A و B استفاده میکنیم.
اگه ما داده هاموون رو با کلید A رمزنگاری کنیم ، احدی نمیتونه این داده هارو رمزگشایی کنه جز کسی که کلید B رو داشته باشه! و همچنین بلعکس!
کسی که با کلید B رمزنگاری کنه ، فقط میتونه با کلید A رمزگشایی کنه.
همونطور که گفتم ما در الگوریتم نامتقارن ، دو کلید داریم. معمولا این کلید ها رو به عنوان Public Key و Private Key میشناسن.
کلید عمومی رو ما میتونیم در اختیار هر کسی قرار بدیم ولی کلید خصوصیمون رو به هیچ وجه نباید دست کسی بدیم.
ما کلید عمومی رو برای کسی میفرستیم و بهش میگیم : هوی یارو!! از این به بعد هر چی خواستی برام بفرستی با این کلید برام رمزنگاریش کن. من با کلید خصوصیم اون رو بازش میکنم!
در بین این مسیر که ما داریم کلید عمومی رو برای دوستمون میفرستیم ، هر بنی بشری که این کلید رو به دست بیاره هیچ کاری نمیتونه بکنه! چرا!؟ چون الگوریتم نامتقارن برای رمزگشایی و رمزنگاری ، نیاز به دو تا کلید داره که شخص هکر ، فقط یه کلید رو داره! پس عملا هیچ غلطی نمیتونه بکنه!
برای درک بهتر ، تصویر زیر رو ببینین :
برای اینکه درک بهتری از این نوع رمزنگاری دو کلیدی داشته باشین ، بهتون الگوریتم نامتقارن RSA رو معرفی میکنم و دو تا کلیدش رو بهتون نشون میدم.
الگوریتم RSA یه نوع الگوریتم کلید نامتقارن هست که برای تولید کلیدش از دو عدد اول استفاده میکنه.
بعد از یه سری عملیات ریاضی و ضرب و تقسیم ، دو جفت عدد بهمون میده که بصورت زیر هستن :
(n,E) و (n,D) که از اولی برای Encryption یا رمزنگاری استفاده میشه و دومی برای Decryption یا رمزگشایی.
هر کدوم از اعداد n و D و E بعد از طی یک سری عملیات ریاضی بدست میاد که فرمول کلی اون بصورت زیر هست :
- دو عدد اول ( هرچی بزگتر بهتر ) به اسم p و q انتخاب میکنیم
- مقدار n رو از ضرب p و q محاسبه میکنیم. ==> n = p x q
- عددی به اسم m رو معادل حاصلضرب p-1 در q-1 تعريف مي کنيم ==> (m = (p-1) x (q-1
- عدد E رو که از m کوچکیک تره جوری پيدا مي کنيم که بزرگترين مقسوم عليه مشترک اين دو ، عدد يک باشه به عبارتي E و m نسبت به هم اول باشن.
- عددي D رو جووری بدست میاریم که باقيمانده حاصلضرب D در e تقسيم بر m مساوي عدد 1 باشه، يعني : D x E) mod m = 1)
بعد از مراحل بالا ، شما دو جفت کلید دارین که میتونین با اونا رمزنگاری و رمز گشایی کنین.
بیاین یه مثال عددی بزنیم و ببینیم فرمول بالا کار میکنه یا نه!
من از p=3 و q=11 استفاده میکنم.
مقدار n = 33 میشه.
مقدار m = 20 میشه.
عدد E که نسبت به m اول باشه رو 3 انتخاب میکنم.
برای عدد D که باقیمونده ی حاصلضربش در E و تقسیم بر m برابر یک باشه و 7 انتخاب میکنم. E x D = 21 و باقیمانده ی 21 تقسیم بر 20 هم میشه یک!
پس کلیدامون اینا شدن : ( 33,3 ) و (33,7) .
با هردو کلید میشه رمزنگاری کرد ولی برای رمزگشایی باید کلید مقابل رو در اختیار داشت.
فرض کنین من میخوام حرف M رو با کلید ( 33,3 ) رمزنگاری کنم. اول طبق قرار داد ها یه عدد معادل برای M قرار میدم.
مثلا فرض میکنم عدد معادل M در قرارداد های بین المللی برابر 4 باشه.
برای رمزنگاری عدد 4 از فرمول روبرو استفاده میکنیم c = ME (mod n)
ینی چی؟ ینی اول عدد M رو به توان E میرسونیم و عدد حاصل رو بر n تقسیم میکنیم. باقیمانده ی این محاسبات میشه مقدار رمزنگاری شده ی M !
عدد 4 وقتی به توان 3 برسه میشه 64 و باقیمانده ی تقسیم اون بر 33 میشه : 31
ینی چی!؟ ینی مقدار کد شده ی عدد 4 میشه 31 !
خب حالا اگه بخوایم این عدد 31 رو رمز گشایی کنیم باید از کلید (33,7) استفاده کنیم و از فرمول روبرو استفاده کنیم M = cD (mod n)
ینی عدد 31 رو به توان 7 میرسونیم و باقیمانده ی تقسیمش بر 33 رو حساب میکنیم! عدد حاصل باید برابر مقدار M ینی 4 بشه. ( که میشه!)
ما در مثال بالا برای محاسبه ی n برای تولید جفت کلید ها ، از دو عدد اول بسیار کوچیک استفاده کردیم. در صورتی که اگه از دو عدد اول بسیار بزرگ استفاده میکردیم ، امنیتمون به شدت بالاتر میرفت. لابد متوجه شدین که اگه هکر بتونه از روی عدد n (که روی هر دو کلید هست) ، به مقادیر p و q پی ببره میتونه به راحتی با محاسبات معکوس ، کلید های خصوصیمون رو هم استخراج کنه. ما کلید عمومی رو به همه دادیم که عدد n هم داخلش هست. پس باید این عدد رو به اندازه ای بزرگ بدست بیاریم که هکر به همین راحتیا نتونه مقادیر p و q رو تشخیص بده. طول عدد n بدست اومده رو معمولا با Bit نشون میدن .
مثلا RSA-633bit معادل الگوریتمیه که در اون عدد n یه عدد 633 بیتی هست. ( عدد 200 رقمی)
برای یه کامپیوتر که بخواد این عدد 200 رقمی رو به عناصر سازندش که اعداد اول هستن ، بشکونه حدود 75 سال زمان نیازه!
هرچی این تعداد ارقام الگوریتم بالا تر بره ، امنیت هم بالاتر میره . مثلا RSA-1024 bit که معادل 300 رقمه ، روش رمزگذاری گوگل هست.
خب . الگوریتم رمزنگاری نامتقارن همونطوری که دیدین ، خیلی الگوریتم خوبیه. ولی مشکلی که داره اینه که سرعت رمزنگاری و رمزگشاییش خیلی کنده.
در مقابل : الگوریتم رمزنگاری متقارن ، سرعت خیلی بالایی داشت ولی چون برای ارسال کلید هامون ، با مشکل مواجه بودیم ، مشکل امنیت داشتیم.
چیکار میشه کرد!؟ کاری که اکثر سایت های ایمن و Server ها نظیر Gmail اون رو انجام میدن! از هر دو روش استفاده میکنیم! ینی کلید مشترک و متقارن رو رمز میکنیم و میفرستیم برای طرف مقابل تا مشکل امنیتی ارسال کلید متقارن رو حل کنیم! اما چجوری!؟
فرض کنین اصغر میخواد به کلثوم ، یه سری نامه رو ارسال کنه و میخواد اونارو رمز نگاری کنه.
کلثوم میاد Public Key خودش رو در اختیار اصغر میذاره و میگه نامه رو با این برام رمز کن! مبادا این دفه گند بزنی! من پیش داداشام آبروو دارم! ( میدونین که Public Key حتی اگه به دست هکر هم بیفته هیچ غلطی نمیتونه بکنه! چون کلید دوم رو اگه بخواد پیدا کنه باید خودش رو جر بده!! شکستن RSA و 75 سال یادتون بیاد!)
اصغرم که یه مقدار تنبل تشریف داره با خودش فکر میکنه : اگه بخوام این نامه ی بلند بالا رو با این Public key ( مثل RSA که پیچیده هست) رمز نگاری کنم یه ماه طول میکشه! پس چیکار کنم!؟
میاد کار زیر رو انجام میده :
- اول ، به کمک الگوریتم متقارن ، یه کلید متقارن تصادفی تولید میکنه که به اون Session Key گفته میشه.
- در مرحله ی بعدی ، میاد به کمک این Session Key که از الگوریتم متقارن بدست اومده ، بطور سریعی نامه رو رمزنگاری میکنه.
- بعد ، به کمک Public Key ایی که کلثوم بهش داده بود ، میاد این Session Key رو که خیلی کوچیک تره و زمان خیلی کمی رو برای رمزنگاری میگیره ، رمز نگاری میکنه و در کنار نامه قرار میده.
- در مرحله ی آخر هم مینویسه : کلثوم ! داده ها رو با یه کلید سریع برات رمزنگاری کردم و اون کلید رو به کمک Public Key که بهم دادی رمزنگاری کردم تا کسی نبینه . کاری که تو میکنی اینه که با Private Key ت ، اول Session Key رمزنگاری شده رو رمز گشایی کن و نامه رو با Session Key که بهت دادم رمزگشایی کن و بخون.
مطمئنا برای همتون اتفاق افتاده که وارد سایتی میشین که شروع آدرس اون با اسم HTTPS نمایش داده شده!
اون S ایی که در انتها میبینین ، مخفف کلمه ی Secure هست که به معنی ارتباط ایمن هست. ینی میخواد بگه که شما با این سایت ، یه ارتباط ایمن برقرار کردین.
اما این ارتباط ایمن چی هست و چجوریه!؟
فرض کنین وارد سایت
Google شدین. وارد سایت که شدین ، اون بالا در نوار آدرس ، اسم HTTPS رو میبینین.
گوگل برای اینکه شما رو مطمئن کنه که شما واقعا وارد سایت خودش شدین ، میاد از یه سری مدارک استفاده میکنه و به شما با کمک اون مدارک میگه که آره عزیزان! من گوگل هستم ، این شماره سریال مدرکمه ، این شرکت اعطا کننده ی مدرکمه که منو تایید کرده و . . .
به این نوع مدارک ، Digital Certificate یا گواهی دیجیتالی گفته میشه. نوعی از این گواهی های دیجیتالی ، گواهی دیجیتالی SSL هست که بسیاری از سایت ها ، برای ایمن سازی مسیر ارتباطیشون از SSL استفاده میکنن.
حالا چجوری یه Digital Certificate میتونه باعث ایمن سازی یه کانال ارتباطی بشه!؟
در وحله ی اول ، یه گواهی دیجیتال حاوی اطلاعات مهمی نظیر شماره سریال اون گواهی نامه ، نام شرکت اعطا کننده ، تاریخ انقضای گواهی نامه و . . . هست.
کاربر میتونه به کمک این اطلاعات ، چک کنه که آیا شرکتی که مدرک رو به سایت داده ، شرکت معتبری در سطح بین المللی هست!؟ آیا این گواهی هنوز اعتبار داره ؟ و اطلاعاتی از این دست. ( این اطلاعات رو مرورگر شما بطور اتوماتیک چک میکنه و اگه مشکلی پیدا شد ، اون رو به شما اطلاع میده.)
در قسمت دوم ، این Digital Certificate ها ، حاوی Public Key یا کلید عمومی رمزنگاری هستن که به کمک اون میشه اطلاعات رو رمز نگاری کرد.
هر مدرک دیجیتال ، Public Key مخصوص به خودش رو داره.
فرض کنین گوگل میخواد یه مدک دیجیتالی SSL برای خودش بگیره.
اولین کاری که میکنه اینه که برای خودش یه Public Key و Private Key میسازه .
اطلاعات شرکت و Public Key خودش رو تحت اختیار یکی از مراکز بین المللی و مورد اعتماد صدور گواهی نامه ( Certificate Authority ) قرار میده.
شرکت صدور گواهی نامه ، گوگل رو برانداز میکنه و میبینه ریگی به کفشش نیست و به گوگل با Public Key و اطلاعاتی که بهشون داده ، گواهی ارسال میکنه.
گوگل این گواهی SSL رو به همراه Private Key خودش ، روی سرورش نصب میکنه و هر کاربری که به سایت گوگل وارد شد میبینه که این گواهی نامه از یه شرکت معتبر صادر شده و تاریخ و سریال و همه چیش درسته . پس مطمئن میشه که راه رو درست اومده!
مثلا در عکس بالا میبینین صادر کننده ی گواهی برای گوگل ، شرکت Thawte SGC CA هست که یکی از شرکت های بین المللی و مورد اعتبار هست و در لیست شرکت های مورد اعتبار صادر کننده ی گواهی نامه در نرم افزار های مرورگر وب هم قرار داده شده. ینی مرورگر وب میدونه که این شرکت یه شرکت معتبر هست و بنابراین ، به کاربر اخطار امنیتی نمیده که گواهی این سایت مورد اطمینان نیست.
با کلیک روی تب Detail هم میتونین اطلاعات بیشتری از مدرک اعطا شده به گوگل کسب کنین. از جمله شماره سریال و Public Key اون.
خب با این مقدمات حالا میریم سراغ سناریوی اتصال یه کاربر به یه وب سایت HTTPS که بسیار به سناریوی اصغر-کلثوم شباهت داره:
- در مرحله ی اول وقتی کاربر ، آدرس یه وب سایت دارای HTTPS رو در مرورگر نوشت و Enter رو فشار داد ، مرورگر در ابتدا لیستی از الگوریتم های متقارنی که پشتیبانی میکنه رو در اختیار سرور قرار میده. فرض کنین مرورگر از الگوریتم متقارن RC4 پشتیبانی میکنه.
- در مرحله ی دوم ، سرور ، اطلاعاتی که مرورگر کاربر ،براش فرستاده رو بررسی میکنه و چک میکنه که آیا خود سرور هم از RC4 استفاده میکنه یا خیر. اگه استفاده نمیکرد ، ارتباط قطع میشه ولی اگه استفاده میکرد به این معنیه که کاربر و سرور در استفاده از یه کلید متقارن مشترک ، به توافق رسیدن و ارتباط ادامه پیدا میکنه.
- در مرحله ی سوم ، سرور اطلاعاتی از Digital Certificate خودش به همراه Public Key خودش و به همراه نوع الگوریتم متقارنی که سرش به توافق رسیده ، برای مرورگر کاربر میفرسته.
- در مرحله ی چهارم ، کاربر به کمک الگوریتم متقارن مورد توافق دو طرف ، یه کلید تصادفی یا همون Session Key تولید میکنه و اون رو به کمک Public Key سرور ، رمزنگاری میکنه و برای سرور میفرسته.
- در مرحله ی پنجم سرور به کمک Private Key ش ، کلید تصادفی رمزنگاری شده رو رمزگشایی میکنه و از این به بعد ، مرورگر و سرور ، داده ها و اطلاعاتشون رو به کمک همین Session Key که هردو به دست اوردن رمزنگاری و رمزگشایی میکنن و برای هم میفرستن.
پس به طور خلاصه و کلی میشه گفت :
Public Key کلیدیه که هر کسی میتونه داشته باشه و برای رمزگشایی اون ، نیاز به Private Key هست .
سرور همیشه کلید عمومی خودش رو میفرسته تا کاربر ، اطلاعات رو به کمک کلید عمومی که سرور براش فرستاده رمز کنه.
سرور به کمک کلید خصوصیش ، اطلاعات رو باز میکنه.
استفاده از کلید عمومی و الگوریتم نامتقارن ، زمانبر و کند هست.
برای سرعت بالاتر ، از کلید مشترک و متقارن استفاده میکنیم .
کلید مشترک رو با کلید عمومی رمز میکنیم و برای سرور میفرستیم.
سرور با کلید خصوصیش ، رمز رو باز میکنه و کلید مشترک رو بدست میاره.
حالا هر دو طرف کلید مشترک رو دارن و به کمک اون کلید ، اطلاعات رو با سرعت بالاتری برای هم رمز میکنن.
--------------------------------------------------------------------------------------------------------------------------
عکس زیر رو نگا کنین!
کادر های قرمزش رو ببینین!
اولیش اینه که میگه : مدرک این سایت از این شرکته و تایید شده.
قسمت دومش جالب تره :
این سایت برای رمزنگاری ، از الگوریتم متقارن RC4 استفاده میکنه و برای مرحله ی تبادل Session Key برای رمزنگاری ، از الگوریتم نامتقارن RSA .
ینی عین سناریوی ما.
تقریبا تمامی سایت های SSL از این نوع سناریو پیروی میکنن.
------------------------------------------------------------------------------------------------
در آخرم توجهتون رو به ا
ین فیلم جلب میکنم
این فیلم مربوط به یکی از شرکت های ارائه کننده ی Digital Certificate به اسم DigiCert هست.
در این فیلم میاد بهتون نشون میده که اگه یه هکر بخواد ارتباط رمزنگاری شده به کمک این مدرک رو بشکنه ، به چه مدت زمان نیاز داره!
پیشنهاد میکنم حتما حتما ببینین!
چیزی که واضحه اینه که هکر به هیچ عنوان نمیتونه کلید رمزگشایی رو بدست بیاره. پس یا باید کامپیوتر شما رو هک کنه ( که به شما بستگی داره ) باید از گواهی های جعلی استفاده کنه ( که به سطح اطلاعات شما و همچنین امنیت شرکت های ارائه دهنده ی گواهی بستگی داره ).
وقتی از گواهی های جعلی استفاده کنه میتونه خودش رو جای سرور جا بزنه و از اونجایی که Private Key و Public Key رو خودش داره ، میتونه اطلاعات رو رمزنگاری و رمزگشایی کنه. ینی کاربر ، Session Key رو بجای اینکه به سرور بفرسته ، به عموو هکر میفرسته و با هکر تبادل کلید رو انجام میده! به این شیوه که هکر بین کامپیوتر ما و کامپیوتر سرور قرار گرفته ، Man in the middle attack گفته میشه.
نمونه ی این کار رو هکر ایرانی انجام داده بود که با سرقت یه گواهی امنیتی از یه شرکت معتبر ، خودش رو جای گوگل جا زده بود و چون این گواهی سرقت شده ، از یه شرکت معتبر بود ، مرورگر اینترنتی هیچ عکس العملی نشون نداد و فکر کرد این واقعا گوگل هست!
میشه راحت این حملات رو شناسایی کرد.
کافیه که همیشه ، از آخرین آپدیت های مدارک دیجیتالی سایت و نوع کلید عمومی سایت و شرکت ارائه کننده ی سایت ، با خبر باشیم.
این کار رو مرورگر های جدید هم انجام میدن.
به عنوان مثال مرورگر Google Chrome نسخه ی ذخیره شده از اطلاعات سایت رو بصورت cookie ها ذخیره میکنه و در کنار این شیوه ، روش های مختلف و متنوعی برای چک کردن گواهی های امنیتی سایت ها داره که باعث افزایش امنیت انتقال داده ها میشه.
امیدوارم مفید بوده باشه.