Ramin Payandeh
Ramin Payandeh
خواندن ۵ دقیقه·۷ سال پیش

رمزنگاری HTTPS به بیان وِیس و رامین و کبوتر!

رمزنگاری می‌تواند موضوعی سخت و پیچیده باشد. خروارها مطالب و اثبات‌های ریاضیاتی در آن هست اما اگر دنبال ساخت یک سیستم رمزنگاری نباشید، نیازی به فهمیدن بسیاری از آن پیچیدگی‌ها نیست چون درگیر جزئیات سطح بالا نیستید!

اگر از خواندن این مقاله دنبال ساخت پروتوکل بعدی HTTPS هستید، اشتباه آمدید، کبوترهای نامه‌رسان کافی نیستند! در غیر این صورت یک چای دبش برای خودتان بریزید و لذت ببرید!

وِیس، رامین و کبوتر نامه‌بر؟!

همه فعالیت‌هایی که شما در اینترنت انجام می‌دهید (از خواندن این مقاله گرفته تا خرید از آمازون و آپلود عکس‌های مختلف) در ارسال و دریافت پیام‌هایی از و به یک سرور خلاصه می‌شود.

این به نظر یک مقدار انتزاعی می‌آید، پس تصور کنید که این پیام‌ها که گفته شد توسط کبوتر نامه‌بر جابجا می‌شوند. شاید این قیاس به نظرتان بی‌اساس و شخصی بیاید اما به من اعتماد کنید! روش HTTPS همین‌طور کار‌ می‌کند، فقط اندکی سریع‌تر.

همچنین به جای این که درباره سرورها، کاربران و هکرها صحبت کنیم، از وِیس، رامین و مهرداد استفاده می‌کنیم. شاید بار اولتان باشد که درباره رمزنگاری می‌شنوید اما از عشق ویس و رامین حتما شنیدید.

اولین ارتباط ساده

اگر ویس بخواهد پیامی به رامین بدهد، آن را به پای کبوتر می‌بندد و برای رامین می‌فرستد. رامین هم دریافت می‌کند و به همین سادگی می‌خواند.

اما اگر مهرداد در این بین کبوتر ویس را بگیرد و نامه را عوض کند چه؟ روح رامین هم از این تغییر خبر ندارد.

این همان روندی‌است که در ارتباط با سایت‌هایی که از HTTP استفاده می‌کنند رخ می‌دهد. پس بهتر است در فضای HTTP رمز کارت بانکیمان را هیچ‌وقت استفاده نکنیم.

یک رمز مخفی

هر چه باشد ویس و رامین مهارت‌هایی دارند! آن‌ها با هم قراری می‌گذارند که پیام‌هایشان را با یک رمز مخفی بنویسند. آن‌ها هر حرف را با ۳ حرف بعدی در ترتیب حروف الفبا جابجا می‌کنند. مثلاً الف←ت، ب←ث، پ←ج. پس عبارت رمزی «جپته هرگپ» به عبارت «پیام مخفی» رمزگشایی می‌شود.

به این روش الگوریتم کلید متقارن (symmetric key cryptography)می‌گویند چون اگر بدانید چطور رمزگذاری کنید، می‌دانید چطور رمزگشایی هم بکنید. شیوه رمز بالا به رمز سزار معروف است اما به طور روزمره از رمزهای پیچیده‌تر اما مشابهی استفاده می‌شود.

چطور درباره کلید رمز تصمیم می‌گیریم؟

روش کلید متقارن خیلی امن و مفید است اگر کسی جز فرستند و گیرنده از کلید رمزگشایی آن خبر نداشته باشد. مثلا در رمز سزار، کلید همان تعداد حرفی‌ست که باید به جلو برویم تا به حرف اصلی برسیم. در مثال ما کلید ۳ بود اما می‌توانست ۴ یا ۱۲ هم باشد.

مشکل اینجاست که اگر ویس و رامین قبل از پیام فرستادن همدیگر را نبینند، نمی‌توانند کلید را امن و مطمئن انتخاب کنند. اگر کلید را با کبوتر بفرستند، هیچ بعید نیست مهرداد بین راه ببیند و لو برود. این‌طوری مهرداد می‌تواند پیام‌ها را بخواند یا اصلا کلید را عوض کند.

این یک مثال مرسوم از روش هک حمله‌ی مرد میانی (Man in the Middle Attack) است و تنها راه جلوگیری از آن، تغییر همزمان کلیدهاست.

کبوترهایی که جعبه می‌برند

ویس و رامین یک راه بهتر برای حفاظت پیام‌ها پیدا کردند. وقتی ویس می‌خواهد پیامی را به رامین بفرستد این مراحل را می‌رود:

  • ویس یک کبوتر بدون نامه به رامین می‌فرستد.
  • رامین صندوقی را با کبوتر باز می‌فرستد اما درِ آن را نمی‌بندد و کلیدش را هم نگه می‌دارد.
  • ویس پیام را در صندوق قرار می‌دهد، آن را قفل می‌کند و می‌فرستد.
  • رامین صندوق را می‌گیرد و با کلید باز می‌کند و پیغام را می‌خواند

