مطمئناً در وبگردیهای خود به سایتهایی که ابتدای آدرس آنها https نوشته شده باشد برخوردهاید:
اگر میخواهید بدانید این کلمه به چه معناست با من همراه باشید.
انواع الگوریتمهای رمزنگاری:
قبل از اینکه در مورد https توضیح دهم، باید ابتدا در مورد الگوریتمهای رمزنگاری به طور مختصر توضیح دهم:
در دنیای امنیت، الگوریتمهای رمزنگاری داده (یا Data Encryption Algorithms) را به دو دسته کلی تقسیم میکنند:
۱- الگوریتمهای رمزنگاری برگشتپذیر یا Reversible Encryption Algorithms
در این نوع الگوریتمها دادهی مورد نظر پس از رمزگذاری، قابل برگشت به دادهی اولیه است. موضوع بحث من در این مقاله همین نوع است.
۲- الگوریتمهای رمزنگاری برگشتناپذیر یا Irreversible Encryption Algorithms
در این نوع الگوریتمها دادهای که رمزگذاری میشود، به هیچ وجه قابل برگشت به دادهی اولیه نیست. در مورد این الگوریتم و کاربرد و نکات آن در مطلب «hash چیست؟ MD5 چیست؟ و چگونه بفهمید یک فایل به درستی دانلود شده است؟» توضیح دادهام که پیشنهاد میکنم حتماً مطالعه کنید.
انواع الگوریتمهای رمزنگاری برگشتپذیر:
الگوریتمهای برگشتپذیر، خودشان به دو دسته تقسیم میشوند:
۱- الگوریتمهای رمزنگاری متقارن یا Symmetric-key algorithm
در این نوع الگوریتم، کلید رمزگذاری دادهها و کلید رمزگشایی دادهها یکسان است. (یعنی دادهها با همان کلیدی رمزگشایی میشوند که رمزگذاری شدهاند) (در این مطلب هر گاه گفته میشود «کلید» شما تقریباً چیزی شبیه به «رمز» فرض کنید)
این، اولین نوع رمزگذاری بود که بشر تعریف کرد. هر چند تاریخچه رمزگذاری را حداقل به ۱۹۰۰ سال قبل از میلاد مسیح میدانند (یعنی حدود ۴۰۰۰ سال پیش) اما سادهترین و شناختهشدهترین الگوریتم در این دسته، الگوریتمی است که پادشاه ژولیوس سزار در حدود ۵۰ سال قبل از میلاد به کار میبرد و به همین دلیل به آن Caesar cipher (رمزنگاری سزار) گفته میشود.
گاهی که پادشاه سزار به فرمانداران خود در شهرهای دیگر نامه میفرستاد، راهزنان و جاسوسان در راه، پیک را میگرفتند و نامه را میخواندند و همه چیز لو میرفت... تا اینکه دانشمندان دربار، الگوریتم سزار را ابداع و استفاده کردند. در این الگوریتم، یک عدد (مثلاً ۴) به عنوان کلید در نظر گرفته میشد و سپس هر حرف الفبا به جای اینکه خودش در نامه نوشته شود، ۴ تا بعد از آن نوشته میشد. مثلاً اگر قرار بود بنویسند: Hamid، حرف H (و بقیه حروف را) ۴ تا به راست شیفت میدادند، پس میشد: Leqmh
هر چند این رمزنگاری تا مدتها جواب میداد اما بعدها که احتمالاً الگوریتم به بیرون از دربار رسوخ کرد، خیلی راحت شکسته شد.
و یا مثلاً یکی از راههای شکستن این الگوریتم، استفاده از علم آمار است: فرض کنید میخواهید یک نامه انگلیسی را رمزگشایی کنید. باید ببینید کدام حرف الفبای انگلیسی بیشترین کاربرد را دارد؟ آمار میگوید e بیشترین کاربرد را دارد. خوب! تمام شد دیگر! حالا کافیست ببینید در نامهی رمزنگاری شده، چه حرفی بیش از بقیه تکرار شد؟ آن حرف، در ابتدا e بوده. حالا فاصله حرف جدید با e را به دست آورید، کلید پیدا میشود...
طبیعتاً این الگوریتمها هر روز پیشرفتهتر و پیچیدهتر شد تا کمکم رسیدیم به الگوریتم DES (مخفف Data Encryption Standard) که البته DES با اینکه بسیار پیچیده بود اما به خاطر یافتن چند نمونه دادهی رمزگذاری شده که با طی کردن مراحلی، بدون داشتن کلید به دادهی اولیه رسیدند، این الگوریتم زیرسؤال رفت و فعلاً دنیا در حال استفاده از الگوریتم AES (مخفف Advanced Encryption System) است. به طور مثال وقتی شما BitLocker را روی فلش یا هارد اکسترنال خود فعال میکنید و یا وقتی به صورت بیسیم به مودم (یا بهتر است بگوییم اکسس پوینت) متصل میشوید، دادههای شما با الگوریتم AES رمزنگاری میشوند.
(توجه: بدون خواندن این مطلب، امکان BitLocker را فعال نکنید)
به هر حال، در همه این الگوریتمها از شما یک رمز (یا همان کلید) پرسیده میشود و دادههای شما با آن رمز و طبق فرمولهای بسیار بسیار پیچیده، رمزنگاری میشود. سپس در مقصد (یعنی هنگام استفاده از دادهها) نیز همان رمز پرسیده میشود و دادهها به حالت اول برمیگردد و قابل استفاده است.
خیلی خوب، این از الگوریتمهای متقارن. این الگوریتمها تا زمانی که قرار است دادهها و رمز فقط نزد خود شما باشد و خودتان از آن استفاده کنید، بهترین گزینه هستند؛ اما مشکل، زمانی پیش میآید که شما بخواهید دادهها را برای یکی بفرستید و او بخواهد دادهها را رمزگشایی و استفاده کند! اینجاست که پای الگوریتمهای نامتقارن وسط میآید:
۲- الگوریتمهای رمزنگاری نامتقارت یا ASymmetric-key algorithm یا Public-key cryptography
در این الگوریتم، کلید رمزگذاری با کلید رمزگشایی متفاوت است. در اصطلاح گفته میشود دادهها با کلید عمومی (Public Key) رمزگذاری میشوند اما با کلید خصوصی (Private Key) رمزگشایی میشوند.
برای درک مسأله، بیایید به چند صد سال قبل برگردیم. فرض کنید قرار است شما یک قطعه طلا (فراموش نکنید که گاهی نام کاربری و رمز عبور شما ارزشش از طلا هم بیشتر است!) را به یک شهر دیگر بفرستید به طوری که اگر در راه، راهزنها حمله کردند، طلاها در امان باشد. تنها چیزی که در اختیار دارید، گاوصندوقهای بسیار محکم است که با هیچ روشی به جز داشتن کلید امکان باز شدن آنها نیست... خوب، شما چطور میخواهید این قطعه طلا را به آن شهر بفرستید؟
- ممکن است بگویید خوب، طلا را میگذاریم داخل گاوصندوق و میفرستیم! خوب، کلیدش را هم باید بفرستید! راهزنی که صندوق را میگیرد، کلید را هم از شما میگیرد و صندوق را باز میکند...
- ممکن است بگویید کلید را در بارها قایم میکنیم! خوب، من اگر راهزن باشم تمام بار شما را مو به مو میگردم و کلید را پیدا میکنم!
- ممکن است بگویید صندوق را از یک مسیر و کلید را از مسیر دیگر میفرستیم! خوب، راهزنها از شما زرنگترند! در همه مسیرها یکی از همکارانشان منتظر شماست تا کلید را بگیرد!
فکر میکنید واقعاً آن زمان چطور این طلا را جا به جا میکردند؟ برای اینکه متوجه شوید، ابتدا این ویدئو را ببینید:
آدرس ویدئو: http://www.aparat.com/v/0uiXK
همانطور که میبینید، راهحل، خیلی ساده است: هر گاه قرار است یک نفر یک قطعه طلا به شهر دیگر بفرستد، ابتدا یک پیک به آن شهر میرود و یک گاوصندوق با قفلِ باز به شهر اول میآورد. کلیدِ قفل، نزد گیرنده میماند. حالا طلا را در صندوق قرار میدهد و قفل را میبندد و به مقصد میفرستد... حالا دیگر اینطور نیست که کلید هم ارسال شود که دست راهزنها بیفتد! به همین سادگی!
HTTPS ترکیبی از HTTP و SSL است. HTTP که همان پروتکل انتقال صفحات وب است. SSL مخفف Secure Socket Layer و به معنی «لایهی میانیِ امن» است. (سوکت یعنی چیزی که بین دو چیز قرار گیرد. وقتی شما به یک کابل شبکه سوکت میزنید، سوکت بین کابل و پریز قرار میگیرد).
SSL یک لایه امنیتی، بین مبدأ و مقصد است. الگوریتمی به نام RSA که یک الگوریتم نامتقارن به حساب میآید، دقیقاً به همان صورتی که در گذشته طلا را بین دو شهر منتقل میکردند، دادههای حساس و طلاگونهی کاربران را بین مبدأ و مقصد، به صورت امن منتقل میکند تا دست راهزنان نیفتد. (یکی از مهمترین هکها که در صورت عدم استفاده از HTTPS باعث دزدیده شدن دادههای شما میشود، هکی به نام Man-in-the-middle یا به فارسی، «حمله مرد میانی» است که در حقیقت همان راهزنی است که طلا را در وسط راه میدزدد)
HTTPS چگونه کار میکند؟
با توجه به داستان مهم بالا، وقتی شما وارد یک سایت مثل gmail.com که از پروتکل https استفاده میکند، میشوید، مرورگر شما ابتدا یک سر به سرور آن سایت میزند و یک گاوصندوق در-باز از سرور درخواست میکند: سرور جان! صاحبِ من میخواهد یک قطعه طلا به تو بفرستد، لطفاً یک گاوصندوقِ در-باز بفرست... منظور از گاوصندوقِ در-باز این است: سرور، با استفاده از الگوریتم RSA روال زیر را طی میکند:
و نهایتاً خروجی آن روال، دو کلید میشود: کلید عمومی یا Public Key و کلید خصوصی یا Private Key.
کلید عمومی همان گاوصندوقِ در-باز است که به مرورگر شما فرستاده میشود و اگر در راه، دست راهزن بیفتد هیچ کاربردی ندارد (و چه بسا اگر از آن استفاده کند، خودش را بیچاره کرده! چون دادههایش را در صندوقی گذاشته که کلیدش را ندارد) و کلید خصوصی همان کلید گاوصندوق است که پیش سرور میماند.
مرورگر شما دادهها را با کلید عمومی رمزنگاری میکند و به سرور میفرستد. اگر در راه، دادههای شما دست راهزن بیفتد، هیچ جای نگرانی نیست! چون یک مشت چرتوپرت را خواهد دید و تا وقتی کلید خصوصی وجود نداشته باشد، این چرتوپرتها به دادهی قابل فهم تبدیل نمیشوند.
(دقت کنید که منظور از راهزن، میتواند یک نفر مثل شخصی باشد که در کافینت به عنوان مسؤول نشسته است یا شاید یک جوان در ISP شما یا شاید حتی یک نفر در کمیته فیلترینگ و یا یک نفر در مرکز دادهی کشورهای همسایه که دادههای شما از آنجا عبور میکند تا به سایت مقصد برسد یا حتی یک نفر در شرکت گوگل!؟ هر کسی که دادههای شما از سیستم او عبور میکند میتواند راهزن به حساب آید)
وقتی دادههای رمزنگاری شده به سرور سایت رسید، سرور با کلید خصوصی که نزد خودش دارد آنها را رمزگشایی میکند و مثلاً نام کاربری و رمز عبور شما را از آن استخراج میکند و بررسی میکند که صحیح است یا خیر و اگر صحیح بود، حالا میخواهد ایمیلهای شما را به سیستم شما بفرستد... مجدداً این روال اما برعکسِ آن اتفاق میافتد. یعنی سرور به مرورگر شما میآید و درخواست یک گاوصندوق در-باز میکند و مرورگر شما با الگوریتم RSA کلیدهای عمومی و خصوصی را تولید میکند و کلید عمومی را به سرور میفرستد و ادامه ماجرا...
(مثال دیگری که میشود برای الگوریتم نامتقارن زد این است: شما وقتی نامهای را در صندوق پست میاندازید، در حقیقت آنرا با یک کلید عمومی رمزگذاری کردهاید. چه کسی میتواند آن نامه را از صندوق در بیاورد؟ فقط پستچی که کلید صندوق را دارد. یعنی دادهها به یک روش، رمزگذاری شدند اما به یک روش دیگر رمزگشایی میشوند)
خوب، این هم توضیحی نسبتاً مفصل در مورد الگوریتمهای نامتقارن.
و اما اگر خوب فکر کنید، شما با فهمیدن روش عملکرد https، چیزهای زیادی یاد گرفتید:
نکاتی در مورد HTTPS:
- چرا گاهی که وارد برخی سایتهای https میشویم، رنگ نوار آدرس قرمز میشود؟
خوب، برای اینکه هر کسی نیاید از https سوء استفاده کند، سازمانهای معتبری هستند که مجوز SSL سایتها را پس از دریافتِ مشخصات و ضمانتهای لازم، تأیید میکنند. مثلاً یکی از مهمترینهای این سازمانها، سازمان کومودو (Comodo) است. هر سایتی که بخواهد از https استفاده کند، اگر میخواهد کاربرها به او اعتماد کنند، بهتر است برود از این سازمانها یک مجوز SSL بخرد. آن سازمانها در ازای آن هزینه که مشتری به صورت سالیانه میپردازد، مشخصات کامل صاحب آن سایت را میپرسند که اگر سوء استفاده کرد، قابل ردگیری باشد و حالا وقتی کاربران وارد آن سایت https میشوند، مرورگشان ابتدا آدرس سایت را به این سازمانها میفرستد و از آنها میخواهد که بررسی کنند که آیا این سایت، یک مجوز معتبر خریده است و مشخصاتش را جایی ثبت کرده؟ اگر آن سایت در یکی از آن سازمانها ثبت نام کرده بود، رنگ نوار آدرس سبز میشود اما اگر آن سایت یک مجوز SSL غیررسمی استفاده کند و جایی ثبت نکند، مرورگر به رنگ قرمز درمیآید یا مثل فایرفاکس ابتدا یک صفحه حاوی هشدار نشان میدهد (که ای کاربر! این سایت مجوز SSLش معتبر نیست، نکند یوزرنیم و پسوردهایت را به این امید که https دارد پس امن است، در آن وارد کنی و بیچاره شوی!؟) و کاربر باید روی I Understand the risks (یعنی من ریسکها را میفهمم و میپذیرم) کلیک کند تا وارد سایت شود.
(مدتی بود که به خاطر تحریم، هیچ سازمانی مثل کومودو، مجوزهای SSL بانکهای دولتی ایران را نمیپذیرفت، بنابراین شما وارد سایتهای ایرانی هم که میشدید مرورگر هشدار میداد که این سایت ناامن است!!)
(مجوز SSL دقیقاً مثل نماد اعتماد الکترونیک است. اگر شما میخواهید یک فروشگاه داشته باشید، بهتر است یک نماد اعتماد بگیرید و گرفتن نماد اعتماد یعنی اینکه شما مشخصات کاملتان را به یک سازمان دادهاید و اگر کلاهبرداری کردید، از طریق آن سازمان قابل پیگیری است... و این اعتماد کاربران را در پی دارد. پس، نماد یا مجوز SSL گرفتن، اجباری نیست اما برای جلب اعتماد کاربران و مرورگرها، بهتر است که اخذ شود)
- پس حالا میفهمم چند وقت پیش که یک هکر ایرانی سایت کومودو را هک کرد، چرا در دنیا اینقدر صدا کرد!
بله، آن هکر شاید بدترین نوع بلا را سر تمام سایتهای امن دنیا آورد! تصور کنید، آن هکر نشسته بود جای قاضی! یعنی میتوانست خیلی راحت هر حکمی صادر کند! یعنی یک سایت جعلی مثل جیمیل راه بیندازد و شما وارد آن سایت شوید و ببینید که https است و مرورگر هم که میرود از کومودو درخواست تأیید هویت میکند، کومودو (یعنی همان هکر) جواب مثبت میدهد و همه چیز سبز و آرام است و کاربران اعتماد میکنند و یوزرنیم و پسوردشان را میدهند و ... تمام! به همین دلیل بود که جیمیل به کاربرانی که در آن بازه لاگین کرده بودند پیغام داد که پسوردهای خود را عوض کنید...
- پس حالا میفهمم چرا وقتی در گوگل که https است، یک چیز فیلتر شده را جستجو میکنم، فیلتر نیست!
بله، یکی دو سال پیش، گوگل بدترین کار را با کمیتههای فیلترینگ در کل دنیا کرد! پیش از این، بخش جستجوی گوگل، https نبود و این یعنی همه کمیتههای فیلترینگ (همان راهزنها... که البته قصد اهانت نیست، فقط میخواهم یاد آن داستان بیفتید، وگرنه شکی نیست که هر چیزی که به خصوص در کشورمان فیلتر میشود، حتماً به صلاح کاربران بوده و از این بابت از آنها ممنونیم) میفهمیدند که شما چه چیزی را جستجو میکنید و اگر آن کلمه غیراخلاقی یا سیاسی و ... بود، فیلتر میشد... اما جیمیل بخش جستجو را https کرد و دیگر هیچ کس در مسیر نمیتواند بفهمد که شما چه چیزی جستجو کردید و نتیجهی جستجوی شما چیست!! (گوگل از این شیطنتها زیاد میکند! حتی اخیراً در یک شیطنت آشکار، عکسهای بندانگشتی را نیز روی سرورهای خود آورده و این یعنی جنگ آشکار با فیلترینگها! هر چند که شاید بگوید من برای سریعتر و بهتر دیده شدن نتایجم آنها را به سایت خودم منتقل میکنم...)
--- مگر کمیته فیلترینگ امکان فیلتر کردن https را ندارد؟ چرا. میتواند مثل https سایت فیسبوک، هر https دیگری را فیلتر کند، اما مشکل این است که اگر بخواهد، باید کل گوگل را فیلتر کند و گوگل فعلاً فیلتر کردنی نیست! اگر فیلتر شود، همهی کارها میخوابد! بنابراین نیاز است که فعلاً تا مدتی، موتورهای جستجو و ایمیلهای وطنی پر و بال بگیرند و کمی سرعت https سایتهای خارجی کم شود که کاربران کمکم به سرویسهای وطنی روی بیاورند که اگر گوگل خواست بیشتر از این پایش را از گلیمش دراز کند، مثل برخی کشورها (فکر میکنم چین چنین کاری کرده)، کلاً آنرا فیلتر کنند و قال قضیه را بکنند!
- پس حالا میفهمم که چرا سایتهایی که از https استفاده میکنند، سرعتشان اینقدر پایین است!
احسنت! بله، استفاده از https یعنی حداقل دو رفت و برگشت بیشتر (و چندین رفت و برگشت هم که مرورگر باید به سازمانهای شبیه کومودو برود تا بفهمد مجوز آن سایت را کسی تأیید میکند یا خیر) و کلی رمزنگاری و رمزگشایی اضافهتر در مبدأ و مقصد! و اینکه اگر مثلاً سرور کومودو ضعیف باشد، تمام سایتهایی که https خود را از آنجا گرفتهاند هم کند میشوند و خلاصه کلی پردازش و روال بیشتر و این طبیعی است که سایتهای https کندتر باشند.
- پس حالا میفهمم که این فیلتر-شکنهای مبتنی بر https چطور عمل میکنند...
- و خیلی نکات دیگر که اگر کمی فکر کنید، متوجه خواهید شد.
یک نکته جانبی:
اکثر این الگوریتمهای رمزنگاری (مثل MD5 و SHA-1 که آقای شنون ابداع کرد و RSA که آقای شمیر ابداع کرد و...) را اسرائیلیها ابداع کردهاند! با توجه به اینکه اگر درسهای امنیت پیشرفته را پاس کرده باشید و با این الگورتیمها آشنا باشید میدانید که چقدر پیچیده هستند و گاهی من احساس میکنم به این راحتیها به ذهن یک انسان خطور نمیکند، من فکر میکنم این موضوع کمی بودار است! شما چطور؟
موفق باشید؛
حمید رضا نیرومند
مطلب مرتبط و پیشنهادی برای مطالعه که پیش از این منتشر کردهایم:
کتاب، ویدئو و مطالب مفید در مورد درس «امنیت و رمزنگاری»