GeekAlerts

جایی برای گیک‌ها

·

بیت‌چت (bitchat) پیام رسان بدون نیاز به اینترنت و بر پایه بلوتوث

بیت‌چت (bitchat) پیام رسان بدون نیاز به اینترنت و بر پایه بلوتوث

جک دورسی، یکی از بنیان‌گذاران توییتر و مدیرعامل شرکت بلاک، یه نسخه آزمایشی از یه پیام‌رسان جدید به اسم «بیت‌چت» (bitchat) رو معرفی کرده. این برنامه یه پیام‌رسان غیرمتمرکز و نفر به نفره که کاملا روی بلوتوث کار می‌کنه و نیازی به اینترنت نداره. خود دورسی گفته که آخر هفته‌ش رو صرف یادگیری در مورد موضوعات زیر کرده و گفته این سیستم یه حس و حال شبیه به چت‌های قدیمی IRC داره.

«شبکه‌های مِش بلوتوث، رله‌ها، مدل‌های ذخیره و ارسال، و مدل‌های رمزنگاری پیام»

جک دورسی

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

ویژگی‌های اصلی بیت‌چت

بر اساس اسناد فنی و توضیحات پروژه، ویژگی‌های کلیدی این برنامه این‌ها هستن:

  • غیرمتمرکز: هیچ سرور مرکزی وجود نداره و به هیچ زیرساختی وابسته نیست.
  • پیام‌های موقتی (Ephemeral): پیام‌ها به صورت پیش‌فرض فقط توی حافظه دستگاه‌ها باقی می‌مونن و جایی ذخیره نمی‌شن.
  • رمزنگاری شده: همه پیام‌های خصوصی به صورت سرتاسری (End-to-End) رمزنگاری می‌شن.
  • انعطاف‌پذیر و مقاوم: به طور خودکار یه شبکه مِش (توری) می‌سازه و پیام‌ها رو بین دستگاه‌ها پخش می‌کنه تا به مقصد برسن.
  • خصوصی: برای استفاده ازش نیازی به شماره تلفن، ایمیل یا هیچ شناسه دائمی نیست.

معماری و نحوه کارکرد

شبکه مِش بلوتوث (Bluetooth Mesh Network)

بیت‌چت از یه پروتکل شبکه مِش سفارشی روی «بلوتوث کم‌مصرف» (BLE) استفاده می‌کنه. توی این شبکه، هر دستگاه همزمان هم نقش «مرکزی» (کلاینت) و هم نقش «جانبی» (سرور) رو بازی می‌کنه. اینطوری پیام‌ها می‌تونن از چند دستگاه عبور کنن (multi-hop) تا به دست گیرنده برسن.

  1. ساختار شبکه: دستگاه‌هایی که از نظر فیزیکی به هم نزدیک هستن (در محدوده حدود ۳۰ متری) یه خوشه محلی تشکیل می‌دن. اگه دو تا خوشه در محدوده همپوشانی هم قرار بگیرن، دستگاه‌های مشترک که بهشون «نود پل» (Bridge node) میگن، این دو خوشه رو به هم وصل می‌کنن. پیام‌ها از یه دستگاه به دستگاه دیگه می‌پرن تا به گیرنده‌های دورتر برسن.
  2. پیدا کردن و اتصال به همدیگه: هر دستگاه خودشو به عنوان یه دستگاه بلوتوث با یه شناسه مشخص (UUID) مربوط به بیت‌چت معرفی می‌کنه و همزمان دنبال بقیه دستگاه‌هایی می‌گرده که همین شناسه رو دارن. بعد به عنوان کلاینت به دستگاه‌های پیدا شده وصل می‌شه و همزمان به عنوان سرور هم به بقیه اجازه اتصال می‌ده.
  3. مدیریت اتصالات: شبکه به طور خودکار محدودیت‌های اتصال بلوتوث رو مدیریت می‌کنه، مصرف باتری رو با چرخه کاری (duty cycling) کنترل می‌کنه، لیست دستگاه‌های فعال رو نگه می‌داره و اگه اتصالی قطع بشه، دوباره برقرارش می‌کنه.

پروتکل رله پیام (Message Relay Protocol)

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

  • مسیریابی بر اساس TTL: هر پیام یه فیلد به اسم «زمان زندگی» یا TTL (Time-To-Live) داره. مقدار اولیه این فیلد روی ۷ تنظیم می‌شه. هر دستگاهی که پیام رو دریافت و بازپخش (رله) می‌کنه، یکی از این عدد کم می‌کنه. وقتی TTL به صفر برسه، پیام دیگه بازپخش نمی‌شه. برای جلوگیری از چرخیدن بی‌نهایت پیام‌ها توی شبکه، از شناسه‌های یکتای پیام استفاده می‌شه.
  • منطق تصمیم برای رله کردن: یه دستگاه فقط در صورتی یه بسته رو رله می‌کنه که TTL اون بیشتر از صفر باشه، قبلا اون بسته رو پردازش نکرده باشه، و خودش گیرنده نهایی پیام نباشه. پیام‌های عمومی (Broadcast) همیشه رله می‌شن.