به این ترتیب مهرداد نمی‌تواند تغییری در نامه بدهد چون کلید را ندارد. همین روند وقتی که رامین می‌خواهد با ویس صحبت کند طی می‌شود.

روشی که این‌بار ویس و رامین انتخاب کردند به رمزنگاری کلید عمومی معروف است. به آن عمومی می‌گویند زیرا حتی اگر بتوانید پیامی را رمزنگاری کنید (در صندوق را ببندید) نمی‌تواند آن را رمزگشایی کنید (کلید باز کردن در صندوق را ندارید).

به بیان فنی، صندوق را کلید عمومی (Public Key) و کلید باز کردن آن را کلید خصوصی (Private Key) می‌گویند.

چطور به صندوق اطمینان کنم؟

اگر دقت کنید هنوز یک مشکل هست. وقتی رامین صندوق باز را دریافت می‌کند چطور می‌تواند مطمئن باشد که صندوق را ویس فرستاده؟ از کجا معلوم بین راه مهرداد صندوق را عوض نکرده باشد؟

ویس تصمیم می‌گیرد که روی صندوق را امضا کند تا وقتی به دست رامین می‌رسد، اطمینان دهد که از او رسیده.

ممکن است فکر کنید چطور رامین امضای ویس را برای بار اول می‌شناسد؟ پرسش به جاییست! ویس و رامین هم همین مشکل را داشتند و تصمیم گرفتند صندوق‌ها را پادشاه امضا کند.

پادشاه را همه می‌شناسند و ضمناً قابل اعتماد هم هست. پادشاه امضایش را به همه نشان داده و همه هم می‌دانند که او فقط صندوق‌هایی را امضا می‌کند که مربوط به افراد قانونی و درست باشد.

پادشاه فقط در صورتی صندوق‌های ویس را امضا می‌کند که مطمئن شود خود ویس آن امضا را می‌خواهد. پس مهرداد نمی‌تواند به نیابت از ویس یکی از صندوق‌هایش را به امضای شاه برساند چون شاه حتما اصالت و شناسنامه‌ی او را چک می‌کند. در این صورت رامین هم متوجه کلاه‌برداری خواهد شد.

اگر بخواهیم فنی بررسی کنیم، پادشاه اینجا مرجع صدور گواهی دیجیتال (Certification Authority) است و مرورگری که شما همین الآن استفاده می کنید، از قبل امضای بسیاری از این مراجع را با خود دارد.

پس وقتی برای اولین بار وارد یک سایت می‌شوید، به صندوق آن اعتماد می‌کنید زیرا به پادشاه اعتماد دارید و شاه هم می‌گوید این صندوق قانونی است.

صندوق‌ها سنگین هستند!

حالا ویس و رامین راه امن ارتباط با هم را دارند اما متوجه شده‌اند که کبوترهایی که صندوق جابجا می‌کنند از آن‌هایی که فقط پیام می‌برند آهسته‌تر می‌روند.

آن ها تصمیم گرفتند که روش صندوق (رمزنگاری عمومی) را فقط زمانی استفاده کنند که می‌خواهند کلیدی را برای رمزنگاری به روش متقارن (مانند رمز سزار) انتخاب کنند.

به این ترتیب آن‌ها هم خدا را دارند و هم خرما را! هم اطمینان‌بخشی روش رمزنگاری عمومی را دارند و هم سرعت بهینه‌ی روش رمزنگاری متقارن را نگه می‌دارند.

در دنیای واقعی کبوتری وجود ندارد اما روش رمزنگاری به روش عمومی آهسته‌تر از روش متقارن صورت می‌گیرد. به همین خاطر فقط زمان تبادل کلیدهای رمزنگاری از آن استفاده می‌شود.

حالا شما می‌دانید که HTTPS (که اول آدرس سایت‌های مهم دیده می‌شود) چطور کار می‌کند و از زرنگی ویس و رامین هم با خبر شدید! با خیال راحت چای بنوشید :)

** آنچه خواندید ترجمه‌ای بود از مقاله‌ی «HTTPS explained with carrier pigeons»، نوشته‌ی آندریا زانین که در بلاگ free code camp سایت مدیوم منتشر شده است. برای فهم بهتر، اسامی و ماجرا به ویس و رامین و مهرداد و پادشاه تغییر پیدا کرده‌اند.

امنیتحریم شخصیرمزنگاریاینترنتهک
یک داشنجوی مکانیکِ علاقه‌مند به خوندن و نوشتن - مدیر مارکتینگ مرحوم بقچه
شاید از این پست‌ها خوشتان بیاید