توضیح HTTPS به وسیله کبوترهای نامه بر
کریپتوگرافی موضوعی است که درک آن میتواند کمی دشوار باشد. سرتاسر آن پر از محاسبات و اثباتهای ریاضی است. با این حال مگر این که شما بخواهید یک سیستم کریپتوگرافی توسعه دهید، درک این پیچیدگیها برای درک نحوه کارکرد الزامی نمیباشد.
اگر در این مقاله به دنبال نحوه ایجاد نسل بعدی HTTP هستید، باید بگوییم که نامید خواهید شد و قطعا کبوترها کافی نخواهند بود! در غیر این صورت فکر میکنیم که این مقاله را مفید خواهید یافت.
احسان، سینا و … کبوترها؟
هر فعالیتی که شما در اینترنت دارید (خواندن این مقاله، خرید اینترنتی، آپلود تصاویر) به فرستادن و دریافت پیامها از طریق سرور خلاصه خواهد شد.
حالا فرض کنید که این پیامها از طریق کبوترهای نامهبر تحویل داده میشوند. ممکن است این موضوع کمی متفاوت به نظر برسد با این حال باید بدانید که HTTPS نیز به همین شیوه کار میکند، اگر چه بسیار سریع تر!
به جای صحبت در مورد کلاینت و سرور و … ما در مورد احسان، سینا و نگار صحبت خواهیم کرد.
ارتباط اولیه و ساده
اگر سینا بخواهد که پیامی را به نگار بفرستد، پیام را به پای کبوتر بسته و آن را به سمت نگار رهسپار میکند. نگار پیام را دریافت میکند، آن را میخواند و همه چیز آرام است.
اما چه میشود اگر احسان، جلوی کبوتر سینا را گرفته و پیام را تغییر دهد؟ سینا هیچ راهی برای دانستن این موضوع که پیام توسط احسان تغییر کرده است ندارد.
این نحوه کارکرد HTTP است. خیلی ترسناک است. نه؟ ابدا عاقلانه نیست که اطلاعات حساس خود مثل کارت و رمز دوم و… را از طریق HTTP انتقال دهید.
یک کد مخفی
حال اگر سینا و نگار مهارت بالایی داشته باشند چه؟ آنان توافق میکنند که پیامهای خود را به وسیله یک کد مخفی بنویسند. آنان مکان هر حرف را ۳ مرتبه تغییر میدهند. برای مثال: ت -> الف، ث -> ب، ج -> پ. و جمله “پیام مخفی” به “ینوک کجظن” تبدیل خواهد شد.
اکنون اگر احسان کبوتر را متوقف کند نمی تواند پیام را به حالت معناداری تبدیل کند و همچنین پیام را متوجه نخواهد شد چرا که از کد مخفی اطلاعی ندارد. اما نگار به راحتی متن نوشته شده را رمزگشایی کرده و از متن پیام باخبر خواهد شد.
موفقیت!
این روش رمزنگاری کلید متقارن (Symmetric key cryptography) نام دارد، در این جا اگر شما بدانید پیام به چه نحوی رمزگذاری شده می توانید آن را رمز گشایی کنید.
رمزگذاری بالا با نام رمز سزار (Caesar cipher) شناخته می شود. در دنیای واقعی، ما از شکلهای پیچیدهتری استفاده میکنیم با این حال ایده اصلی یکسان است.
چطور رمز را مشخص کنیم؟
الگوریتم کلید متقارن در صورتی که شخصی به جز فرستنده و گیرنده از کد مورد استفاده شده اطلاعی نداشته باشد، بسیار امن است. در روش Caesar cipher کد نشان دهنده تغییر موقعیت حروف الفبا نسبت به یکدیگر است. در مثال ما این تغییر موقعیت ۳ بود.
مشکل اینجاست که در صورتی که سینا و نگار از قبل با یکدیگر تماس نداشته باشند راهی برای مشخص کردن کد مورد استفاده شده وجود ندارد. اگر آنان کد مورد نظر را در خود پیام قرار دهند، احسان نیز میتواند به پیام دسترسی پیدا کند و به او اجازه خواندن و تغییر پیام را به شکل دلخواهش خواهد داد.
این مشکل مثال بارزی از حمله مرد میانی (Man in the Middle) است و تنها راه جلوگیری از آن تغییر کامل سیستم رمزنگاری است.
کبوترهای حامل جعبه
در اینجا سینا و نگار به راه حل بهتری میرسند. هنگامی که سینا میخواهد برای نگار پیامی بفرستد راه حل زیر را دنبال خواهد کرد:
- سینا کبوتر را بدون نامه و پیام به سمت نگار میفرستد.
- نگار کبوتر را به همراه جعبهای که قفل باز شده دارد برای سینا میفرستد و کلید را پیش خود نگه میدارد.
- سینا پیام مورد نظر خود را درون جعبه گذاشته و قفل آن را میبندد و دوباره جعبه را برای نگار می فرستد.
- نگار جعبه را دریافت کرده و آن را به وسیله کلید باز کرده و پیام مورد نظر را میخواند.
در این شیوه احسان نمیتواند پیام را به وسیله متوقف کردن کبوتر تغییر دهد چرا که کلید را ندارد. این پروسه هنگامی که نگار میخواهد برای سینا پیامی بفرستد، تکرار خواهد شد.
سینا و نگار از تکنیکی استفاده کردهاند که با نام رمزنگاری کلید نامتقارن (asymmetric key cryptography) شناخته میشود. دلیل نامتقارن بودن نیز به آن باز میگردد که حتی اگر شما بتوانید پیام را رمزگذاری کنید (جعبه را قفل کنید) نمیتوانید آن را رمزگشایی کنید (جعبه قفل شده را باز کنید). اگر به صورت فنی بخواهیم صحبت کنیم جعبه در این جا کلید عمومی ( public key ) است و کلید باز کردن آن کلید خصوصی Private key نام دارد.
چطور به جعبه ارسال شده اعتماد کنیم؟
اگر توجه کرده باشید متوجه شدهاید که این سیستم نیز مشکلی دارد. هنگامی که سینا جعبه باز را دریافت میکند چطور مطمئن باشد که احسان کبوتر را متوقف نکرده و جعبه مورد نظر را با جعبهای که کلید آن را دارد تعویض نکرده است؟
نگار تصمیم میگیرد که جعبه را امضا کند به نحوی که هنگامی که سینا جعبه را دریافت میکند، امضا را بررسی کرده و اطمینان یابد که جعبه از طرف نگار فرستاده شده است.
بعضی از شما ممکن است فکر کنید، چطور سینا امضا نگار را تشخیص دهد؟ سوال خوبی است. سینا و نگار نیز با این مشکل مواجه شدند بنابراین تصمیم گرفتند که به جای این که نگار جعبه را امضا کند، مریم جعبه را تایید و امضا کند.
اما مریم چه کسی است؟ مریم شخصی بسیار معروف، شناخته شده و قابل اعتماد است. مریم امضای خود را به همه خواهد داد و افراد اعتماد دارند که او تنها جعبهها را برای افراد مشروع امضا خواهد کرد.
مریم تنها در صورتی جعبه نگار را امضا خواهد کرد که مطمئن باشد شخصی که تقاضای امضای جعبه را دارد خود نگار است. بنابر این احسان نمیتواند به جعبه نگار که توسط مریم و از طرف او امضا شده است دسترسی داشته باشد. چرا که هویت او از قبل توسط مریم تایید شده، بنابر این سینا با اطمینان خاطر جعبه را دریافت خواهد کرد.
مریم در اصطلاح تکنیکی با نام مرجع صدور گواهی (certification authority) شناخته میشود و مرورگری که شما به وسیله آن در حال خواندن این مقاله هستید با پکیجی از امضاهای certification authority های متفاوت همراه شده است.
جعبههای سنگین
سینا و نگار هم اکنون سیستمی قابل اعتماد برای ارتباطات خود دارند، اما آنان متوجه میشوند که سرعت کبوترهایی که جعبه حمل میکنند نسبت به کبوترهای بدون جعبه آهستهتر است.
آنان تصمیم میگیرند که از روش جعبه (رمزنگاری کلید نامتقارن) تنها برای انتخاب کلید و رمزی که به وسیله رمزنگاری کلید متقارن رمزگذاری شده است استفاده کنند.
در این راهکار آنان بهترینهای هر دو روش را خواهند داشت. امنیت asymmetric cryptography و موثر بودن symmetric cryptography.
در جهان واقعی نیز با این که از کبوترها دیگر برای انتقال پیام استفاده نمیشود، با این حال در آن جا نیز پیامهایی که از asymmetric cryptogaphy استفاده میکنند نسبت به symmetric cryptogaphy کندتر هستند، بنابراین تنها برای انتقال کلید لازم برای رمزگذاری استفاده میشوند.
اکنون شما باید با نحوه کارکرد HTTPS بیشتر آشنا شده باشید.
این مقاله در اصل توسط آندرئا زانین نوشته و در سایت مدیوم منتشر شده است.
مطالب زیر را حتما مطالعه کنید
ایجاد یک برنامه یکسان در Vue و React. تفاوت در چیست؟
تغییر و تحول وب
چگونه طراح بهتری باشیم؟ راهنمای ۵ دقیقهای برای کسانی که طراح نیستند
طراحی فرمهای مناسبتر
استفاده از دستور amend در git
۷ نکته کاربردی برای تقلب در طراحی
1 دیدگاه
به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.
خیلی مچکرم بابت مقاله جالب با مثال های جالبترش
بلاگ خوب و جذابی دارید که از طریق loremsaz.com پیداش کردم