تیم ضد سانسور در TunnelBear از به اشتراک گذاشتن برخی از کارهایی که ما برای مقابله با سانسور اینترنت در سراسر جهان انجام داده ایم هیجان زده است. طی چند ماه گذشته ، ما مشغول ایجاد پشتیبانی از پسوند TLS نشانگر سرور رمزگذاری شده (ESNI) در برنامه Android خود بوده ایم. در این پست بررسی خواهیم کرد که چرا ESNI یکی از م componentلفه های مهم حفظ حریم خصوصی اینترنت است ، چگونه آن را در برنامه Android خود قرار داده ایم و چگونه به کاربران ما که از سانسور رنج می برند می توانند به اینترنت باز دسترسی پیدا کنند.
مرز بعدی در حریم خصوصی آنلاین
ابتدا ، کمی درباره آنچه اتفاق می افتد وقتی روی دکمه اتصال در برنامه TunnelBear کلیک می کنید ، اتفاق می افتد.
برای ایجاد اتصال VPN به یکی از سرورهای VPN ما ، مشتری TunnelBear شما باید از آدرس IP سرور VPN. مشتری برای فهمیدن اینکه به کدام سرور باید متصل شود ، درخواست HTTPS را به api.tunnelbear.com ارسال می کند و لیستی از سرورها و آدرس IP آنها را درخواست می کند. بیشتر اوقات ، این کاملا خوب است. اما چه اتفاقی می افتد که api.tunnelbear.com در شبکه شما سانسور می شود؟
اکثر رژیم های سانسور هدف قرار می گیرند و فقط می خواهند محتوای خاصی را مسدود کنند در حالی که محتوای دیگری را که قابل قبول می دانند مجاز می دانند. برای کارکرد این نوع سیستم ، آنها باید قادر به تعیین نوع محتوای موجود در یک درخواست آنلاین باشند ، چیزی که با رمزگذاری بیشتر و بیشتر اینترنت توسط TLS رمزگذاری شده بسیار دشوارتر شده است. با TLS 1.3 ، تمام محتویات و بیشتر فراداده های هر درخواست رمزگذاری شده است ، اما هنوز برخی از زمینه ها بدون رمزگذاری باقی مانده اند. این قسمتهای رمزگذاری نشده را می توان توسط یک سانسور خوانده و سپس برای توجیه مسدود کردن درخواست استفاده کرد. یکی از این قسمتهای رمزگذاری نشده که معمولاً برای مسدود کردن استفاده می شود ، پسوند Server Name Indicator (SNI) است.
SNI چیست؟
بنابراین SNI چیست و اگر بتوان از آن برای تسهیل سانسور استفاده کرد ، چرا به آن نیاز داریم؟ [19659006] بسیاری از وب سایت ها و خدمات امروز در اینترنت در یک محیط مشترک مانند CloudFlare میزبانی می شوند. به جای اینکه سرورهای میزبان CloudFlare آدرس IP عمومی خود را داشته باشند ، از طریق تعداد کمتری از IP های مشترک متعلق به CloudFlare به سرورها دسترسی پیدا می شود ، سپس درخواست ها را از طریق شبکه خود به سرور مناسب هدایت می کند. به عبارت دیگر ، SNI به یک سرور اجازه می دهد تا چندین وب سایت HTTPS را میزبانی کند. همانطور که گفته شد ، یک قسمت SNI رمزگذاری نشده است و بنابراین تهدیدی برای سانسور است زیرا این امکان را برای سانسورگران فراهم می کند تا تاریخ آنلاین شما را ردیابی کنند. ابزاری برای رمزگذاری قسمت SNI به گونه ای که توسط سانسورگر یا شخص ثالث قابل خواندن نیست ، اما همچنان می تواند برای تسهیل میزبانی مشترک استفاده شود.
نحوه انجام این کار
ما می دانستیم که اجرای ESNI یک پروژه بزرگ ، بنابراین ما می خواستیم ابتدا آزمون مقیاس کوچکتر را انجام دهیم تا اثربخشی آن را بسنجیم. آزمایش ما شامل ارسال سه درخواست آزمایشی از برنامه Android ما در هر بار راه اندازی بود: یک درخواست استاندارد API بدون استفاده از روش های دور زدن سانسور ، یک درخواست با استفاده از روش های موجود برای دور زدن و یک درخواست با استفاده از ESNI. ما برای ایجاد درخواستهای ESNI از یک شاخه OpenSSL توسعه یافته توسط پروژه DEfO (توسعه ESNI برای OpenSSL) استفاده کردیم. ما برای هر مجموعه درخواست آزمایشی یک شناسه منحصر به فرد ایجاد کردیم ، بنابراین می توانستیم ببینیم کدام یک از مجموعه ها موفق به ورود به سرورهای ما می شوند و از آنجا مقایسه کردیم که هر روش نسبت به روش های دیگر م effectiveثر است.
این آزمایش یک آزمایش بود موفقیت و به ما نشان داد که برای بخش قابل توجهی از کاربران ، ESNI می تواند راهی مطمئن تر برای دسترسی به API ما فراهم کند.
این آزمون همچنین برخی موارد سازگاری دستگاه را با استفاده از چنگال DEfO OpenSSL برجسته کرد ، زیرا ما شاهد افزایش در میزان خرابی در دستگاه های خاص. هنگامی که تشخیص دادیم ESNI می تواند به تلاش های ضد سانسور ما کمک کند ، کد آزمون را حذف کردیم تا تأثیر آن بر روی کاربران خود به حداقل برسد.
با اثبات مفهوم ، ما به مرحله بعدی رفتیم: پشتیبانی از ESNI برای هر درخواست شبکه در برنامه ESNI هنوز در مراحل اولیه است و گروه ویژه مهندسی اینترنت (IETF) هنوز مشخصات خود را نهایی نکرده است ، بنابراین تعداد کمی از کتابخانه های شبکه از آن پشتیبانی می کنند. موزیلا پشتیبانی از آن را در کتابخانه خدمات امنیت شبکه (NSS) خود ایجاد کرده است ، اما از آنجا که NSS فقط با پروتکل های سطح پایین شبکه سروکار دارد ، مجبور بودیم برای استفاده در برنامه خود ، یک کتابخانه HTTP جداگانه ایجاد کنیم. در عوض ، ما تصمیم گرفتیم تا گزینه هایی را برای به روزرسانی کتابخانه HTTP فعلی خود ، OkHttp ، برای ارسال درخواست های ESNI بررسی کنیم. OkHttp از چندین ارائه دهنده امنیتی پشتیبانی می کند و پس از ارزیابی گزینه ها تصمیم گرفتیم کتابخانه های Conscrypt و BoringSSL گوگل را تغییر دهیم تا پشتیبانی از ESNI را اضافه کنیم.
ما تغییرات خود را به صورت منبع آزاد قرار داده ایم و امیدواریم که تغییرات ما در هر دو مورد پذیرفته شود
اهمیت تصویب در مقیاس گسترده
برای موثر بودن ESNI ، به تصویب گسترده نیاز دارد. در حالی که یک سانسور کننده نمی تواند ببیند که ESNI به چه سایتی متصل هستید ، اما همچنان می تواند بگوید که از یک قسمت SNI رمزگذاری شده استفاده می کنید. اگر TunnelBear و سایر ابزارهای ضد سانسور تنها برنامه هایی هستند که از ESNI استفاده می کنند ، برای یک سانسورگر آسان است تصور کند که هر ترافیکی با استفاده از ESNI قصد دور زدن سیستم آنها را دارد و باید مسدود شود.
متأسفانه ، این قبلاً در سرزمین اصلی چین ، جایی که سانسور کنندگان به طور فعال ترافیک ESNI را مسدود می کنند ، و نیاز بیشتر به تصویب بیشتر را در سایر کشورها تقویت می کنند.
برای این که در مقیاس وسیع کار کند ، بخش بزرگی از ترافیک اینترنتی باید از ESNI استفاده کنند تا ترافیک TunnelBear مخلوط شود. این همان روزهای ابتدایی HTTPS است ، جایی که بسیاری از شبکه هایی که می خواهند ترافیک شما را بخوانند به راحتی HTTPS را مسدود می کنند. این استراتژی با افزایش تصویب ، کمتر و کمتر عملی می شود و باعث می شود وب سایت های بیشتری به مردم اعتماد کنند. برای کمک به برنامه های دیگر که به راحتی پشتیبانی از ESNI را اضافه می کنند ، ما کار خود را با پشتیبانی گسترده ESNI به OkHttp اضافه می کنیم.
همچنین با فعال کردن ESNI در Firefox می توانید به سرعت بخشیدن کمک کنید (دستورالعمل های اینجا). هرچه تعداد افرادی که به طور منظم از ESNI استفاده می کنند ، در شکست سانسور و ایجاد اینترنت دموکراتیک برای همه موثرتر خواهد بود. ما امیدواریم که با اضافه کردن پشتیبانی از ESNI به BoringSSL بتوانیم سرعت ESNI را به Chromium نیز تسریع کنیم.
معنی این امر برای کاربران سانسور شده
ESNI به تنهایی مانع از همه سانسورها نخواهد شد ، اما این کار آسان تر برای کاربرانی که برای اتصال به TunnelBear سانسور می کنند. در آزمایشات خود ، ما دریافتیم که نتایج از نظر ISP متفاوت است اما ESNI معمولاً تقریباً یکسان یا کمی موثرتر از روشهای موجود ما برای فرار از سانسور است. مهمترین یافته این است که برای تقریباً 25٪ از کاربران سانسور شده ، ESNI در مواقعی که دیگر تکنیکهای ضد سانسور ما با شکست روبرو می شود ، کار می کند. سانسور ، اما با ترکیب ماهرانه ابزارهای مختلف متناسب با شرایط ، ما فکر می کنیم که می توانیم کاملاً نزدیک شویم. ESNI ابزار دیگری به ما می دهد که می توانیم از آن استفاده کنیم تا سانسور را شکست دهیم.
با احترام اولیه ،