ماجرای «تلگرام ضدفیلتر» و «تلگرام بلاک‌چین» که این روزها می‌شنویم

سلام دوستان!

یکی دو روزیه در فضای مجازی ملت دارن سر و دست می‌شکونن که «وای! تلگرام را پاول درووف آزاد کرد!!» و از این صحبتا! چیزهایی مثلِ این:

تلگرام ضدفیلتر شد!

ماجرا از این قرار بوده که اگه شما با یک VPN غیرقابل اعتماد (مثلاً از روسیه یا چین یا انگلیس یا برخی جاهای دارای قوانین ناقض حریم شخصی) به تلگرام وصل می‌شدید، یک علامت سپرِ توخالی کنار نام تلگرام پدیدار می‌شده و اگه بعدش هم اون VPN رو قطع می‌کردید تا یک مدتی هم همچنان وصل می‌بودید.

توی کانال‌های متفاوتی دیدم مدام ملت حرف از «بلاک‌چین» و «ضدفیلتر شدن» و چیزهای مشابهی می‌زنن! واقعیت اینه که هیچ کدوم از این خبرها نیست. ما خدماتی که ذاتا «ضدفیلتر باشه» نداریم! (این موضوع اساساً ربط داره به معماری اینترنت و شبکه‌های IP)

اما داستان نه زنجیرهٔ بلوکیه و نه حتی چیز جدیدی! جلوتر توضیح می‌دم.

بررسی ماجرا:

نوار بالای صفحهٔ اصلی تلگرام تنظیمات پراکسی در تلگرام

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

یک توضیح مهم و کوتاه

قبل از توضیحاتِ اصلی یک نکته رو می‌خوام متذکر شم: شما برای اتصال به شبکهٔ تلگرام نیاز به اتصال به یه سرور کنترلی و سرور وضعیت دارید که بهتون می‌گه برای اتصال به خود شبکه باید از چه سرورهایی استفاده کنید. چون تلگرام تعداد بسیار زیادی سرور در سراسر دنیا داره. اما خود اون سرور اولی رو چطوری باید پیدا کنیم؟ تلگرام در مستندات کارخواهش یه سری نام دامنه داده و گفته از نشانی اینترنتی اون دامنه‌ها استفاده کنیم. (یه dns resoloution ساده)

اما حالا بریم سراغ نشان سپر و ربطش به این داستان:

نشانکِ سپر

تلگرام قبلاً راجع به این علامت توضیح داده. اون علامتِ سپر سه‌تا حالت داره:

  • سپری که یه چیزی داره توش می‌چرخه
  • سپرِ تو خالی
  • سپرِ سفید (که معمولاً یه تیک یا نقطه هم توش داره)

سپری که یه چیزی داره توش می‌چرخه یعنی داره تلاش می‌کنه به سرور پراکسی متصل بشه.

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