مکانیزم ذخیره و ارسال (Store and Forward)

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

  • کش کردن پیام‌ها: وقتی گیرنده در دسترس نیست، پیام‌ها به طور خودکار توی حافظه دستگاه‌های میانی کش (ذخیره موقت) می‌شن. پیام‌ها برای کاربران عادی تا ۱۲ ساعت و برای کاربرانی که به عنوان «موردعلاقه» علامت‌گذاری شدن، به صورت نامحدود نگه داشته می‌شن.
  • تحویل موقع اتصال مجدد: به محض اینکه کاربر آفلاین دوباره به شبکه وصل بشه، پیام‌های کش شده براش ارسال می‌شن. شناسه‌های یکتای پیام جلوی ارسال چندباره پیام‌های تکراری رو می‌گیرن.

امنیت و رمزنگاری

بیت‌چت از چند لایه رمزنگاری برای امن کردن ارتباطات استفاده می‌کنه.

تبادل کلید

برای شروع یه چت امن، دستگاه‌ها با استفاده از پروتکل X25519 کلیدهای رمزنگاری رو با هم تبادل می‌کنن.

لایه‌های رمزنگاری

  • پیام‌های خصوصی: با استفاده از الگوریتم‌های X25519 و AES-256-GCM رمزنگاری می‌شن.
  • پیام‌های گروهی (اتاق‌ها): کلید رمزنگاری از روی پسورد اتاق با استفاده از الگوریتم Argon2id ساخته می‌شه.
  • امضای دیجیتال: برای اطمینان از صحت و دستکاری نشدن پیام‌ها، از امضای دیجیتال Ed25519 استفاده می‌شه.
  • امنیت پیشرو (Forward Secrecy): برای هر جلسه گفتگو، کلیدهای جدیدی ساخته می‌شه. این یعنی اگه کلید یه جلسه لو بره، پیام‌های جلسه‌های قبلی یا بعدی امن باقی می‌مونن.

ارتباطات مبتنی بر اتاق (Room-Based Communication)

کاربران می‌تونن توی اتاق‌های گفتگو با موضوعات مشخص با هم چت کنن.

