پروتکل HTTPS نسخۀ ایمنشدۀ HTTP است که در واقع میتوان گفت با اضافه کردن مکانیزمهای موجود در علم رمزنگاری به HTTP، این پروتکل ایمن شده است. همواره آنچه دولوپرهای حرفهای را از افراد عادی متمایز میسازد، دانش عمیق ایشان در ارتباط با زیرساختهای توسعهٔ نرمافزار است که یکی از آنها آشنایی با سازوکار وب، اینترنت و نحوهٔ برقراری امنیت در فضای آنلاین است که در همین راستا در ادامه قصد داریم از طریق تشبیه ریکوئست و ریسپانسهایی که در فضای اینترنت ردوبدل میشوند به کبوترهای نامهرسان، درک سازوکار HTTPS را تسهیل کنیم. به عبارتی، در این مقاله سعی داریم با یک مثال ساده و بدون وارد شدن به مفاهیم و ریاضیات پیچیدۀ رمزنگاری، پروتکل HTTPS را توضیح دهیم.
ماجرای آتوسا، بابک و کبوترهای نامهرسان
هر فعالیتی که در اینترنت انجام میدهید، از خواندن مقاله گرفته تا خرید آنلاین و یا آپلود/دانلود فایل، همگی به وسیلۀ تبادل (ارسال و دریافت) پیام با یک سِرور انجام میشود و با توجه به اینکه تصور کردن نحوۀ تبادل پیام با سِرور ممکن است کمی ناملموس باشد، بیایید فرض کنیم که این تبادل پیام توسط کبوترهای نامهرسان انجام میشود (شاید در ظاهر قیاس معالفارقی باشد، اما امنیتی که از طریق این پروتکل برای کاربران رقم میخورد فرق چندان با مثالی که در ادامه ذکر خواهیم کرد نخواهد داشت.)
در این داستان فرضی به جای استفاده از سرور، کلاینت و هکر از اسامی آتوسا، بابک و مارال استفاده خواهیم کرد اما نیاز به توضیح است که در ادبیات فنی رمزنگاری از اسامی Alice و Bob به عنوان دو فردی که میخواهند به تبادل پیام بپردازند و از اسامی Eve یا Mallory به عنوان هکری که قرار است پیام را در بین راه بخواند و یا تغییر دهد استفاده میشود اما در این مقاله تصمیم گرفتیم برای درک بهتر موضوع، از اسامی بومی استفاده کنیم.
یک ارتباط ساده و بدون رمزنگاری
بیایید تصور کنیم که در روزگاران قدیم آتوسا و بابک (کلاینت و سرور) که تازه با یکدیگر نامزد شده بودند، قصد داشتند نامههای عاشقانهٔ خود را با کبوتر برای هم بفرستند اما در این میان مارال، دوست بَدجنس آتوسا که احتمالاً روزی روزگاری عاشق بابک هم بوده است (هکر)، دوست دارد از نامههایی که این دو نفر برای هم میفرستند سر در بیاورد و یا محتوای آنها را تغییر دهد.
روزی آتوسا یک نامۀ عاشقانه مینویسد و آن را به پای کبوتری میبندد و برای بابک ارسال میکند و در نهایت بابک نامه را دریافت کرده و آن را میخواند که تا اینجای داستان همه چیز خوب است اما فرض کنید در بین راه مارال کبوتر را گیر میآورد، نامه را تغییر میدهد و مجدد برای بابک میفرستد. حال پرسش اینجا است که بابک از کجا بداند که نامه را یک نفر در میان راه تغییر داده است؟ مسلماً نمیداند و فکر میکند که این همان نامۀ آتوسا است و در این نقطه آتوسا و بابک به فکر میافتند روشی به کار ببرند که این مشکل را رفع کنند (پروتکل HTTP نیز دقیقاً از روش مشابهی برای تبادل دیتا استفاده میکند که کاملاً ناامن است.)
استفاده از یک الفبای محرمانه
اگر آتوسا و بابک کمی زرنگ باشند، نامههای خود را با استفاده از یک الفبای محرمانه مینویسند به این صورت که هر یک از حروف الفبا را سه جایگاه جابهجا میکنند و یک الفبای جدید میسازند به طوری که در این الفبای جدید به جای حرف «ت» از «الف»، به جای «ث» از «ب» و به جای «ج» از حرف «پ» استفاده میکنند و به همین صورت بقیه حروف نیز جابجا میشوند.
به طور مثال، اگر آتوسا بخواهد با استفاده از این الفبای جدید و در عین حال مرموز جملۀ «دوستت دارم» را برای بابک بفرستد، عبارت «چلراا چوخک» را در نامه مینویسد که در این حالت اگر مارال در میان راه به نامه دسترسی پیدا کند، مفهوم این پیام را متوجه نخواهد شد و از طرفی اگر هم بخواهد پیام را تغییر دهد، یک پیام بیمعنا تولید خواهد کرد. در عین حال بابک با انجام دادن عمل معکوس بر روی الفبای نامه (مثلاً قرار دادن حرف «ت» به جای حرف «الف» الی آخر) کاملاً محتویات نامه را متوجه میشود که با استفاده از این الگوریتم آتوسا و بابک به یک موفقیت نسبی دست یافتهاند.
این روش که آتوسا و بابک در نظر گرفتند اصطلاحاً Symmetric Key Cryptography (رمزنگاری کلید متقارن) نام دارد که در این روش هر شخصی هم میداند که چگونه یک پیام را باید رمزگذاری کند و هم میتواند آن پیام مرموز را به حالت اول برگرداند. همچنین نیاز به توضیح است جابهجا کردن حروف الفبا به روشی که توضیح داده شد معروف به Caesar Cipher است (نیاز به توضیح است که در دنیای واقعی روشهای پیچیدهتری برای رمزنگاری استفاده میشود اما ایدۀ اصلی به همین شکل است.)
آتوسا و بابک چگونه الفبای محرمانه را با یکدیگر هماهنگ میکنند؟
در الگوریتم Caesar Cipher که آتوسا و بابک استفاده کردند، هر حرف الفبا سه جایگاه جابهجا شد اما در عین حال تعداد جابهجایی که برای این الگوریتم در نظر گرفته میشود میتواند چهار یا هر عدد دیگری باشد و همانطور که اشاره شد این الگوریتم حاوی یک Key (کلید) است. به عبارتی، تعداد جابهجایی حروف که در نظر گرفته میشود همان کلید میباشد و این در حالی است که اگر به جز آتوسا و بابک شخص دیگری از این کلید خبر نداشته باشد، این الگوریتم بسیار قوی محسوب میگردد.
حال فرض کنید آتوسا میخواهد برای بابک یک نامه بفرستد و قبل از آن با بابک هماهنگ نکرده است که کلید (تعداد جابهجایی حروف الفبا) را چه تعداد در نظر بگیرند. نیاز به توضیح نیست که قطعاً نمیتوانند کلید را در نامه بفرستند چون در آن صورت مارال هم به کلید دست پیدا خواهد کرد و در نتیجه میتواند نامه را رمزگشایی کند (اینکه مارال در میان راه نامه را به دست بیاورد و رمز را از داخل آن بردارد و از آن طریق به متن اصلی نامه دست پیدا کند یک حملۀ اصطلاحاً Man-In-The-Middle است.) در همین راستا، آتوسا و بابک برای جلوگیری از این نوع آسیبپذیری باید کل سیستم رمزنگاریشان را تغییر دهند.
شرایطی که کبوترهای نامهرسان به جای نامه جعبه حمل کنند
آتوسا و بابک برای حل مشکل قبل یا به عبارتی تعیین تعداد جابهجایی حروف، یک روش به مراتب بهتر پیدا کردند که در این روش اگر آتوسا بخواهد برای بابک پیامی بفرستد، مراحل زیر را انجام میدهند:
1. آتوسا یک کبوتر برای بابک میفرستد.
2. بابک یک جعبه که دارای قفل است ولی قفل آن باز است به کبوتر میبندد و برای آتوسا ارسال میکند اما این در حالی است که کلید قفل جعبه را فقط بابک دارد.
3. آتوسا نامهاش را در جعبه قرار میدهد و جعبه را قفل میکند (فرض کنید قفل جعبه از نوع قفلهایی است که بدون کلید بسته میشود.)
4. از این پس بابک جعبۀ قفلشده را دریافت کرده و با کلیدی که در اختیار دارد درب آن را باز میکند و نامه را میخواند.
همین فرایند وقتی که بابک بخواهد برای آتوسا نامه بفرستد تکرار میشود که در چنین شرایطی اگر مارال در میان راه به کبوتر و جعبه دسترسی پیدا کند، هرگز قادر نخواهد بود که درب جعبه را باز کند و نامه را بخواند یا تغییر دهد. نام روش جدیدی که آتوسا و بابک از آن استفاده کردند اصطلاحاً Asymmetric Cryptography است که به آن «رمزنگاری نامتقارن» یا «رمزنگاری کلید عمومی» نیز گفته میشود و دلیل استفاده از کلمۀ نامتقارن این است که فرستندۀ پیام که آن را رمزگذاری میکند (در مثال فوق درب جعبه را قفل میکند) قادر نیست رمز آن را باز کند (درب جعبه را باز کند) که در ادبیات فنی رمزنگاری، جعبه معادل با Public Key و کلیدی که آتوسا یا بابک پیش خود نگاه میدارند معادل با Private Key است.
آتوسا و بابک چگونه میتوانند به جعبهای که دریافت میکنند اعتماد داشته باشند؟
ممکن است توجهتان به این نکته جلب شده باشد که وقتی آتوسا یک جعبهٔ خالی را دریافت میکند (در قدم شمارۀ 2) از کجا مطمئن باشد که این جعبه را بابک فرستاده است چون ممکن است مارال در بین راهِ کبوتر، جعبۀ بابک یا آتوسا را با جعبۀ خودش جایگزین کرده باشد که در چنین شرایطی مارال کلید جعبهٔ خودش را دارد و میتواند تمام نامهها را بخواند و یا تغییر دهد!
برای حل این مشکل، آتوسا و بابک تصمیم میگیرند جعبههایشان را امضاء کنند که در این صورت مارال نمیتواند جعبۀ خودش را به جای جعبۀ آنها قرار دهد که این مشکل هم با امضاء کردن جعبه حل میشود. در ادامه، ممکن است این سؤال برای شما پیش بیاید که اگر آتوسا و بابک از قبل امضای یکدیگر را نشناسند چه میشود و این در شرایطی است که ایشان تازه با هم نامزد شدهاند و هنوز فرصت نکردهاند با امضای هم آشنا شوند!
برای حل این مسأله، آتوسا و بابک تصمیم میگیرند که جعبههایشان را به نفر سومی به نام آریا بدهند که آنها را برایشان امضاء کند و آریا یک شخص معروف، خوشنام و مورداعتماد است که همه او را میشناسند و به وی اعتماد دارند. اساساً همه امضای آریا را میشناسند و مطمئن هستند که آریا به دروغ جعبهٔ یک نفر را به شخص دیگر نمیدهد. به عبارتی، اگر مارال از آریا بخواهد که یک جعبه را به نام آتوسا یا بابک برایش امضاء کند، او هرگز این کار را نخواهد کرد.
اصطلاح فنیای که برای آریا به کار میرود Certification Authority یا به اختصار CA نام دارد. در حال حاضر که مشغول مطالعۀ این مقاله از طریق مرورگری همچون گوگل کروم یا فایرفاکس هستید، مرورگر مذکور امضای یکسری Certification Authority مختلف را در خود دارد و از همین روی وقتی این صفحه از سایت سکان آکادمی را باز میکنید، این سایت به نوعی توسط شرکت معتبری امضاء شده است و از همین روی مرورگر شما به آن اعتماد خواهد کرد چون از قبل آریا یا به عبارتی شرکت CA را میشناسد.
حمل جعبههای سنگین توسط کبوترها کُند است
تا اینجا آتوسا و بابک یک روش مطمئن برای ارتباط با هم پیدا کردند اما پس از مدتی متوجه شدند حرکت کردن کبوترهایی که جعبه حمل میکنند کُندتر از کبوترهایی که نامه حمل میکنند است و از همین روی تصمیم میگیرند که از روش حمل جعبه (Asymmetric Cryptography) فقط برای ارسال کلید استفاده کنند و با استفاده از آن کلید و روش Symmetric Cryptography نامههایشان را رمزگذاری کنند که با این کار آنها هم از امنیت Asymmetric Cryptography و هم از سرعت بالای Symmetric Cryptography برخوردار خواهند شد (اساساً پروسۀ رمزگذاری پیام با استفاده از الگوریتم Assymetric Cryptography نسبت به حالتی که همان پیام با الگوریتم Symmetric Cryptography رمز شود کُندتر است.)
جمعبندی
کاری که بر روی پروتکل HTTP انجام میشود و این پروتکل را تبدیل به پروتکل HTTPS میکند مشابه مثالی است که در بالا شرح داده شد. اگر بخواهیم به طور خلاصه بگوییم، در واقع مرورگرهایی که استفاده میکنیم اطلاعات یکسری Certificate Authority را که شامل تاریخ اعتبارشان میشود در خود دارند و هر بار که مرورگرمان را آپدیت میکنیم این اطلاعات نیز بهروزرسانی میشوند (این یکی از مهمترین دلایلی است که باید همیشه مرورگرهایمان را بهروز نگاه داریم.)
وقتی که وارد سایتی میشویم، مثل این است که یک کبوتر به سمت سروری که وبسایت مذکور روی آن میزبانی شده است فرستادهایم که در ادامه آن وبسایت یک جعبۀ امضاءشده برای ما میفرستد تا کلید را در آن قرار دهیم و به آن وبسایت ارسال کنیم. بعد از این مرحله، هم ما و هم آن وبسایت یک کلید مشترک داریم که میتوانیم با استفاده از یک الگوریتم Symmetric Cryptography و آن کلید مشترک، دادههایی که ردوبدل میکنیم را رمزگذاری کرده و هرگونه امکان شُنود را از بین ببریم.