اما سپرِ توخالی مال زمانیه که شما برای پیام‌های کنترلی به یه سرور واسط وصل می‌شید اما پیام‌های اصلی‌تون داره مستقیم به خود شبکهٔ تلگرام ارسال می‌شه.
در حقیقت وقتی دارید mtproto-proxy نصب و پیکربندی می‌کنید، می‌تونید تنظیمش کنید که بشه جزوی از شبکهٔ اتصالاتِ به شبکهٔ تلگرام یا یه پراکسیِ stand-alone باشه؟ تو حالت دوم که هیچ تفاوتی با یه پراکسیِ معمولی نداره غیر از این که پروتکل ارتباطی با پراکسی به جای این که مثلاً socks یا http باشه، mtproto هست. اما تو حالت اول سرور شما می‌شه یکی از گره‌های خصوصیِ شبکهٔ تلگرام و میاد نقشِ همون سرورِ ارائه‌دهندهٔ وضعیت و ارسال و دریافت پیام‌های کنترلی رو براتون ایفا می‌کنه. (همون سروری که در مستندات کارخواه تلگرام گفته شده باید برای پیدا کردن بقیهٔ سرورها و اطلاع از وضعیت شبکه و ارسال و دریافت پیام‌های کنترلی باهاش در ارتباط باشید و بالاتر هم بهش اشاره کردیم)
اما الآن این موضوع چه ربطی به بحث ما داره؟ تلگرام قبلا (فکر کنم حدودای پارسال) اومد و گفت چون برخی ISPها نا امن و غیرقابل اعتماد تشخیص داده شدن، میاد بعد از resolve اولیه یه سرور پراکسی از نوع اول رو بر می‌گردونه. (صرفاً برای پیام‌های کنترلی) و از اون جایی که خود mtproto و ارتباط با سرورهای اصلی تلگرام هم به خوبی رمزنگاری شده این موضوع هم باعث می‌شه تا دیگه اون ISP نتونه شنودتون کنه. همین‌طور برخی از ISPهای مطرح در زمینهٔ privacy هم برای این که معلوم نباشه شما دارید با تلگرام صحبت می‌کنید، میان و dns hijack می‌کنن و وقعی می‌خوایید آدرسِ سرور کنترلی تلگرام رو ریزالو کنید به جاش آدرس سرورهای خودشون رو می‌دن که باز هم به همین صورت پیکربندی شده. اما جای هیچ نگرانی‌ای وجود نداره! چرا؟ چون همون طور که بالاتر هم عرض کردم تمام پیام‌ها به سرورهای اصلی رمزنگاری می‌شن و سرورها هم توسط کلیدهای موجود در کارخواه شما (که به صورت hard code اون کلیدها رو pin کردن) احراز هویت می‌شن.

خب پس ماجرا اون سرور کنترلی بوده! با این حساب هم معلوم می‌شه چرا همچنان بعد از قطع ارتباط، همچنان تلگرام وصل می‌مونده و چرا بعد از یه مدتی هم اتصال دوباره قطع می‌شده. چون تلگرام یه سیاست server rotation داره و شما هر چند وقت یک باری باید دوباره بگردید دنبالِ اون سرور کنترلی تا پیداش کنید.

اگه از نشانک سپر خبری نباشه چی؟

اما چرا برخی از کاربرانی هم که اون علامت سپر رو ندیدن هم همچنان بعد از قطع کردن VPNشون همچنان متصل باقی می‌موندن تا یه مدت زمانی؟ جواب ساده است! شما نیاز نیست هر لحظه به سرور کنترلی پیام بدید. فقط زمان‌هایی که در شبکه یک اعلانِ عمومی اتفاق میوفته یا نیاز به تغییر تنظیمات یا پیکربندی حسابتون دارید با اون سرور کار دارین (همین طور در زمان‌هایی که باید پالسِ ضربان‌قلب بفرستید برای تلگرام تا تلگرام بدونه همچنان به شبکه وصلید و در اصطلاح آن‌لاینید و همین‌طور زمانی که اون مهلت زمانیِ server rotation منقضی بشه و مجبور باشید درخواست اتصال جدید کنید) پس شما تا یک مدتی همچنان به نشانی‌های سرورهای شبکهٔ تلگرام دسترسی دارید. ولی ممکنه بپرسید «مگه تلگرام تو ایران فیلتر نیست؟» واقعیت اینه که فقط سرورهای کنترلی و دامنه‌های تحت کنترل تلگرام فیلترن. سرورهای اصلیِ پیام‌رسانی در اقصی‌نقاط جهان و در ISPهای متفاوتی پخش هستن و همین موضوع باعث می‌شه تا فیلترکردنِ کل شبکهٔ تلگرام بسیار هزینه‌بر و در عمل ناممکن باشه. برای همین هم شما همچنان به شبکهٔ تلگرام متصل باقی می‌مونید.

پس این چیزی که این همه ملت دارن براش سر و دست می‌شکونن اولاً چیز جدیدی نیست ثانیاً حتی ربطی به به‌روزرسانیِ تلگرام هم نداره. :)