ویژگی‌های اتاق

  • نام‌گذاری با هشتگ: اتاق‌ها با یه هشتگ مشخص می‌شن (مثلا #general).
  • حفاظت با پسورد: صاحب اتاق می‌تونه برای ورود به اتاق یه پسورد تعیین کنه.
  • اختیارات صاحب اتاق: صاحب اتاق می‌تونه مالکیت رو به کس دیگه‌ای منتقل کنه یا پسورد رو عوض کنه.
  • ذخیره پیام‌ها: صاحب اتاق می‌تونه قابلیتی رو فعال کنه که پیام‌های اتاق برای همه اعضا به صورت اجباری ذخیره بشه.
  • کشف غیرمتمرکز: اتاق‌ها از طریق استفاده کاربران کشف می‌شن و نیازی به لیست مرکزی ندارن.

پروتکل باینری و بهینه‌سازی‌ها

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

  • قطعه قطعه کردن پیام (Message Fragmentation): پیام‌های بزرگ به طور خودکار به قطعه‌های کوچیک‌تر (مثلا ۵۰۰ بایتی) تقسیم می‌شن تا روی شبکه بلوتوث به راحتی منتقل بشن. این قطعات یه شناسه مشترک دارن و در مقصد دوباره به هم وصل می‌شن.
  • فشرده‌سازی پیام: برای کاهش مصرف پهنای باند، پیام‌های متنی بزرگ‌تر از ۱۰۰ بایت با الگوریتم سریع LZ4 فشرده می‌شن. این سیستم هوشمنده و داده‌هایی که از قبل فشرده شدن رو دوباره فشرده نمی‌کنه.
  • عملکرد آگاه از باتری (Battery-Aware): برنامه بر اساس وضعیت باتری دستگاه، رفتارش رو تغییر می‌ده. حالت‌های مختلفی مثل «عملکرد کامل» (برای باتری بالای ۶۰ درصد)، «متعادل»، «صرفه‌جویی» (زیر ۳۰ درصد) و «اضطراری» (زیر ۱۰ درصد) وجود داره. توی این حالت‌ها، مواردی مثل فرکانس اسکن کردن دستگاه‌های اطراف، تعداد اتصالات همزمان و فاصله زمانی ارسال پیام‌ها تغییر می‌کنه.
  • فیلترهای بلوم بهینه (Optimized Bloom Filters): برای تشخیص سریع و بهینه پیام‌های تکراری و جلوگیری از پردازش دوباره اون‌ها، از این فیلترها استفاده می‌شه که حافظه کمی مصرف می‌کنن.

ویژگی‌های حریم خصوصی

برای افزایش حریم خصوصی، بیت‌چت چند مکانیزم خاص داره:

  • ترافیک پوششی (Cover Traffic): برنامه در فاصله‌های زمانی تصادفی (بین ۳۰ تا ۱۲۰ ثانیه) پیام‌های ساختگی و بی‌معنی تولید می‌کنه تا تحلیل ترافیک شبکه و تشخیص الگوهای رفتاری کاربران سخت بشه. این قابلیت وقتی باتری زیر ۲۰ درصد باشه غیرفعال می‌شه.
  • تصادفی‌سازی زمان‌بندی (Timing Randomization): به همه عملیات‌ها یه تاخیر تصادفی کوچیک (بین ۵۰ تا ۵۰۰ میلی‌ثانیه) اضافه می‌شه. این کار باعث می‌شه نشه از روی زمان‌بندی دقیق فعالیت‌های شبکه، کارهای کاربر رو تحلیل کرد.
  • شناسه‌های موقتی: برای استفاده از بیت‌چت نیازی به ثبت‌نام، شماره تلفن یا ایمیل نیست. شناسه‌های کاربری (Peer ID) در هر جلسه به صورت تصادفی تولید می‌شن. تنها شناسه تقریبا دائمی، اثر انگشت کلید عمومی کاربره که برای اضافه کردن به لیست دوستان استفاده می‌شه.
  • پاک کردن اضطراری (Emergency Wipe): با سه بار ضربه زدن سریع روی لوگوی برنامه، همه داده‌ها و پیام‌ها فورا از روی دستگاه پاک می‌شن.

نحوه راه‌اندازی و استفاده

بیت‌چت یه برنامه متن‌بازه که کدش روی گیت‌هاب (GitHub) موجوده. برای نصب و راه‌اندازی روی دستگاه‌های iOS و macOS، می‌شه از ابزارهایی مثل XcodeGen یا Swift Package Manager استفاده کرد. بعد از اجرا، کاربر یه نام مستعار برای خودش انتخاب می‌کنه و برنامه به طور خودکار به دستگاه‌های نزدیک وصل می‌شه.

دستورات اصلی:

رابط کاربری برنامه شبیه به چت‌های قدیمی IRC و مبتنی بر دستوره:

  • /j #room: برای پیوستن یا ساختن یه اتاق
  • /m @user message: برای ارسال پیام خصوصی به یه کاربر
  • /w: برای دیدن لیست کاربران آنلاین
  • /rooms: برای نمایش همه اتاق‌های کشف شده
  • /pass [password]: برای تعیین یا تغییر پسورد اتاق (فقط صاحب اتاق)
  • /transfer @user: برای انتقال مالکیت اتاق
  • /save: برای فعال/غیرفعال کردن ذخیره پیام‌ها در اتاق (فقط صاحب اتاق)

آینده پروژه

  • پشتیبانی از وای‌فای دایرکت (WiFi Direct): برنامه‌هایی برای اضافه کردن وای‌فای دایرکت به عنوان یه لایه انتقال جایگزین وجود داره. این کار پهنای باند رو تا ۱۰۰ برابر افزایش می‌ده (۲۵۰ مگابیت در ثانیه در مقابل ۱ تا ۳ مگابیت بلوتوث) و محدوده پوشش رو هم به ۱۰۰ تا ۲۰۰ متر می‌رسونه.
  • روش‌های انتقال دیگر: گزینه‌های دیگه‌ای مثل ارتباطات اولتراسونیک (از طریق هوا، برای شرایطی که امواج رادیویی مسدود شده) و لورا (LoRa) با برد ۲ تا ۱۵ کیلومتر (برای سناریوهای بحرانی مثل زلزله) هم در نظر گرفته شده.
  • پل ارتباطی با شبکه ناستر (Nostr): یه ایده جالب برای آینده، ایجاد یه پل ارتباطی اختیاری با پروتکل غیرمتمرکز ناستر هست. اینطوری می‌شه شبکه‌های مِش بیت‌چت که از نظر جغرافیایی از هم دور هستن رو به هم وصل کرد. این قابلیت به صورت پیش‌فرض غیرفعال خواهد بود و کاربران می‌تونن به انتخاب خودشون بعضی از اتاق‌ها رو به این شبکه متصل کنن، در حالی که رمزنگاری سرتاسری همچنان حفظ می‌شه.

کاربردها و اهمیت

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

  • تجمعات و اعتراضات
  • مناطق دچار بحران و بلایای طبیعی
  • کنفرانس‌ها و رویدادهای بزرگ که شبکه‌های موبایل شلوغ می‌شن
  • مکان‌هایی مثل هواپیما یا مناطق دورافتاده بدون پوشش اینترنت

در نهایت، بیت‌چت نشون می‌ده که پیام‌رسانی امن و خصوصی بدون نیاز به زیرساخت‌های مرکزی ممکنه. این پروژه که به صورت «مالکیت عمومی» (Public Domain) منتشر شده، هم یه ابزار کاربردیه و هم یه نمونه مرجع برای ساخت سیستم‌های ارتباطی غیرمتمرکز و حافظ حریم خصوصی.

منابع

دیدگاه‌ها

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *