Регистрация
Инструкции

Что такое Freenet? Безопасность сети Интернет с OnlineSim

  • 4 сент. 2023 г., 14:20
  • 10 минут

Тайный интернет, часть 3: что такое Freenet

Попасть в темный интернет нельзя по обычному запросу в браузере. Чтобы попасть в Darkweb, нужно настроить специальную сеть и прописать правильное название ресурса — по-другому контент не получить.

В статье рассказываем, через какие сети попадают в Darkweb и на какие ресурсы можно через них попасть.


В предыдущей статье:

  • Тайный интернет, часть 1: что такое Dark Web и зачем его используют

  • Тайный интернет, часть 2: как устроены .onion сайты 

  • Тайный интернет, часть 3: что такое Freenet ← вы здесь

  • Тайный интернет, часть 4: что такое I2P и как он работает 

  • Тайный интернет, часть 5: как попасть в Darkweb через Tor, I2P и Freenet


Что такое Freenet 

Freenet — это анонимная и децентрализованная одноранговая сеть, которая работает поверх обычного интернета. В ней нет привычных серверов и никто не хостит сайты. Каждый человек в сети — это и есть сервер, на котором хранится часть какой-то информации.

Подробнее о том, как устроены одноранговые сети, рассказывали в статье «Темный интернет, часть 1: что такое Dark Web и зачем его используют».

По сути, Freenet — это большое хранилище данных, в которое пользователи загружают свою информацию, а потом она становится доступной другим людям, у которых есть доступ к Freenet. 


Отличие традиционной сети с серверами от P2P-сети. В отличие от других одноранговых сетей, пользователи Freenet не контролируют то, что находится в их хранилище данных. Вместо этого файлы сохраняются или удаляются в зависимости от того, насколько они популярны. Это позволяет Freenet быть устойчивым к цензуре. Операции "удалить файл" нет.

Сеть Freenet запустили в 2000 году и использовали ее для распространения цензурированной информации по всему миру, включая Китай и страны Ближнего Востока.


Как работает Freenet

Каждый узел сети — это локальное хранилище информации, из которого пользователи получают данные для чтения и записи, а также динамическую таблицу маршрутизации. Таблица содержит адреса других узлов и специальные ключи, которые, как предполагается, хранятся в них. О ключах расскажем позже, сейчас — о модели работы.

По теории создателей, большинство участников системы должны запускать свои собственные узлы, чтобы обезопасить себя и других пользователей от случайного использования враждебного внешнего узла и увеличить емкость хранилища, доступную для сети в целом. Для этого люди должны предоставить пропускную способность своего компьютера и часть жесткого диска для работы системы и хранения какой-то информации.

Модель работы можно описать так: запросы на ключи передаются от узла к узлу через цепочку прокси-узлов, в которых каждый узел решает, на какой следующий узел отправить запрос. 

В зависимости от вида ключа, маршруты будут отличаться. Кроме того, со временем они будут меняться и для каждого файла, чтобы участник сети мог быстрее его загружать. На такую корректировку пути влияют алгоритмы маршрутизации и принцип работы сети.

Маршрутизацию описывают так: когда пользователь подключается к сети, загружает адреса различных узлов из сид-ноды — по сути, хранилища узлов. После этого пользователь создает запрос в сети и он отправляется на узлы в поисках информации.

При этом соединение между узлами зашифровано, а подключение к одному узлу от другого идет еще через несколько других узлов. Это анонимизирует отправителя запроса и сам запрос. 

А взаимодействие узлов можно сравнить с распределенной хеш-таблицей, которая нужна для поиска определенных пользовательских данных.

Хеш-таблица — специальная структура данных для хранения пар ключей и их значений. Фактически это таблица. И когда из нее нужно получить данные, на вход функции задается определенное значение, а в ответ выдается адрес нужной информации.

Пример хеш-таблицы

Есть и другой вариант получить адреса узлов — подключиться к сети знакомых людей. Чтобы подключиться к знакомым, каждый из них должен лично сказать идентификатор своего узла. Когда все обменяются идентификаторами и подключатся друг к другу, образуется сеть. Ее называют даркнетом фринета. Фактически, таким способом можно поднять собственный VPN между несколькими людьми.

Когда пользователь отправляет в сеть запрос с ключом, тот передается через цепочку случайных узлов до тех пор, пока узел с нужной информацией не будет найден. 

Поиск информации выглядит примерно так: сначала запрос идет к одному узлу. Если на этом узле нет нужной информации, он перенаправляет запрос на другой ближайший узел из своей хеш-таблицы. И так до тех пор, пока информация не будет найдена на одном из узлов сети.

Когда информация будет найдена, узел отправит ее к пользователю по цепочке из других узлов. При этом отправляющий узел не знает, кто конечный получатель информации. А транзитные узлы не знают, сколько узлов было в цепочке до них и не знают, каким узлом является следующий: конечным или таким же транзитным. Такой маршрут помогает анонимизировать пользователей и запрос.

