افزونه رمزگذاری سرور یا ESNI یک ویژگی ضروری برای خصوصی نگه داشتن اطلاعات کاربر در زمان استفاده از اینترنت است. هنگامی که شما از یک وب سایت بازدید میکنید SNI رمزگذاری شده باعث میشود اشخاص دیگر نتوانند از اطلاعات شما در حین فرایند تبادل اولیه TLS (TLS handshake)، جاسوسی کنند. همانطور که از نام آن پیداست (Encrypted server name indication)، ESNI این کار را بوسیله رمزگذاری نشانگر نام سرور (SNI) در زمان تبادل اولیه TLS انجام می دهد.
SNI به وب سرور می گوید که کدام گواهی TLS در زمان شروع اتصال بین مشتری و سرور نشان داده شود. SNI افزونه پروتکل TLS است که سرور را قادر می سازد چندین گواهی TLS را در یک IP آدرس میزبانی کند – وقتی چندین وبسایت روی یک سرور میزبانی میشوند و آدرس IP یکسانی دارند.
اگر SNI را مانند شماره یک ساختمان در آدرس پستی در نظر بگیرید: از آنجایی که در یک ساختمان چندین آپارتمان وجود دارد، هر آپارتمان باید شماره مخصوص به خود را داشته باشد تا قابل شناسایی باشد. به طور مشابه، اگرچه سرور با آدرس IP مشخص میشود، اما اولین پیغام از طرف کلاینت باید SNI را به سرور ارسال کند تا مشخص نماید که به کدام وب سایت (کدام آپارتمان) می خواهد دسترسی پیدا کند.
TLS چیست؟
Transport Layer Security یا به اختصار TLS یک پروتکل رمزگذاری است که ارتباطات را در اینترنت خصوصی و امن نگه میدارد. کاربرد TLS بیشتر برای رمزگذاری ارتباطات بین برنامه ها و سرورهای تحت وب می باشد، مثل، زمانی که مرورگری وب یک وب سایت را بارگذاری میکنند. همه وبسایتهایی که از TLS استفاده می کنند باید گواهی TLS داشته باشند. TLS گاهی اوقات SSL نیز نامیده می شود، SSL نام قدیمی این پروتکل است.
همه اتصالات TLS با بخشی به نام “تبادل اولیه (handshake) ” شروع می شود. مشابه وقتی که دو نفر در هنگام ملاقات در دنیای واقعی و تبادل نظر بین یکدیگر، با یکدیگر دست میدهند. تبادل اولیه TLS نیز مجموعه ای از ارتباطات مقدماتی بین یک دستگاه کلاینت و یک برنامه تحت وب (سرور) است. در طول تبادل اولیه TLS، دو دستگاه ارتباطی توافق میکنند که از کدام کلیدهای رمزگذاری در مراحل دیگر استفاده کنند. باوجود اینکه این عمل شامل مراحل زیادی است، تبادل اولیه TLS تنها چند میلی ثانیه طول می کشد.
نشانگر نام سرور (SNI) چگونه کار میکند؟
SNI بخشی کوچک اما حیاتی از اولین مرحله تبادل اطلاعات TLS است. اولین پیام در تبادل اولیه TLS “سلام مشتری” نامیده می شود. به عنوان بخشی از این پیام، مشتری درخواست میکند که گواهی TLS سرور را ببیند. و سرور باید در جواب، گواهی را به عنوان بخشی از پاسخ خود ارسال کند.
بسیاری از سرورها، میزبان بیش از یک وبسایت هستند و هر وبسایت ممکن است گواهی TLS مخصوص خود را داشته باشد، و این موضوع میتواند باعث بوجود آمدن مشکلاتی شود. اگر سرور اطلاعات نادرستی را به مشتری نشان دهد، مشتری نمی تواند در امنیت کامل به وب سایت مورد نظر متصل شود و در نتیجه خطای «اتصال شما خصوصی نیست» را مشاهده خواهد کرد.
SNI این مشکل را با نشان دادن اینکه مشتری میخواهد به کدام سرور دسترسی پیدا کند، حل می کند. لازم به ذکر است، رمزگذاری ها بعد از آنکه تبادل اولیه TLS با استفاده از SNI با موفقیت پایان یافت، انجام می شود و تا قبل از آن هیچ رمزگذاری ای صورت نمیگیرد. در نتیجه، SNI عادی، رمزگذاری نمیشود، زیرا پیام سلام مشتری، در تبادل اولیه TLS ارسال میشود. هر مهاجمی که بر اتصال بین کلاینت و سرور نظارت میکند، میتواند با خواندن SNI تبادل اولیه، دریابد که مشتری با کدام وبسایت ارتباط برقرار میکند، حتی اگر همه ارتباطات بعدی برای مهاجم غیرقابل دسترسی و کشف باشد. (مهاجمین می توانند از این اطلاعات به روش های مختلفی استفاده کنند – به عنوان مثال، با راه اندازی یک وب سایت فیشینگ کاربر را فریب دهند)
SNI رمزگذاری شده چگونه کار می کند؟
ESNI با رمزگذاری SNI پیام اول، یعنی سلام مشتری (و فقط این قسمت) SNI را مخفی نگه می دارد. این رمزگذاری تنها زمانی کارایی خواهد داشت که هر دو طرف ارتباط – کلاینت و سرور – کلید رمزگذاری و رمزگشایی اطلاعات را داشته باشند. همانطور که دو نفر تنها در صورتی میتوانند از یک قفل استفاده کنند که هر دو کلید آن قفل را داشته باشند. از آنجایی که ارسال پیام سلام مشتری، قبل از اینکه کلاینت و سرور با کلیدهای رمزگذاری TLS مذاکره کنند صورت میگیرد، کلید رمزگذاری ESNI باید به روش دیگری منتقل شود.
راه حل این مشکل رمزنگاری کلید عمومی است. در این روش سرور یک کلید عمومی را به رکورد DNS خود اضافه میکند، به طوری که وقتی مشتری سرور مورد نظر را جستجو میکند، کلید عمومی سرور را نیز پیدا میکند. این روش مثل گذاشتن کلید خانه در یک قفل در خارج از خانه است تا بازدیدکننده بتواند با خیال راحت وارد خانه شود. سپس مشتری می تواند از کلید عمومی برای رمزگذاری رکورد SNI خود استفاده کند به گونهای که فقط آن سرور خاص بتواند آن را رمزگشایی کند.
تصور کنید که آلیس می خواهد از وب سایت باب با آدرس، www.bobisawesome.example.com بازدید کند. باب مانند هر صاحب وبسایت دیگر، از TLS برای وبسایت خود استفاده میکند تا تمام ترافیک ورودی و خروجی از وبسایتش رمزگذاری شود. باب همچنین پروتکل ESNI را برای محافظت بیشتر از بازدیدکنندگان سایتش (کسانی مانند آلیس) پیاده سازی کرده است.
وقتی آلیس آدرس https://www.bobisawesome.example.com را در مرورگر لپ تاپ خود تایپ میکند، لپ تاپ او برای بارگیری وب سایت مراحل زیر را طی می کند:
۱- لپ تاپ او درخواستی را به سرور DNS ارسال می کند تا IP آدرس وب سایت را پیدا کند.
۲- سپس DNS در جواب به لپ تاپ آلیس می گوید که از کدام IP آدرس برای یافتن وب سایت باب استفاده کند، پاسخ DNS همچنین شامل کلید عمومی ESNI باب نیز میباشد.
۳- لپ تاپ آلیس یک پیام «سلام مشتری» را به IP آدرس مشخص شده ارسال می کند و با استفاده از کلید عمومی باب، بخش SNI پیام را رمزگذاری میکند.
۴- سرور باب، گواهی TLS باب را نشان می دهد.
۵- تبادل اولیه TLS ادامه می یابد و لپ تاپ آلیس www.bobisawesome.example.com را بارگیری می کند. هر مهاجمی که ممکن است شبکه را زیر نظر داشته باشد نمی تواند ببیند که آلیس از کدام وب سایت بازدید می کند*.
* عبارت آخر فقط در صورتی درست است که بخش DNS از یکی از پروتکل های DNSSEC و یا DNS از طریق HTTPS یا DNS از طریق TLS استفاده کرده باشد.
آیا ESNI به تنهایی میتواند مرور وب را خصوصی نگه دارد؟
اگرچه ESNI یک گام بزرگ به سمت حفظ حریم خصوصی و امنیت در وب است، اما سایر پروتکل ها و ویژگی های جدید نیز مهم هستند. آنچه مسلم است، اینترنت به گونه ای طراحی نشده که امنیت و حریم خصوصی را در نظر بگیرد و در نتیجه مراحل زیادی در روند بازدید از یک وب سایت وجود دارد که خصوصی نیستند. با این حال، پروتکلهای مختلف جدید به رمزگذاری و ایمن سازی هر مرحله، در برابر حمله مهاجمان کمک زیادی می کنند.
Domain Name System یا DNS ، آدرس های وبسایت را که به راحتی برای انسان قابل خواندن هستند مانند www.bobisawesome.example.com با IP آدرس معادل آن که از اعداد تشکیل شده اند مطابقت میدهد. این فرایند مانند جستجوی آدرس یک شخص در یک دفترچه راهنمای آدرس جامع است که همه از آن استفاده می کنند. قابل ذکر است، DNS معمولی رمزگذاری نشده است، به این معنی که هر کسی میتواند ببیند که مشتری کدام آدرس را جستجو میکند، و وانمود کند که خود او دفترچه راهنمای آدرس است. حتی با وجود ESNI، مهاجم میتواند ببیند که کاربران به چه رکوردهای DNS ی درخواست میفرستند و از این طریق بفهمد که کاربر از کدام وبسایتها بازدید میکنند.
به همین دلیل سه پروتکل DNS از طریق TLS، DNS از طریق HTTPS و DNSSEC با هدف از بین بردن این شکاف امنیتی مورد استفاده قرار میگیرند.
دو پروتکل DNS از طریق TLS و DNS از طریق HTTPS هر دو یک کار را انجام می دهند: یعنی هر دو روش از رمزگذاری درخواست های DNS از طریق رمزگذاری TLS استفاده میکنند. تفاوت اصلی آنها در این است که از چه لایه ای از شبکه و از کدام پورت شبکه استفاده می کنند. DNSSEC تایید میکند که رکوردهای DNS واقعی هستند و از یک سرور DNS قانونی میآیند، نه از مهاجمی که سعی در جعل DNS سرور دارد (مانند DNS cache poisoning attack).
رمزگذاری سلام مشتری (ECH) چیست؟
رمزگذاری سلام مشتری (ECH) یک افزونه پروتکل TLS است که ازSNI سلام مشتری، با استفاده از روش رمزگذاری محافظت می کند. برخلاف ESNI، ECH کل بخش سلام مشتری را رمزگذاری می کند. برای کسب اطلاعات بیشتر از این پست وبلاگ درباره ECH دیدن کنید.
آیا Cloudflare از ESNI پشتیبانی می کند؟
شبکه کلودفلر از سپتامبر ۲۰۱۸ از پروتکل ESNI پشتیبانی می کند و اولین شبکه بزرگی بود که از پروتکل ESNI پشتیبانی و نقش مهمی را در توسعه ESNI ایفا کرد. ESNI هنوز به عنوان یک RFC رسمی یا استاندارد اینترنتی منتشر نشده است، اما پیش نویس RFC در دست کار است.
شما می توانید مرورگر خود را از نظر امنیت، حریم خصوصی و استفاده از ESNI با استفاده از ابزار رایگان ESNI checker tool. بررسی کنید. با کلیک روی لینک ها درباره علت ایجاد SNI یا نحوه عملکرد تبادل اولیه TLS بیشتر بدانید.
منبع: https://www.cloudflare.com/en-gb/learning/ssl/what-is-encrypted-sni/