Як це працює?

У цьому розділі ми пояснимо роботу CENO та Ouinet, розглянувши кілька сценаріїв. Важливі для Ouinet термінологія та поняття будуть наведені (позначені виділеними літерами) та використані надалі для ефективності та уникнення плутанини.

Прямий доступ до вмісту

Браузер CENO є різновидом програми, що використовує технологію Ouinet для отримання та обміну мережевим вмістом. Ми називаємо таку програму клієнтом Ouinet. Коли Ви використовуєте свій клієнт (тобто CENO) для доступу до деякого вмісту X, розміщеного на веб-сервері (який ми називатимемо вихідним сервером X), Ваш клієнт намагається звʼязатися з вихідним сервером через Інтернет або безпосередньо, або через інший компʼютер, налаштований для звʼязку з веб-серверами від імені інших (так званий проксі -сервер), а потім запитує потрібний вміст. Це нічим не відрізняється від того, як працює будь-який звичайний веб-браузер.

Технічна примітка: Насправді є один невеликий нюанс. Оскільки клієнт діє як HTTP-проксі, запущений на Вашому пристрої, для того, щоб клієнт міг розшифровувати та виконувати запити HTTPS-вмісту, додаток, що використовує клієнт (тобто веб-браузер, наприклад, Firefox в CENO), має прийняти спеціальний сертифікат, випущений самим клієнтом (який використовується лише на пристрої). Браузер CENO вже подбав про встановлення такого сертифіката, тому Вам не потрібно хвилюватися.

Однак ці прямі шляхи можуть бути недоступними. Наприклад, Ваш постачальник Інтернет-послуг (ISP) може блокувати доступ до вихідного сервера X або проксі через державне розпорядження (навіть якщо інший трафік все ще дозволено). Як користувач лівого верхнього клієнта, зображеного нижче, обидві спроби отримати доступ до вмісту X (маленький документ біля вихідного сервера) для Вас будуть невдалими. Ви також можете помітити на діаграмі вузол «інʼєктор». Ми пояснимо це трохи згодом.

Малюнок: Клієнт не може отримати доступ до вмісту напряму

При використанні звичайного браузера Вам би не пощастило. Однак, за допомогою Ouinet Ви можете запросити в інших клієнтів їхні копії вмісту X, якщо ця копія вже є. Погляньмо, як Ouinet виконує цей запит.

Пошук спільного вмісту

Сукупність всього вмісту, що зберігається клієнтами Ouinet, називається розподіленим кешом, тобто сховищем, яке НЕ розташоване в одному місці. Але як Ваш клієнт розуміє, які інші клієнти, що створюють кеш, мають витребуваний вміст?

У будь-якому веб-браузері для доступу до вмісту X необхідно знати його Уніфікований локатор ресурсу (URL), тобто адресу в адресному рядку браузера, наприклад https://example.com/foo/x. З цього URL звичайний браузер зробить висновок, що він повинен звʼязатися з веб-сервером під назвою example.com, використовуючи протокол HTTP (мова, яка використовується для обміну веб-ресурсами) через SSL/TLS (рівень безпеки в TCP, правила Інтернету спілкування програм один з одним) і запросити ресурс /foo/x.

Ouinet шукає вміст інакше. Він використовує індекс, схожий на книжковий: у розподіленому індексі кешу Ouinet Ви шукаєте повну URL-адресу вмісту та отримуєте список клієнтів, у яких є його копія. Сам індекс є розподіленим, при чому клієнти самі повідомляють іншим, який саме вміст вони мають. Насправді, пропонується тільки підказка про кожну URL-адресу, тому той, хто стежить за трафіком Вашого пристрою, не може визначити, який вміст у Вас є. Однак той, хто шукає конкретний вміст, може орієнтуватися на підказку і знайти Ваш клієнт .

Технічна примітка: Один із способів реалізації індексу – використання розподіленої геш-таблиці протоколу BitTorrent (DHT) для отримання адрес (IP та порта) клієнтів із вмістом. DHT використовує криптографічну геш-функцію для обчислення ключа таблиці з URL вмісту та деяких інших параметрів як ключ інʼєктора (дивіться нижче), так що кілька індексів можуть співіснувати.

Крім того, браузер CENO не анонсує URL кожного ресурсу, який він роздає: з огляду на наявність на будь-якій сучасній сторінці десятків або сотень компонентів (зображень, таблиць стилів, скриптів...) це створило б великий трафік. Натомість ресурси групуються під URL-адресу сторінки, на якій вони розташовані, і оголошується лише URL-адреса. Це робиться за допомогою розширення браузера ad hoc (наведено нижче).

Клієнти, пропонують певний вміст через розподілений кеш, це називаються роздаванням вмісту або бути його роздавачами (ці терміни прийшли зі світу P2P-файлообміну). Повертаючись до нашого прикладу, можна сказати, що є два клієнти, які роздають певний вміст. На жаль, один із них викладає вміст Y, а інший — вміст Z, тому Ваш клієнт не знайде записів для вмісту X в індексі розподіленого кешу, як показано нижче:

Малюнок: Вміст не знайдений у розподіленому кеші

На щастя, Ouinet пропонує спосіб отримати такий вміст і, більш того, зробити його доступним для інших клієнтів у розподіленому кеші. Будь ласка, ознайомтесь із інструкцією.

Обмін новим вмістом

Проксі на стероїдах

В Ouinet існують спеціальні види проксі-серверів, які називаються інʼєкторами, що перебувають (будемо сподіватися) у вільній частині Інтернету і намагаються залишатися доступними, незважаючи на блокування:

  • По-перше, зʼєднання між клієнтами та інʼєкторами шифруються (з використанням стандартного SSL/TLS, як у HTTPS), щоб зловмисники не змогли ідентифікувати інʼєктори шляхом прослуховування мережевого трафіку.До речі, сертифікати інʼєкторів направляються в браузер CENO, що дозволяє йому виявляти зловмисників, які намагаються видати себе за інʼєкторів.

  • Якщо шифрування недостатньо, зʼєднання з інʼєкторами можуть використовувати спеціальні методи обфускації (наприклад, I2P і підключені транспорти Tor) для ускладнення ідентифікації.

  • Навіть якщо інʼєктор був ідентифікований і доступ до нього заблокував Ваш провайдер, працюють кілька інʼєкторів, і не має значення, з яким саме Ваш клієнт звʼязується через Інтернет.

    • Деякі, або навіть усі інʼєктори можуть бути заблоковані, але тоді група інʼєкторів може змінюватися з часом (з додаванням нових).Вашому клієнту не потрібно заздалегідь знати їхню Інтернет-адресу; натомість клієнт виконує пошук у рої інʼєкторів (ще один термін з P2P-файлообміну), розподіленому індексі, схожому на індекс розподіленого кешу, що видає адреси доступних інʼєкторів.

    • Нарешті, навіть якщо Ваш клієнт не може звʼязатися з інʼєктором, деякі інші клієнти можуть це зробити. Якщо клієнт здатний звʼязатися з інʼєктором й ідентифікує себе як доступний для інших клієнтів, він стає мостом і додає свою власну Інтернет-адресу в рій мостів. Це ще один розподілений індекс.Таким чином, Ваш клієнт може знайти таку адресу, підключитися до мосту і дати йому команду встановити зʼєднання з інʼєктором від його імені, створивши тунель між Вашим клієнтом і його інʼєктором. Потім між ними може бути встановлене зʼєднання всередині тунелю.

    Будь ласка, зверніть увагу, що оскільки зʼєднання між клієнтом та інʼєктором шифруються, мости не можуть бачити інформацію, що проходить між ними.

Інʼєктор може поводитися як звичайний проксі-сервер (але з підвищеною доступністю), і це саме те, що клієнти Ouinet (включно з браузером CENO) роблять в момент, коли намагаються отримати доступ до вмісту через проксі. У цьому випадку інʼєктор не буде бачити фактичну інформацію, що проходить між Вашим клієнтом і вихідним сервером (якщо це тільки не звичайне, незашифроване HTTP-зʼєднання).

Хоча існують інші інструменти, що дозволяють отримати доступ до проксі-серверів в умовах жорсткого мережевого втручання. Що ж такого особливого в інʼєкторах Ouinet?

Довіра до спільного вмісту

Справа в тому, що інʼєктор не просто отримує вміст від імені Вашого клієнта, він також дозволяє Вам ділитися цим вмістом з іншими й надалі, коли доступ до інʼєктора або більшої частини Інтернету вже закритий.

Звичайно, Ви можете завантажити сторінку зі свого браузера та скопіювати отримані файли для інших людей, що цілком нормально, якщо Ви знайомі між собою. Але що робити, якщо Ви отримали такі файли від невідомої людини? Як Ви можете бути впевнені в тому, що вміст дійсно прийшов із заявленого сайту, що вміст був отриманий у такий-то час, або що інформація з сайту не була підроблена?

Ми хочемо, щоб використання CENO та Ouinet масштабувалося і надавало якомога більше вмісту якомога більшій кількості людей. Тому ми хочемо, щоб Ви могли отримувати вміст від незнайомих Вам людей. Щоб Ви могли приймати такий вміст, Ouinet використовує підписування вмісту: Ваш клієнт налаштований на довіру до вмісту, підписаного за допомогою спеціального ключа, що належить інʼєкторам. Щоразу, коли клієнт каже інʼєктору отримати мережевий вміст, інʼєктор отримує його з вихідного сервера, використовує ключ для підпису та повертає підписаний вміст клієнту.

Технічна примітка: Фактично, інʼєктор підписує окремі блоки даних по мірі їх надходження, тому навіть якщо зʼєднання обривається на середині при отриманні великого файлу, завантажені дані все одно будуть доступні клієнту, який отримав ці дані.