Особенность распределения файлов в том, что, чем больше узлов в сети и чем больше каждый из них предоставляет места на своем диске, тем больше файлов будет в сети и тем дольше они будут там храниться. 

При этом у узлов со временем появится специализация. Алгоритм Freenet работает так, что узлы понимают, с какими ключами к какому узлу лучше идти. 

И, например, если у узла не будет файла, он может знать, на каком узле лучше искать информацию и отправит на него запрос. А когда придет ответ с файлом, информация пройдет через первый узел и он сохранит файл у себя.

Получается, что узел будет собирать у себя файлы определённого типа или, скорее, формата ключа. Это повышает вероятность того, что в будущем узел будет быстрее находить файл по подобным запросам.

​Примерно так работает запрос в Freenet​


Для схемы мы пренебрегли некоторыми параметрами. Один из них — сначала запрос идет к нескольким случайным узлам в поиске нужного файла. А те, в свою очередь, отправляют запросы к другим узлам из своих распределенных хеш-таблиц. Когда узел с нужным файлом найден — он отправляет информацию к пользователю по цепочке узлов. Теперь разберемся подробнее.

Мы находимся в узле «Start», а нам нужна информация из узла «Data». При этом узел «Start» не знает, у каких узлов есть нужная информация и как до них добраться. Поэтому узел «Start» связывается с ближайшим другим узлом A и спрашивает, есть ли у него нужная информация.

У узла А такой информации нет, зато он может разузнать ее у других узлов. Поэтому он отправляет запрос к случайному узлу, который знает. В нашем случае это узел В. По сути, он спрашивает у узла В, есть ли у него запрашиваемая информация.

Узел В ему отвечает, что у него этой информации нет и он не знает узлов, у которых он мог бы запросить нужные файлы. Поэтому узел А идет к следующему узлу — С. И спрашивает у узла, есть ли у него запрашиваемая информация.

Узел С говорит, что у него нет информации. Но он знает два узла, у которых информация может быть и перенаправляет запрос к ним.

Первый запрос идет на узел D, но у того нет нужных файлов и он перенаправляет запрос на другой узел, который может обладать информацией. В примере со схемой получается так, что узел D отправляет запрос на узел А, который изначально и просил помощи в поиске информации. Поэтому узел А отвечает узлу D, что сам ищет эту информацию.

Чтобы не получился цикл из узлов А → С → D, каждый узел хранит список других узлов, к которым он обращался в поиске какого-то запроса. И когда один узел хочет отправить запрос на другой, проверяет в своем списке, не обращался ли он к определенному узлу ранее.

Узел D отвечает узлу C, что больше у него нет знакомых узлов и искать информацию ему негде. Тогда узел С отправляет запрос на другой известный ему узел — «Data». Узел «Data» дает узлу С нужную информацию, а тот возвращает ее к узлу А, а узел А — к узлу «Start». В результате получилось, что нужный файл был найден и отправлен запрашивающему узлу по пути в обратном порядке.

В случае успешных запросов узел возвращает их с информацией на предыдущий узел, а сам файл сохраняет в своем собственном хранилище данных. Кроме того, он создает новую запись в своей таблице маршрутизации, связав фактический источник данных с запрошенным ключом.

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


Чтобы предотвратить бесконечные цепочки из транзитных узлов, каждый запрос в сети ограничивается по количеству переходов на следующий узел. Количество таких переходов задает пользователь при отправке запроса.

Если за определенное количество переходов найти нужный узел не получилось, запрос не выполняется. 

Также каждому узлу присваивают идентификационный номер, чтобы каждый новый переход от одного узла шел к новому. А каждый запрос получает псевдоуникальный идентификатор, чтобы узлы заранее могли отказаться от обработки запроса. Это нужно для того, чтобы не обрабатывать запрос, который они уже видели и на который у них нет ответа. Они сразу пересылают запрос в другую цепочку узлов.


Как распределены файлы в сети Freenet

В процессе загрузки файлы разбиваются на фрагменты и в случайном порядке сохраняются и шифруются на множестве других компьютеров в сети. Кроме того, каждый блок разбитого файла копируется на несколько компьютеров.

Поэтому, если один из компьютеров с каким-то фрагментом упадет или пропадет из сети — пользователь получит ее от другого компьютера.

А так распределены файлы в сети: каждый узел хранит кусок какой-то информации 


Когда другой человек хочет скачать файл — его куски обнаруживаются и собираются заново. Это похоже на Torrent: сеть соединяется со случайными людьми, у которых есть кусочки нужного файла и загружает его. Но есть и отличие: во Freenet нужный файл помогают найти одновременно несколько узлов. Образуется цепочка – от запрашиваемого узла → транзитного узла узлов с информацией. Когда нужная информация найдена, она возвращается по этой же цепочке обратно и сохраняется на узлах, через которые проходит.

