این مرورگر چگونه کار می‌کند؟

در این بخش کارکرد CENO و Ouinet را با مرور چندین سناریو توضیح خواهیم داد. واژگان و مفاهیم مهم مربوط به Ouinet معرفی خواهند شد (که با حروف برجسته بر آن‌ها تأکید می‌شود) و سپس برای کارآیی و جلوگیری از ابهام و سردرگمی به کار خواهند رفت.

دسترسی مستقیم به محتوا

مرورگر سنو نمونه‌ای از نرم‌افزاری است که از فناوری Ouinet برای بازیابی و به‌اشتراک‌گذاشتن محتوای وب استفاده می‌کند. ما نرم‌افزاری این‌چنین را یک سرویس‌گیرنده‌ی Ouinet می‌نامیم. وقتی شما از سرویس‌گیرنده‌تان (یعنی همان سنو) در راستای تلاش برای دسترسی به محتوای X استفاده می‌کنید، که روی یک سرور وب میزبانی می‌شود (که ما آن را سرور اصلی X می‌نامیم)، سرویس‌گیرنده‌ی شما سعی می‌کند تا با سرور اصلی روی اینترنت تماس بگیرد، چه مستقیم و چه از طریق ماشین دیگری که برای تماس با سرورهای وب به نیابت از دیگران تنظیم شده‌اند (یک به‌اصطلاح سرور پروکسی)، و سپس محتوای دلخواه را درخواست می‌کند. این هیچ فرقی با شیوه‌ی کار هر مرورگر معمولی وب ندارد.

نکته‌ی فنی: البته در واقع مشکل کوچکی وجود دارد. از آنجا که سرویس‌گیرنده به‌عنوان یک پروکسی HTTP روی دستگاه شما اجرا می‌شود، برای این‌که سرویس‌گیرنده بتواند درخواست‌های محتوای HTTPS را رمزگشایی و بر اساس آن‌ها عمل کند، نرم‌افزاری که از این سرویس‌گیرنده استفاده می‌کند (یعنی بخش مرورگر وب - مانند فایرفاکس در CENO) نیاز دارد تا یک گواهی خاص صادرشده از طرف خود سرویس‌گیرنده (که فقط روی دستگاه شما استفاده می‌شود) را بپذیرد. مرورگر سنو پیشاپیش این گواهی را برای کاربرد خصوصی‌اش فراهم می‌کند، پس نیازی نیست نگران باشید.

با این حال، این راه‌های مستقیم شاید در دسترس نباشند. برای مثال، شرکت ارائه‌دهنده‌ی خدمات اینترنتی (ISP) شما ممکن است دسترسی به سرور اصلی X یا پراکسی آن را بر اساس یک دستور دولتی مسدود کند (حتی اگر ترافیک دیگر هنوز مجاز باشد). همچون کاربر سرویس‌گیرنده‌ی بالا سمت چپ که در پایین به تصویر کشیده شده است، هردو تلاش برای دسترسی به محتوای X (سند کوچک نزدیک به سرور اصلی آن) برایتان ناکام خواهد ماند. شاید به گره «انژکتور» روی دیاگرام نیز دقت کنید. این را هم‌اینک توضیح خواهیم داد.

شکل: سرویس‌گیرنده نمی‌تواند مستقیماً به محتوا دسترسی داشته باشد

با یک مرورگر معمولی شانسی نخواهید داشت. اما، با Ouinet می‌توانید از سرویس‌گیرنده‌های دیگر کپی‌های آن‌ها از محتوای X را درخواست کنید، البته اگر آن‌ها پیشاپیش یک کپی از آن داشته باشند. بیایید ببینیم که Ouinet چگونه این درخواست را اجرا می‌کند.

جست‌وجوی محتوای مشترک

مجموعه‌ی تمام محتوای ذخیره‌شده از سوی سرویس‌گیرندگان Ouinet کش توزیع‌شده نامیده می‌شود، یعنی یک کش که در هیچ جای واحدی قرار ندارد. اما سرویس‌گیرنده‌ی شما چگونه می‌تواند بفهمد که کدام سرویس‌گیرندگان دیگر سازنده‌ی این کش، آن محتوای دلخواه را در اختیار دارند؟

در هر مرورگر وب، برای دسترسی به محتوای X مرورگر باید URL یا مکان‌یاب یک‌شکل آن را بشناسد، که همان نشانی در مستطیل آدرس مرورگر است، مثلاً https://example.com/foo/x. از آن URL، یک مرورگر معمولی پی خواهد برد که باید با استفاده از پروتکل HTTP (زبان به‌کاررفته برای مبادله‌ی منابع وب) روی SSL/TLS (یک لایه‌ی امنیتی روی TCP، قواعد اینترنت برای برنامه‌ها تا با یکدیگر مکالمه کنند) با یک سرور وب به اسم example.com تماس بگیرد و منبع /foo/x را درخواست کند.

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

نکته‌ی فنی: یک راه پیاده‌سازی نمایه استفاده از جدول درهم‌سازی توزیع‌شدهی بیت‌تورنت (DHT) برای دریافت نشانی‌های (IP و درگاه) سرویس‌گیرندگان با محتوا است. DHT از یک تابع درهم‌سازی رمزی برای محاسبه‌ی کلید جدول از URL محتوا و برخی پارامترهای دیگر مانند کلید انژکتور است (به پایین بنگرید)، طوری که چندین نمایه بتوانند همزمان وجود داشته باشند.

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

سرویس‌گیرنده‌هایی که محتوای خاصی را روی کش توزیع‌شده پیشنهاد می‌دهند به‌اصطلاح آن را دانه‌پاشی می‌کنند یا دانه‌پاش‌های آن‌ها هستند (این اصطلاح‌ها از دنیای اشتراک فایل همتا-به-همتا گرفته شده‌اند). اگر بخواهیم به سناریوی مثال‌مان بازگردیم، دو سرویس‌گیرنده هستند که محتوایی را دانه‌پاشی می‌کنند. متأسفانه، یکی از آن‌ها محتوای Y را و دیگری محتوای Z را دانه‌پاشی می‌کنند، بنابراین سرویس‌گیرنده‌ی شما هیچ مدخلی برای محتوای X در نمایه‌ی کش توزیع‌شده نخواهد یافت، همان‌طور که در پایین به تصویر کشیده شده است:

شکل: محتوا در کش توزیع‌شده پیدا نشد

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

اشتراکِ محتوای جدید

پروکسی‌های تقویت‌شده

درOuinet، انواع خاصی از سرورهای پروکسی به نام injectors وجود دارند که در بخش آزاد اینترنت قرار گرفته‌اند (دست‌کم امیدواریم چنین باشد) و سرسختانه می‌کوشند تا به‌رغم اقدامات مسدودگرانه در دسترس همگان باقی بمانند:

  • پیش از هرچیز، ارتباطات بین سرویس‌گیرنده‌ها و injectors رمزنگاری شده‌اند (با استفاده از SSL/TLS استاندارد مانند HTTPS) تا مانع شناسایی injectors توسط مهاجمان به‌وسیله‌ی شنود ترافیک وب شوند.در ضمن، گواهی‌های injectors در مرورگر CENO ذخیره می‌شوند، و به آن اجازه می‌دهند تا مهاجمانی را که سعی دارند خودشان را به‌جای injectors جا بزنند شناسایی کند.

  • اگر رمزنگاری کافی نبود، برای ارتباطات با injectors می‌توانند از تکنیک‌های مبهم‌سازی ویژه استفاده کنند (مثل I2P و PTها یا ترابری‌های سرپوش‌دار Tor) تا شناسایی را از آن هم دشوارتر کنند.

  • حتی اگر شرکت ارائه‌دهنده‌ی خدمات اینترنت شما یک injector را شناسایی کرد و دسترسی به آن را مسدود کرد، تعداد زیادی از آن‌ها وجود دارد و اهمیتی ندارد که سرویس‌گیرنده‌ی شما با کدام یک از آن‌ها روی اینترنت ارتباط برقرار می‌کند.

    • ممکن است بعضی یا تمام injectors مسدود شوند، اما در آن صورت مجموعه‌ی injectors می‌توانند در گذر زمان تغییر کنند (و injectors جدیدی به آن‌ها افزوده شوند).سرویس‌گیرنده‌ی شما لازم نیست نشانی‌های اینترنتی‌اش را از قبل بشناسد؛ در عوض، یک جست‌وجو را در انبوه injectors اجرا می‌کند (اصطلاح دیگری از اشتراک فایل P2P)، یک نمایه‌ی تک‌مدخلی توزیع‌شده همانند کش توزیع‌شده که نشانی‌های injectors اینک در دسترس را فراهم می‌کند.

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

    لطفاً توجه کنید که چون ارتباطات سرویس‌گیرنده-با-injector رمزگذاری‌شده‌اند، پل‌ها قادر به مشاهده‌ی اطلاعات در جریان بین آن‌ها نیستند.

یک injector می‌تواند مانند یک سرور پروکسی معمولی (گرچه بیش از حد در دسترس) رفتار کند، و این در حقیقت همان کاری است که سرویس‌گیرندگان Ouinet (از جمله مرورگر CENO) در حال حاضر انجام می‌دهند وقتی سعی می‌کنند روی یک پروکسی به محتوایی دسترسی پیدا کنند. در این مورد، انژکتور اطلاعات واقعی جاری بین سرویس‌گیرنده‌ی شما و سرور اصلی را نمی‌بیند (مگر آن که خودش یک ارتباط ساده و رمزگذاری‌نشده‌ی HTTP باشد).

اما ابزارهای دیگری وجود دارند که به شما اجازه می‌دهند تا به پروکسی‌ها در شرایط اختلال شدید شبکه دسترسی پیدا کنید، پس Ouinet injectors چه ویژگی خاصی دارند؟

اعتماد به محتوای اشتراکی

خب، نکته این است که یک injector تنها محتوا را از طرف سرویس‌گیرنده‌ی شما بازیابی نمی‌کند، بلکه همچنین به شما امکان می‌دهد تا آن محتوا را بعداً با دیگران نیز به اشتراک بگذارید، حتی وقتی که دیگر دسترسی به آن injector یا بیشتر بخش‌های اینترنت وجود نداشته نباشد.

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

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

نکته‌ی فنی: در واقع، injector بلوک‌هایی از داده‌های فردی را پس از ورودشان امضا می‌کند، طوری که حتی اگر ارتباط در میان فرایند بازیابی یک فایل بزرگ قطع شود، داده‌های دانلودشده می‌توانند همچنان از طرف سرویس‌گیرنده‌ای که آن‌ها را دریافت کرده به اشتراک گذاشته شوند.

injector‌های متفاوت می‌توانند کلیدهای متفاوت داشته باشند، پس شما می‌توانید انتخاب کنید که به چه injector‌هایی اعتماد کنید. این مسئله را این‌طور تصور کنید: شما می‌توانید به سندی با امضای یک دفتر اسناد رسمی از کشورتان اعتماد کنید، فارغ از این‌که چه‌کسی آن را به شما داده است (چه هم‌وطن و چه بیگانه)، در حالی که نیازی نیست سندی به امضای یک دفتر اسناد رسمی از کشوری دیگر را بپذیرید. مرورگر CENO پیشاپیش طوری تنظیم شده است که به مجموعه‌ای از injectorهای اجراشده از سوی شرکت eQualitie اعتماد کند.

نکته‌ی فنی: injectorها از یک جفت کلید عمومی/خصوصی برای ایجاد امضاهای Ed25519 استفاده می‌کنند؛ کلیدهای عمومی به قدر کافی کوچک هستند تا به آن‌ها اجازه دهند همراه با امضاها فرستاده شوند، و در قالب ۶۴ کاراکتر دستگاه اعداد پایه‌ی ۱۶ یا ۵۲ کاراکتر اعداد پایه‌ی ۳۲ رمزگذاری شوند. آن‌ها می‌توانند حتی روی تلفن ردوبدل شوند یا روی یک تکه کاغذ نوشته شوند.

تزریق محتوا

به یاد داشته باشید که در سناریوی مثال ما سرویس‌گیرنده‌ی شما پیش‌تر سعی کرده بود محتوای X را مستقیماً از سرور اصلی و از سایر سرویس‌گیرندگان بازیابد اما موفق نشده بود. سرویس‌گیرنده آخرین ورق وینت‌اش را بازی می‌کند و تلاش می‌کند تا با یک injector مورد اعتماد تماس بگیرد تا نسخه‌ای امضاشده از محتوایی را دریافت کند که بتواند با سایر سرویس‌گیرندگان به اشتراک گذاشته شود.

در شکل زیر می‌توانید یک نتیجه‌ی ممکن از آن عملیات را ببینید: سرویس‌گیرنده نخست سعی می‌کند مستقیماً با injector تماس بگیرد (برای مثال، با استفاده از یک نشانی اینترنتی که آن را از انبوه injectorها گرفته است)، بلکه به طرز غم‌انگیزی پیشاپیش توسط شرکت ارائه‌دهنده‌ی خدمات اینترنتی یا ISP شما مسدود شده است؛ متأسفانه، انبوه پل‌ها نشانی‌های اینترنتی را برای دو سرویس‌گیرنده‌ای نشان می‌دهد که هنوز قادر به دستیابی به یک injector هستند. سرویس‌گیرنده‌ی شما تونلی را از طریق این سرویس‌گیرندگان به روی injector می‌گشاید، بنابراینinjector درخواستِ محتوای X را از سرویس‌گیرنده‌ی شما می‌گیرد، و آن را از سرور اصلی‌اش طلب می‌کند.

شکل: سرویس‌گیرنده به injector دست می‌یابد

در همان حال که محتوای X از سوی injector دریافت می‌شود، این محتوا را با کلیدش امضا می‌کند، امضا را به محتوا می‌افزاید و آن را از طریق تونلی که از آن درآمده به سرویس‌گیرنده‌تان پس فرستاده می‌شود (مثلاً از طریق قرارگرفتن سرویس‌گیرنده فراتر از انسداد). همین که محتوا به سرویس‌گیرنده‌تان رسید، این سه کار را انجام می‌دهد:

  1. این، آن را به دست شما می‌رساند (در مورد CENO، این محتوا را روی مرورگر نشان می‌دهد).
  2. این محتوا را برای بذرپاشی بعدی به سرویس‌گیرندگان دیگر روی دستگاه‌تان ذخیره می‌کند. این محتوا برای مدت زمانی قابل‌تنظیم در آن‌جا باقی خواهد ماند، یا تا زمانی که شما تصمیم بگیرید تا تمام محتوای ذخیره‌شده را پاک کنید.
  3. این در نمایه‌ی کش توزیع‌شده اعلام می‌کند که یک نسخه از آن محتوا را در اختیار دارد، طوری که سایر سرویس‌گیرندگان بتوانند آن را بیابند.

کل عملیات مرکب بازیابی، امضا، ذخیره‌کردن و اعلام همان چیزی است که ما آن را تزریق محتوا می‌نامیم، همان‌طور که در شکل زیر نشان داده شده است.

شکل: سرویس‌گیرنده محتوای امضاشده را از injector دریافت می‌کند

مرورگری تحت مسدود بودن کامل

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

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

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

شکل: سرویس‌گیرنده محتوای امضاشده را از سرویس‌گیرنده می‌گیرد

اینک آن دستگاه دوم هم نسخه‌ای از محتوای X را در اختیار دارد، پس این را در نمایه‌ی کش توزیع‌شده اعلام می‌نماید، و بدین‌سان به یک بذرپاش بدل می‌گردد. اگر یک شخص سوم که به آن محتوا علاقه دارد از مرورگر CENO برای بازیابی‌اش استفاده کند، سنو اینک دو نشانی را برای این محتوا در نمایه خواهد دید: نشانی دستگاه شما و دستگاه کاربر دوم. اگر حجم آن محتوا سنگین باشد (مثل یک ویدئو)، این دستگاه سوم می‌تواند سعی کند تا نیمی از آن را از هر یک از دستگاه‌های دیگر بگیرد (که در پایین نشان داده شده است)، و بدین‌سان سرعت دانلود را افزایش دهد و از ترافیک مورد استفاده‌ی آن‌ها بکاهد.

شکل: سرویس‌گیرنده محتوای امضاشده را از سرویس‌گیرندگان متعدد دریافت می‌کند

در نهایت، وضعیت شاید حتی از این هم بدتر شود، و تمام زیرساخت‌های شبکه‌ی دولتی و تجاری ممکن است از کار بیفتند. در این مورد، Ouinet و CENO Browser نیز از اشتراک‌گذاری محتوای دستگاه-به-دستگاه بین دو سرویس‌گیرنده که در یک شبکه‌ی محلی واحد قرار دارند (مثلاً به یک نقطه‌ی دسترسی وای‌فای مشترک وصل‌اند) تا اندازه‌ای پشتیبانی می‌کنند، حتی اگر این شبکه هیچ دسترسی‌ای به بقیه‌ی شبکه‌ها نداشته باشد.