У різних інʼєкторів можуть бути різні ключі, тому Ви можете обирати яким інʼєкторам довіряти. Уявіть це так: Ви можете довіряти документу, підписаному нотаріусом із Вашої країни, незалежно від того, хто Вам його видав (громадянин або іноземець), але Ви не зобовʼязані приймати документ, підписаний нотаріусом з іншої країни. Браузер CENO вже налаштований на довіру до набору інʼєкторів під керуванням eQualitie.

Технічна примітка: Інʼєктори використовують пару з відкритого та закритого ключів для створення підписів Ed25519; відкриті ключі досить малі, щоб їх можна було пересилати разом із підписами, та кодуються у вигляді 64 шістнадцяткових символів або 52 символів Base32. Ними можна навіть обмінятися телефоном або записати на аркуші паперу.

Інʼєкція вмісту

Памʼятайте, що в нашому випадку клієнт вже намагався отримати вміст X безпосередньо з вихідного сервера та інших клієнтів, але безуспішно. Клієнт розігрує свою останню карту Ouinet і намагається звʼязатися з довіреним інʼєктором, щоб отримати підписану копію вмісту, якою він може поділитися з іншими клієнтами.

На малюнку нижче показаний можливий результат цієї операції: клієнт спочатку намагається звʼязатися з інʼєктором безпосередньо (наприклад, використовуючи Інтернет-адресу, яку він отримав від «рою інʼєкторів»), але, на жаль, він вже заблокований Вашим провайдером; на щастя, рій мостів показує Інтернет-адреси двох інших клієнтів, які здатні звʼязатися з інʼєктором. Ваш клієнт відкриває тунель до інʼєктора через одного з цих клієнтів, тому інʼєктор отримує запит на вміст X від вашого клієнта та запитує його у вихідного сервера.

Малюнок: Клієнт звертається до інʼєктора

Коли інʼєктор отримує вміст X, він підписує його своїм ключем, додає підпис до вмісту і відправляє його назад вашому клієнту через тунель, яким він прийшов (скажімо, через клієнта, що перебуває за межами території блокування). Як тільки вміст досягає вашого клієнта, він робить три речі:

  1. Він передає його Вам (у випадку з CENO він показує вміст в браузері).
  2. Він зберігає вміст на Вашому пристрої для подальшої передачі іншим клієнтам. Він буде зберігатися там впродовж визначеного періоду часу (це можна налаштувати) або доти, доки Ви не вирішите очистити весь збережений вміст.
  3. Він оголошує в індексі розподіленого кеша, що має копію цього вмісту, щоб інші клієнти могли його знайти.

Уся сукупність операцій із вилучення, підписання, зберігання та оголошення є тим, що ми називаємо інʼєкцією вмісту, як це показано на малюнку нижче.

Малюнок: Клієнт отримує підписаний вміст від інʼєктора

Перегляд під час повного блокування

Будь ласка, зверніть увагу, що описана вище схема, як і раніше, вимагає, щоб існував шлях крізь блокування і до решти Інтернету. Але іноді цього шляху може не бути: візьміть до уваги повне міжнародне відключення, стихійні лиха або просто надмірне навантаження небагатьох наявних шляхів (з огляду на те, що всі намагаються скористатися ними). Саме тут і проявляється справжня потужність розподіленого кешу.

Уявимо, що після того, як ви витягли вміст X з інʼєктора, внаслідок стихійного лиха Ваш регіон опиняється ізольованим від решти світу. Виявляється, що вміст X стає особливо актуальним, оскільки він описує деякі способи, якими Ви можете допомогти Вашій спільноті в такій ситуації.

У цей момент інша людина, яка використовує браузер CENO, намагається отримати цей вміст. Доступ до вихідного сервера або чогось за межами Вашого регіону неможливий, тому CENO перевіряє індекс розподіленого кеша для цього вмісту і виявляє, що Ваш пристрій передає його. CENO отримує Вашу Інтернет-адресу з індексу, підключається до нього і запитує вміст, як це показано нижче.

Малюнок: Клієнт отримує підписаний вміст від клієнта

Тепер другий пристрій також має копію вмісту X, тому він оголошує про це в індексі розподіленого кешу, ставши тим, що роздає. Якщо третя особа, зацікавлена в цьому вмісті, використовує браузер CENO для його отримання, CENO тепер буде бачити дві адреси в індексі для вмісту: адресу Вашого пристрою та адресу другого користувача. Якщо вміст важкий (наприклад, відео), цей третій пристрій може спробувати отримати його половину з кожного з інших пристроїв (як показано нижче), тим самим прискорюючи завантаження і зменшуючи трафік, що використовується.

Малюнок: Клієнт отримує підписаний вміст від кількох клієнтів

Зрештою, ситуація може погіршитися, і всю комерційну та державну мережеву інфраструктуру відключають. У цьому випадку Ouinet та браузер CENO також підтримують обмін вмістом між двома клієнтами, що перебувають в одній локальній мережі (наприклад, підключені до однієї точки доступу Wi-Fi), навіть якщо ця мережа не має доступу до інших мереж.