Чем популярнее файл и чем больше людей хранит кусочки на своем ПК, тем быстрее он скачается. А если файл никому не интересен — со временем он пропадет с узлов — они заменят его более актуальной информацией. А скрытый файл никто не увидит, пока кто-то вновь не загрузит его целиком в сеть.


Какие ключи используются в Freenet

В сети Freenet вместо привычных нам URL-адресов используются криптографические ключи. По сути, чтобы загрузить сайт или другую информацию, в запросе нужно указать сам ключ. Роль такого ключа выполняет хеш-код файла или DSA-ключ.

Хэш — это функция, которая проводит математическую или логическую операцию над данными. В результате большой массив информации превращается в относительно короткую строку из символов и служит идентификатором данных. Например, если две картинки будут отличаться хотя бы одним пикселем — их хэш будет разным.

A DSA — криптографический алгоритм, который использует приватные и публичные ключи, чтобы создать электронную подпись — подтвердить авторство электронного документа. При этом задача приватного ключа — создать подпись, а публичного — проверить полученную подпись.

Например, во Freenet DSA-ключи связывает создателя сайта и сам ресурс. Поэтому никто другой без этих DSA-ключей не сможет внести изменения в структуру сайта. 

В этой статье рассматривать работу DSA-ключей не будем, так как это долгая и трудная тема.

Кроме того, без ключей нельзя менять или удалять файлы. Всего во Freenet есть четыре типа ключей:

  • CHK — хэш-ключи содержимого;

  • SSK — подписанные ключи;

  • USK — обновляемые ключи;

  • KSK — ключи, подписанные ключевым словом.

CHK — ключи, которые предназначены для файлов со статическим содержимым, например, .mp3 или PDF-документов. Они представляют собой хэши содержимого файла.

Например, типичный ключ CHK выглядит так:

CHK@SVbD9~[..]X5Brs,bA7qLN[..]Si6bbNQ,AAEA--8

SSK — предназначен для сайтов, которые со временем будут меняться. Например, для новостного сайта, на котором будут выходить пресс-релизы. Они работают так, что кто-то другой не сможет внести изменения в ваш сайт без ключей SSK.

Типичный ключ SSK выглядит так:

SSK@GB3wuHmt[..]o-eHK35w,c63EzO7u[..]3YDduXDs,AQABAAE/mysite-4


USK — нужен для того, что скрывать ранние версии сайта и показывать только актуальную. Работает это так: когда вы заходите на сайт, USK обращается к списку версий сайта и ищет самую новую — загружает ее.

Пример USK:

USK@GB3wuHmt[..]o-eHK35w,c63EzO7u[..]3YDduXDs,AQABAAE/mysite/5/

KSK — помогают сохранять страницы в сети Freenet. Адрес KSK выглядит так:

KSK@myFile.txt

Безопасность сети Freenet

Безопасность в сети Freenet создается несколькими методами:

  1. Дроблением файла на несколько кусков и его шифрованием на узлах. Благодаря этому никто не сможет полностью удалить файл из сети, ведь он хранится на нескольких узлах одновременно. 

  2. Ни один из узлов не видит пути запроса. Он знает только предыдущий узел и следующий, на который нужно передать информацию.

  3. Использование хеш-таблиц и приватных ключей, без которых нельзя отправить запрос и получить ответ. Поэтому хакеры не смогут направить трафик к себе, делая вид, что их узел содержит нужную информацию. Поддельный узел просто не пройдет проверку с приватным ключом и хеш-таблицей.

  4. Сокрытие истинного источника файла. Иногда случайный узел с какой-то информацией называет себя ее истинным источником, поэтому точно определить, на какой именно из узлов сети изначально был загружен файл — сложно.

В безопасности Freenet есть уязвимость — поддельные сид-ноды. Ведь никогда нельзя быть уверенным, что узлы, к которым подключается пользователь, не злонамеренные. А проверить узлы на надежность никак нельзя. Кроме того, посмотреть, что хранится во Freenet практически невозможно, потому что каждый файл скрыт и может быть разбит на части между разными компьютерами.

Еще одна проблема — потеря анонимности. Дело в том, что узлы, которые часто обрабатывают одни и те же запросы, могут сохраняться в хеш-таблице конкретного пользователя. Из-за этого в момент очередного запроса он обработается быстрее и компьютер человека быстро сохранит нужную информацию.

Поэтому, если правительство или хакеры получат доступ к вашему ПК, сделают какой-то запрос, а информация быстро сохранится на вашем компьютере — они поймут, что вы неоднократно просматривали скачанный файл.

Источники, которые помогли нам рассказать о Freenet