Полное руководство по I2P и как его установить и использовать
Многие люди знакомы с Tor. Tor — это анонимная сеть, размещенная в общедоступном Интернете, которая позволяет ее пользователям анонимно получать доступ к Интернету и использовать внутренние веб-сайты Tor, которые находятся только в сети Tor. Эти типы анонимных сетей называются темными сетями, потому что они не доступны для поиска, как в общедоступном Интернете, и пользователям требуется специальное программное обеспечение для доступа к ним. Tor — самая известная темная сеть, но Invisible Internet Project (I2P), возможно, более анонимный, хотя и гораздо меньше.
СВЯЗАННЫЕ: Как получить доступ к темной сети
I2P против Tor против Freenet
Наиболее распространенным использованием Tor является анонимный доступ к общедоступному Интернету. Пользователи подключаются к сети Tor и проходят через нее в обычный интернет, называемый чистой сетью. Когда Tor работает, интернет-трафик направляется через сеть Tor таким образом, что трудно соотнести запрос, поступающий в сеть Tor, с тем же запросом, выходящим из сети. Кроме того, сервисы могут находиться внутри сети Tor, а это означает, что трафик никогда не выходит из Tor в чистую сеть. I2P имеет ограниченную поддержку для чистого сетевого доступа, но имеет ту же базовую функцию темного веба в том, что он поддерживает сайты, которые существуют внутри сети I2P.
СВЯЗАННЫЕ: полное руководство по Tor
Чеснок маршрутизация
Слово Tor происходит от его технологии маршрутизации под названием The Onion Router. Луковая маршрутизация включает в себя шифрование пакетов данных в слоях шифрования. Каждый узел дешифрует только тот уровень, который ему нужен, чтобы понять, куда отправить пакет дальше. Таким образом, говорят, что уровни шифрования напоминают слои лука. I2P не использует луковую маршрутизацию. Скорее, это использует маршрутизацию чеснока.

Маршрутизация чеснока — это вариация луковой маршрутизации, которая объединяет сообщения, как в луковице чеснока много гвоздик. Многослойный «луковый» метод Tor означает, что один пакет многократно шифруется, но это все еще одно сообщение. Это упрощает временные наблюдения — метод корреляции узла входа и выхода Tor. Чтобы снизить риск того, что одно сообщение будет использоваться наблюдателем таким образом, I2P объединяет сообщения в пакет, где каждое сообщение похоже на гвоздику, висящую на луковице чеснока. Другая важная особенность маршрутизации чеснока состоит в том, что оно является однонаправленным. Это означает, что для данных, отправляемых через I2P, требуется один путь, чтобы добраться до сайта назначения, и другой путь для отправки данных обратно запрашивающей стороне. Это усложняет наблюдение, поскольку невозможно узнать, по какому пути идет другая половина разговора. Маршрутизация Tor является двунаправленной, что означает, что трафик к месту назначения и от него проходит по Tor через один и тот же.
Eepsites
Сайт I2P называется eepsite, который аналогичен сервису Tor onion. Eepsite — это обычный веб-сайт, за исключением того, что он доступен только пользователям, подключенным к I2P. Eepsite является аналогом более известных сайтов с луком Tor.
Одним из применений Tor является создание службы onion, которая является веб-сайтом, доступным только при подключении к сети Tor. Этот тип использования Tor имеет еще большую анонимность, потому что трафик никогда не покидает сеть Tor, поэтому трудно даже увидеть трафик, не говоря уже о том, чтобы шпионить за ним.
Outproxies
I2P немного отличается от Tor, хотя у них обоих одна цель. Технически возможно настроить выходной узел I2P (называемый outproxy на языке I2P), но на практике I2P обычно не используется таким образом. I2P почти исключительно используется для доступа к сайтам eepsites, а не для анонимного доступа к общедоступному Интернету..
Freenet
Freenet — еще один даркнет на основе анонимности. В отличие от I2P или Tor, Freenet не предназначен для использования в качестве посредника для чистой сети, поэтому не существует такого понятия, как прокси-серверы или выходные узлы. Freenet в первую очередь занимается анонимным распространением и хранением контента по всему Freenet, который может быть извлечен другими пользователями Freenet даже после того, как узел публикации переходит в автономный режим. Внутренние сайты Freenet называются бесплатными, что является синонимом луковых сайтов Tor и сайтов E2P. Как и другие темные сети, Freenet шифрует данные при передаче и в состоянии покоя и направляет трафик через произвольное количество узлов, чтобы скрыть источник. Ни один узел Freenet не знает, является ли узел, на который он пересылает данные, конечным пунктом назначения или просто другим узлом на этом пути. После получения запроса каждый узел проверяет свой локальный кэш контента, чтобы узнать, есть ли у него запрошенный контент. Если это не так, он отправляет запрос своему следующему соседнему узлу. Если у него есть контент, узел отправляет его обратно по тому же пути, и узлы на этом пути будут кэшировать этот контент для ускорения будущих запросов..
Установка клиента I2P
Проект IP2 имеет приложения для Windows, macOS, Linux и Android. Единственное заметное исключение — iOS.
Чтобы начать, скачайте версию клиента I2P, которая соответствует вашей операционной системе, с этой страницы.

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

Выберите опцию Windows Service, если вы хотите, чтобы I2P работал все время, начиная с запуска Windows. Если вы хотите легко включать и выключать I2P по мере необходимости, оставьте этот флажок пустым.

Остальная часть установки очень проста. Если вы оставили настройки по умолчанию одни во время установки, вы увидите группу I2P в меню «Пуск». Выберите один из параметров запуска I2P, чтобы запустить его, а затем щелкните запись консоли маршрутизатора I2P, чтобы просмотреть и настроить маршрутизатор I2P..

Использование I2P
Консоль маршрутизатора I2P — это место, где можно контролировать все, что касается использования I2P. Приложение маршрутизатора работает в фоновом режиме, и вы будете взаимодействовать с ним через веб-браузер по адресу 127.0.0.1:7657. Обратите внимание, что только то, что маршрутизатор работает, не означает, что ваши приложения используют его. Первое, что вы, вероятно, захотите сделать, — это настроить ваш браузер на использование I2P. Если вы этого не сделали, ваш браузер не сможет разрешить веб-сайты и отобразит какую-то ошибку разрешения DNS, подобную этой, из Internet Explorer..

Лекарство от этого заключается в том, чтобы сообщить браузеру использовать I2P-прокси, предоставляемый маршрутизатором. На домашней странице маршрутизатора указано: «Также вы можете настроить свой браузер на использование прокси-сервера I2P для доступа к сайтам. Просто введите 127.0.0.1 (или localhost) порт 4444 в качестве http-прокси в настройках вашего браузера. Не используйте SOCKS для этого ». Он содержит инструкции о том, как настроить прокси для большинства браузеров на странице I2P clearnet здесь..
Браузеры, такие как Internet Explorer и Firefox, имеют свои собственные настройки интернет-соединения. В рамках этих настроек можно настроить браузер на использование прокси-сервера I2P через порт 4444 вашего компьютера. Например, в Internet Explorer путь — «Настройки». -> настройки интернета -> Вкладка «Подключения» -> Кнопка LAN Settings, чтобы попасть сюда:

Если вы правильно настроили прокси, вы сможете просматривать сайты, такие как форум разработчиков I2P по адресу http: //zzz.i2p (сайт)

Для возобновления работы в Интернете вам необходимо удалить эти настройки прокси. Вся эта повторяющаяся конфигурация может быть болезненной, и гораздо проще справиться с ней, используя прокси-плагин, такой как FoxyProxy. FoxyProxy может автоматически использовать I2P-прокси для сайтов и обычный интернет для всего остального с помощью трех простых шагов.
Добавьте плагин FoxyProxy
FoxyProxy доступен для Chrome и Firefox. Имейте в виду, что любой прокси-плагин обязательно увидит весь ваш интернет-трафик, поэтому вам нужно доверять ему.
Добавьте прокси I2P на порт 4444 locahost

Добавьте шаблон URL, чтобы FoxyProxy использовал этот параметр I2P только для веб-сайтов.

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

Использование I2P для доступа к веб-сайтам
Если вы не используете метод FoxyProxy, вы заметите, что после активации настроек прокси вы потеряете соединение с чистой сетью. Это связано с тем, что I2P по умолчанию не предоставляет прокси-серверы. На языке I2P outproxy — это узел I2P, который подключается к чистой сети и пропускает внутренний трафик I2P в обычный Интернет. На языке Tor это называется выходным узлом. I2P является гораздо более замкнутой сетью и обычно не используется в качестве прокси для чистой сети. В I2P FAQ есть что сказать по поводу прокси:
Как получить доступ к IRC, BitTorrent или другим службам в обычном Интернете?
Если для службы, к которой вы хотите подключиться, не настроен прокси-сервер, это невозможно. На данный момент работает только три типа прокси: HTTP, HTTPS и электронная почта. Обратите внимание, что в настоящее время нет общедоступных прокси-серверов SOCKS. Если этот тип обслуживания требуется, попробуйте Tor.
В настоящее время в репозитории подключаемых модулей IP2 перечислены три подключаемых модуля прокси-сервера (eepsite). Два больше не существуют, а оставшийся один указывает на форум разработчиков I2P, содержащий инструкции о том, как взломать тестовую установку с 2016 года. Мне не удалось заставить это работать, так что, похоже, не существует общедоступного способа использования I2P в качестве анонимного интернет-прокси в это время.
При просмотре темных веб-сайтов I2P иногда вы не можете загрузить сайт, и вместо этого вам предоставляется страница, подобная этой.

Это означает, что ваш I2P-маршрутизатор не знает, где находится этот сайт, но это не обязательно означает, что сайт не существует; другие маршрутизаторы могут знать, где это. Чтобы узнать, нажмите одну или все ссылки перехода, представленные. Эти ссылки будут использовать хорошо информированные маршрутизаторы I2P, чтобы узнать, можно ли найти сайт. Во многих случаях это работает.
Использование I2P для отправки и получения электронной почты
В настоящее время существует два распространенных способа отправки и получения электронной почты между I2P и обычными адресами электронной почты в Интернете. SusiMail поставляется в комплекте с вашим маршрутизатором I2P, а также имеется плагин под названием I2P Bote. Оба могут быть использованы для отправки электронной почты в I2P, но в настоящее время только SusiMail можно использовать для отправки электронной почты на обычные интернет-адреса и с них..
Чтобы начать работу с SusiMail, щелкните значок «Электронная почта» на странице вашего маршрутизатора I2P..

SusiMail предложит вам создать учетную запись на сайте Почтальона I2P, прежде чем вы сможете ее использовать. Оттуда вы узнаете довольно стандартный интерфейс веб-почты и сможете отправлять и получать электронную почту как на адреса I2P, так и на обычные адреса электронной почты в Интернете..
Примечание. Письма I2P могут буквально часами приходить на обычные интернет-адреса. Это на самом деле является преимуществом, поскольку затрудняет наблюдения за временной корреляцией Если известный пользователь I2P отправляет электронное письмо, а затем наблюдается выход из ее дома, и через несколько секунд приходит электронное письмо с адреса электронной почты I2P, что может поставить под угрозу ее анонимность. Наличие электронных писем гораздо позже устраняет эту возможность корреляции.
Когда я настроил свою учетную запись электронной почты I2P, она приняла форму [email protected] Письма, отправленные в сети I2P, сохранят этот адрес электронной почты. Однако, поскольку домен верхнего уровня .i2p не разрешен в общедоступном Интернете, он модифицируется для писем, отправляемых за пределы сети I2P, для использования домена верхнего уровня .i2pmail.org. Поскольку .org разрешим, электронные письма в Интернете отправляются обратно на этот путь, а затем пересылаются через I2P в мой конкретный экземпляр SusiMail..
В отличие от SusiMail, I2P Bote рассматривает создание учетной записи как вариант и не требует учетной записи для отправки анонимной электронной почты. Если вы хотите получать электронную почту, вам необходимо пройти процесс создания учетной записи..
Проект I2P Bote работает над внедрением Интернета <-> Почтовый шлюз I2P, но в настоящее время он не работает.

Настройка I2P Bote требует немного больше работы. Шаги установки можно найти на странице установки I2PBote (eepsite).
- Перейдите к форме установки плагина в консоли маршрутизатора: http://127.0.0.1:7657/configclients#plugin
- Вставьте в URL http: //bote.i2p/i2pbote.su3
- Нажмите Установить плагин.
- После установки щелкните SecureMail на боковой панели или домашней странице routerconsole или перейдите по адресу http://127.0.0.1:7657/i2pbote/.
Процесс установки может занять много времени, а индикатор выполнения не позволяет вам узнать, что происходит. Примерно через пять минут я обновил домашнюю страницу маршрутизатора I2P и был награжден новым значком Bote SecureMail..

В настоящей темной моде нет необходимости создавать какие-либо учетные записи или идентификаторы для отправки электронной почты с помощью Bote. Вы можете нажать значок + в правом нижнем углу экрана, ввести электронное письмо и отправить его с полной анонимностью. Однако вы не сможете получать электронную почту, поскольку вы полностью анонимны. Если вы хотите получать электронную почту, вам нужно будет создать личность.

Как настроить свой собственный сайт (сайт I2P)
Ваш I2P роутер поставляется с готовым к работе сайтом eeepsite, вам просто нужно добавить контент.
Чтобы просмотреть инструкции по правильной настройке, нажмите кнопку веб-сервера или вставьте ее в адресную строку маршрутизатора I2P: http://127.0.0.1:7658/help/

Добавление функциональности к вашей консоли I2P
I2P поставляется с базовым набором инструментов, который большинство темных веб-пользователей ищут прямо в комплекте. На главной странице маршрутизатора I2P есть инструменты для IRC, передачи файлов, электронной почты и веб-серверов, а также многих других. Эта функциональность может быть расширена с помощью инфраструктуры плагинов I2P, хотя очень мало плагинов доступно.
Чтобы управлять плагинами, перейдите на страницу configplugins http://127.0.0.1:7657/configplugins, и вы увидите варианты установки плагинов двумя способами. Если у вас есть плагин в файлах xpi2p и su3, вы можете загрузить его на свой роутер. Другой способ — предоставить URL-адрес одному из этих типов файлов..
Хранилище подключаемых модулей I2P находится на веб-сайте I2P (веб-сайт). Весьма вероятно, что злоумышленник или наблюдатель получат много пользы от обмана пользователя I2P при установке плагина наблюдения, поэтому не забудьте получить плагины из этого официального репозитория, а не из ненадежных сторонних источников..
Поиск контента по I2P
В отличие от прозрачной паутины, темные паутины не совсем способствуют продвижению своих сайтов. Google для «темной сети» не существует, и даже если она была, многие темные веб-сайты работают вверх и вниз из-за их неортодоксальных настроек хостинга. Сказав это, есть несколько мест, где вы можете найти услуги I2P, если у вас нет конкретного места назначения
Планета I2P — новейший в мире I2P
Планета I2P (eepsite) — это совокупный сайт активности вокруг сети I2P. Он в основном содержит торрент-ссылки, но также содержит некоторые новости, касающиеся заявок на поддержку проекта и новостей приложений..
I2P FAQ
Есть много неправильных представлений о I2P; что это такое и почему это не Tor. Многие из этих вопросов рассматриваются на странице часто задаваемых вопросов I2P (eepsite).
Отслеживание ошибок I2P
Думаешь, ты нашел ошибку? Хотите знать, если кто-нибудь знает об этом, или есть патч для этого? I2P bug tracker — это место, где можно найти эту информацию. Проекты сообщества, такие как I2P, нуждаются в свежем взгляде и различных системах, чтобы обнаружить ошибки, которые могут существовать в программном обеспечении. Внесите свой вклад и сообщите о новых ошибках, обнаруженных на I2P Bug Tracker (eepsite).
Заключительные слова об использовании I2P и анонимности
I2P не является заменой для Tor. Хотя у Tor, безусловно, есть проблемы с безопасностью, он также гораздо более зрелый, и его расширенные функциональные возможности делают его бесконечно более полезным для большинства людей. Если вы намерены добиться анонимности в Интернете с помощью прокси-сервера, то Tor — лучший выбор. I2P только неохотно включает в себя возможность подключения к чистой сети вообще, и его способность делать это ненадежна. Тем не менее, если вы хотите запустить полноценный темный веб-сайт, который остается как можно более скрытым, I2P может быть лучшим выбором. Если предполагаемая пользовательская база уже использует I2P или технически подкована для его настройки, маршрутизация чеснока в I2P обеспечивает лучшую защиту от тактики, которую можно использовать в Tor для нарушения анонимности..
Общее введение в I2P
Агрессивный рынок готов заработать на всем, что возможно продать, но популярные предложения в сфере приватной коммуникации являются фикцией и ложью. Это происходит по простым причинам: во-первых, бизнес придумали не меценаты, а корыстные люди; во-вторых, любой предприниматель даже при самых лучших побуждениях подотчетен третьим лицам и в спорных ситуациях свои интересы всегда ставит выше интересов клиента.
Сейчас пойдет речь про I2P — некоммерческую сингулярность сетевой приватности и анонимности, где никто кроме вас не знает куда и кто передает вашу информацию. Сеть I2P (расшифровывается как «Invisible Internet Project», Проект невидимого интернета) — это оверлейная децентрализованная одноранговая сеть. Оверлейная — значит работает поверх других сетей, например, обычного интернета; децентрализованная — распределенная, не имеющая единой точки отказа: упадет один узел, полсети, или во всей сети останется 3 пользователя — I2P все равно будет функционировать. I2P является одноранговой сетью, так как все участники имеют равные права и возможности: каждый пользователь скрытой сети строит свои туннели через других участников и сам является потенциальным звеном в цепочке другого пользователя. При этом естественная сетевая активность никак не компрометирует абонента перед домашним провайдером или участниками скрытой сети.

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

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

Жители общаются через окна — это обмен информацией по открытым каналам. Обратите внимание на наличие «уполномоченного» соседа (домик №2), который все слышит, и, как мы знаем, записывает. Проведем аналогию шифрования информации с тайным языком: даже если соседи говорят на незнакомом для шпиона языке, как минимум он знает, что определенные дома поддерживают контакт. В случае обычного интернета провайдер хранит информацию о сайтах, которые вы посещаете. Ему не обязательно знать, что именно вы писали на оппозиционном форуме. Один факт посещения подобного ресурса говорит о многом. У двух домов (№4 и №5) имеются связанные подземные туннели — они обмениваются сообщениями без крика на улицу. Шпион не видит, что эти люди общаются.
Важный термин, который понадобится в дальнейшем — это DPI (deep packet inspection). На нашей иллюстрации этим понятием можно охарактеризовать навык шпиона понимать тайное значение услышанных слов. Например, люди будут кричать в окно слово «труба» перед тем, как начать общаться через скрытые туннели. Шпион быстро это поймет и станет рыскать возле домов, откуда донеслось кодовое слово. Это будет называться выявлением при помощи технологии DPI.
Для представления скрытой одноранговой сети, где все узлы имеют равные права и возможности, сделаем важное замечание: каждый дом может передавать сообщение только ближайшему соседу, прося отправить сообщение дальше. Так получается иллюстрация peer-to-peer сети, в которой каждый узел одновременно выступает получателем, отправителем и транзитным узлом. Очевидны несколько проблем: анонимность отправителя, сохранность и секретность данных на транзитных узлах, а также наличие злонамеренных участников сети, которые могут пытаться анализировать проходящие через них сообщения для определения личности анонимных абонентов. Сеть I2P изначально была спроектирована с учетом предположения, что все промежуточные узлы являются скомпрометированными или злонамеренными. Туннели I2P являются однонаправленными, т.е. входящий трафик идет по одной цепочке узлов, а исходящий — по другой. Помимо этого все передаваемые сетевые зашифрованные сообщения имеют свойство накладываться друг на друга, сливаясь в информационный шум, что делает бессмысленным попытки прослушать и проанализировать проходящий поток данных.

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

Симметричные алгоритмы более просты и за счет этого работают в разы быстрее: в них для шифрования и расшифровки информации используется один ключ. Слабое место такого подхода — это передача ключа от одного пользователя другому. Если злоумышленник сможет перехватить ключ, он получит доступ к секретной информации. Фактором безопасности в симметричном шифровании (в частности AES — распространенном алгоритме) является вектор инициализации (IV). Вектор инициализации — критически важная составляющая, имитирующая первый блок информации. Так как при AES-шифровании каждый блок из 16 байт влияет на следующий блок, целостность информации критически важна.

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

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

Общие принципы работы I2P
В сети I2P все пакеты зашифровываются на стороне отправителя и расшифровываются только на стороне получателя, при этом никто из промежуточных участников обмена не имеет возможности перехватить исходные данные. По этой причине нет необходимости беспокоиться о том, чтобы прикладные программы обеспечивали шифрование своего трафика. Например, сайту в I2P не нужно использовать TLS-шифрование, чтобы вводимые данные пользователя не были перехвачены, как это делается в обычном интернете, т.е. нет нужды использовать протокол HTTPS.
Также, никто из участников сети не знает, кто на самом деле отправитель и кто получатель, так как статус узла, от которого пришел пакет неизвестен, он может быть отправителем или промежуточным, а следующий, которому нужно этот пакет отправить, может являться получателем или таким же промежуточным узлом. Узнать конечные точки отправителя и получателя промежуточный узел никак не может, так же как не может узнать, что произошло с только что переданным следующему узлу пакетом: обработал ли тот его, или передал куда-то дальше.
В I2P используется концепция роутеров и конечных точек: Роутер — это обезличенный участник сети: ни клиент, ни сервер — просто ничем не отличающийся от других транзитный узел. Устанавливая прямое соединение между собой, роутеры видят реальные IP-адреса друг друга, но эта информация не говорит о чем-либо, кроме вероятного использования сети I2P абонентом на другом конце. Если злоумышленник решит выявить всех участников сети, он наткнется на различные погрешности вроде прокси-серверов, и в любом случае не будет иметь фактических данных о какой-либо внутрисетевой активности выявленных пользователей. Устанавливая клиент сети I2P на свое устройство, вы фактически устанавливаете I2P-роутер — обезличенное звено сети.
Конечная точка наоборот является осмысленной сущностью — либо сервером, либо клиентом, но ее реальное местоположение неизвестно. В качестве адресов конечных точек сети I2P используются идентификаторы, выведенные из открытого ключа подписи: хеш-сумма дает уникальную строку фиксированной длины, в конце которой для удобочитаемости подставляется псевдодоменная зона «.b32.i2p» — так получается привычный внутрисетевой адрес. Для использования человекочитаемых доменов в зоне «.i2p», например acetone.i2p, существуют бесплатные регистраторы, достаточно незамысловатые в использовании. Привязка домена происходит к полному адресу.

Конечная точка создается администратором роутера, при этом роутер продолжает свою «серую» работу, никому не сообщая об адресах, размещающихся на нем. Роутер, получая информацию, которая предназначается для локального ресурса, не передает ее дальше, но никто из участников сети не может это узнать: роутер-получатель ведет себя также, как обычный транзитный узел.
Транзитные узлы являются частью цепочки серверов, образующих туннель. Туннель можно представить в виде трубы, проходящей через несколько комнат: вода поступает с одного конца и выходит с другого, при этом наблюдатели в промежуточных комнатах видят трубу, могут слышать шум потока внутри, но не знают, что именно по ней течет. В I2P все роутеры по умолчанию могут принимать участие в построении чужих туннелей, но никто не знает что, куда и кому по этим туннелям передается. Создавая точку назначения, пользователь сам определяет длину входящих и исходящих туннелей, а также их количество. Эта информация остается известной только для создателя туннеля: промежуточные звенья ничего не знают о других транзитных узлах и о их общем количестве.

На иллюстрации пустые кружочки — это роутеры. Только на нашей схеме эти кружки находятся рядом, фактически же это компьютеры по всему земному шару. Исходящие туннели пользователя обозначаются коричневым цветом, а входные — синим. Владелец выходного туннеля ничего не знает о входящем туннеле точки назначения, кроме ее конца, через который он посылает информацию запрашиваемому ресурсу.
По умолчанию длина туннелей составляет 3 узла, но в зависимости от потребностей пользователя может составлять 1 транзитный узел или целых 8, и даже 0, тогда будет происходить прямое подключение к туннелю второй стороны. Как видим, администратор конечного ресурса имеет входной туннель в 4 узла. Получив запрос, веб-ресурс отсылает ответ во входной туннель пользователя через свой выходной туннель, т.е. по абсолютно другому пути. Смотря на схему, можно представить насколько сложно пользователю определить реальное местоположение собеседника. Учитывая, что каждые 10 минут происходит смена существующего туннеля на новый с новыми цифровыми подписями и ключами шифрования, деанонимизация кого-либо вовсе кажется фантастикой.

Важная сущность сети I2P — это флудфилы: специальные роутеры, собирающие информацию о сети и обменивающиеся ей друг с другом. Флудфилом может быть любой желающий, задав соответствующий параметр в конфигурационном файле роутера. Все серверные конечные точки сети (т.е. точки, к которым ожидается подключение) автоматически публикуют на флудфилах информацию о себе, которая в совокупности называется лизсетом.
Лизсет включат в себя полный адрес конечной точки, ключи шифрования и список входящих туннелей. Обращаясь к какому-либо адресу в I2P, вы автоматически запрашиваете у случайного флудфила лизсет этого адреса. Если флудфил не знает запрошенный адрес, он сообщает адреса других флудфилов и поиск продолжается. Флудфил является роутером (а не конечной точкой) и принимает подключения напрямую, т.е. не имеет своих входных туннелей. Однако конечные точки обращаются к нему исключительно через анонимные цепочки, тем самым скрывая местоположение публикуемых ресурсов и тех, кто хочет к ним обратиться.
Так как каждая конечная точка имеет в среднем по три входных туннеля, которые меняются каждые 10 минут, обращение к флудфилам происходит лавинообразное, хоть и с небольшим потоком данных. Благодаря этому в сети всегда происходит хаотичное движение служебной информации, образующее «белый шум».
Помимо поиска лизсетов, белый шум генерируется зондированием сети: каждый роутер с небольшой периодичностью опрашивает случайный флудфил, получая от него в ответ три новых роутера (таким образом увеличивая собственный рисунок сети и находя новые флудфилы). Главным источником сетевого шума на роутере является транзитный трафик: он создает большую сетевую активность вне зависимости от конечных точек, расположенных на роутере. Также, будучи транзитным звеном, роутер подмешивает к трафику чужих туннелей полезную нагрузку — трафик своих скрытых сервисов. Чем больше транзитного трафика на роутере, тем абсолютнее секретность его конечных точек: какие-либо действия на скрытом ресурсе, даже DDoS-атаку, нельзя сопоставить с сетевой активностью конкретно взятого сервера. Активный узел сети имеет в своей базе в среднем 5000 активных роутеров и принимает сотни, а то и тысячи абсолютно случайных транзитных подключений. Как говорится: попробуй проанализируй.
Отдельно отметим механизм выбора флудфила пользователем. Это важный вопрос, которому при разработке было уделено надлежащее внимание. Так как любой из флудфилов может содержать злонамеренный пользователь, стояла задача сделать его попытки анализа и прочих недобросовестных действий не применимыми к конкретному человеку. Флудфил для запроса выбирается следующим образом: берется целевой адрес и сегодняшняя дата. Из этой информации выводится хеш SHA256 — получаются данные той же длины, что и обычный адрес. Затем осуществляется поиск флудфила в локальной базе роутера: используется тот, который при операции «ИСКЛЮЧАЮЩЕЕ ИЛИ» с блоком «целевой адрес + дата» даст наименьшее число. Подобный подход делает выбор узла для служебных запросов непредсказуемым и ежедневно изменяющимся для каждого адреса. В рамках этого материала упоминается «случайный флудфил», однако знайте, что кроется за этими словами.

Недавно мы упомянули DPI — исследование сетевых пакетов с целью выявления типа передаваемой информации. Упомянули не зря, потому что вы должны знать об этой технологии, а также о том, что весь трафик I2P устойчив перед анализом. Трафик сети зашифрован с самого низа, начиная с транспортных протоколов. В I2P используются: NTCP2, как крипто-аналог TCP, и SSU, как крипто-аналог UDP. I2P-роутер принимает сетевой трафик прикладных программ, обращающихся в скрытую сеть, и оборачивает привычные протоколы в их зашифрованные аналоги. После обработки в сетевых пакетах невозможно выявить что-либо вразумительное, потому что шифруется все, в том числе заголовки и размер. Размер пакетов скрывается паддингом, т.е. заполнением пакетов случайными данными до определенного размера. Информация о настоящем размере сетевого пакета передается в нем же в зашифрованном виде. При расшифровке на конечном устройстве примешанный «мусор» просто отбрасывается. Таким образом «белый шум» сети, т.е. практически бессмысленная для человека информация смешивается с пользовательской информацией и со стороны абсолютно от нее неотличима.

Описанная организация сети избавляет от потребности использования IP-адресов во внутрисетевой маршрутизации и позволяет всем ресурсам оставаться анонимными, так как никто не знает что располагается на том или ином роутере: просто ли выходной прокси обычного пользователя или веб-ресурс мирового масштаба.
Дополняя и закрепляя все сказанное, подробно опишем процесс от первого запуска роутера до открытия веб-страницы. При первом запуске роутер не имеет каких-либо данных о сети, поэтому происходит обращение к случайному ресид-серверу, который отдает пользователю свою базу известных роутеров. Ресиды держат энтузиасты, их список имеется в свободном доступе. По сути дела, информация от ресида представляет собой zip-архив папки netDb, в которой каждый роутер хранит информацию о сети. Так как передача данных происходит через обычный интернет, во избежание подмены по пути, архивы подписываются цифровым ключом. Публичные ключи всех актуальных ресидов содержатся в самом I2P-роутере. Если по каким-то причинам мы не хотим обращаться к публичным ресид-серверам, можно использовать уже имеющиеся базы сети, например, с других наших роутеров. Обращение к ресиду не происходит, если в папке netDb имеется не менее 25 роутеров. После подключения к нескольким актуальным участникам начинается автоматическое непрерывное расширение рисунка сети.
Построение туннелей
Для создания туннелей, обеспечивающих исчерпывающий уровень приватности, в I2P используется так называемое «чесночное шифрование». «Чеснок» I2P представляет блок информации, включающий несколько «чесночин» по 528 байт. «Чесночины» закладываются в случайном порядке, поэтому их последовательность не несет какой-либо информации. Каждый получатель «чеснока» опознает свой «зубчик» по первым 16 байтам, которые являются частью хеша его адреса. После того, как нужный «зубчик чеснока» найден, содержащиеся в нем инструкции расшифровываются ключом роутера.
Согласно инструкций, весь чеснок может быть передан следующему узлу, где порядок действий повторится. При построении исходящего туннеля, в инструкции последнего получателя предписывается сообщить создателю туннеля о завершении построения цепочки. Так как все туннели однонаправленны, ему сообщается входной туннель. Первые исходящие туннели создаются с возвратом ответа в туннель нулевой длины, т.е. напрямую создателю, однако это редкое явление и факт нулевой длины туннеля известен исключительно его создателю, поэтому компрометации пользователя не происходит.
При создании входящего туннеля картина еще изящнее: через исходящий туннель случайному роутеру передается чеснок, последний получатель которого — сам создатель. С позиции последнего транзитного звена передача «чеснока» создателю туннеля воспринимается как передача следующему транзитному узлу. Именно поэтому транзитные узлы не могут знать длину туннелей и их владельцев.
При построении туннеля длиной не более 4 участников, i2pd формирует «чеснок» из 4 зубчиков, в остальных случаях формируется «чеснок» из 8 частей. Пустые зубчики чеснока заполняются случайной информацией и неотличимы от настоящих.
Протокол I2P не предусматривает туннели длиннее 8 участников, однако на практике 4 транзитных узла считаются исчерпывающим решением.
В «чесноке» содержится информация для каждого участника:
Номер туннеля на его роутере (случайные 4 байта).
Адрес следующего роутера и номер туннеля на нем (почти как IP-адрес и номер порта в обычной сети).
Ключ симметричного шифрования и ключ шифрования вектора инициализации (IV). Сам вектор инициализации содержится в начале сообщения.
Роль узла в цепочке: конечный или промежуточный.
Ключ симметричного шифрования и вектор инициализации для ответа. Ими шифруется статус транзитного роутера: готов ли он принять новый туннель. Если в конце окажется, что хотя бы один роутер выразил несогласие, туннель не будет создан и весь процесс создания начнется с нуля.
В зависимости от типа туннеля (входящий или исходящий), последнее звено принимает роль либо «Endpoint», либо «Gateway». Между участниками одного туннеля зашифрованная информация передается блоками по 1 килобайту — это нынешний стандарт протокола. Задача последнего исходящего узла — собрать информацию в более весомый пакет и переслать нужному пользователю на его входящий туннель. Работа роутера входящего туннеля обратная: он разделяет полученную информацию на блоки и отправляет ее на другой конец туннеля. Каждый туннель существует 10 минут. Во избежание разрыва соединения, стороны заранее создают новые туннели и обмениваются их лизсетами. Подробнее о туннеля читайте в отдельном материале.

Модель взаимодействия
По умолчанию, i2pd предоставляет для прикладных программ SOCKS и HTTP прокси. Прокси — это посредник. В нашем случае — посредник для выхода в скрытую сеть. По умолчанию SOCKS5 доступен по адресу 127.0.0.1:4447, HTTP-прокси — на порту 4444. Чтобы открыть веб-страницу, размещенную в сети I2P, в браузере необходимо установить соответствующие настройки. В Firefox прокси удобно настраивается через конфигурацию сети, либо через плагин FoxyProxy. Когда мы ввели адрес сайта в настроенном браузере, I2P-роутер получил наш запрос и начал работу.
Сначала происходит обращение к случайному флудфилу с запросом лизсета нужной точки назначения. Выходной прокси пользователя является конечной точкой, т.е. скрытой сущностью. Чтобы не раскрыть ее местоположение, обращение к флудфилу происходит через цепочку транзитных узлов. Также мы сообщаем ему данные нашего входного туннеля для ответа. Допустим, что флудфил не знает нужного адреса, поэтому вместо лизсета он возвращает три случайных флудфила из своей базы. Из полученных новых флудфилов случайным образом выбирается один, к которому роутер повторяет прежний запрос. В нашем примере второй флудфил дает нужный лизсет: всю необходимую информацию для связи с конечной точкой, которая включает в себя сведения о входных туннелях и ключах. Входных туннелей, как правило, не меньше трех. Выбрав случайный входной туннель получателя, роутер отправляет через него запрос на сервер. Если все прошло успешно и запрос дошел, сервер отсылает нам веб-страничку. В обычной сети это происходит по тому же пути, откуда пришел запрос, но в I2P дела обстоят совсем иначе. Свой лизсет для ответа конечная точка локального прокси отправляет вместе с нашим запросом. Достучавшись до сервера, мы сообщили ему адрес для ответа: чтобы веб-страница открылась в браузере, серверу необходимо через свой исходящий туннель отправить ответ в наш входящий. Приняв ответ через входящий туннель, наш роутер обрабатывает информацию и в нашем браузере открывается заветная страничка!

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

Если кто-то попробует вклиниться в туннель и подсунуть свою информацию, выдавая себя за настоящего отправителя, подпись окажется неверной и информация будет отвергнута. После установки сессии, для оптимизации производительности конечные точки используют набор одноразовых симметричных ключей и тэгов к ним, применяя соответствующие ключи и обмениваясь между собой только тэгами.
Подробнее о туннелях читайте в отдельной статье.
Практическое использование
Область применения I2P обширна и не ограничивается только веб-сайтами. Вы можете размещать в I2P любые веб-ресурсы: форумы, доски объявлений, гит-репозитории, блоги и персональные одностраничники. Вполне реально организовать даже сетевые пошаговые игры, не требующие низкой задержки при передаче пакетов, например, шахматы или карты. Также найти применение I2P можно в построении выходных туннелей из неопределенного места в глобальную сеть, для полноты картины размещая выходные прокси на анонимно оплаченных серверах. Организуя ssh-доступ к арендуемой машине через I2P, вам всего лишь единожды потребуется зайти на сервер посредством других сетей, чтобы установить i2pd и сконфигурировать туннель, который будет принимать подключения. Единственное ограничение фантазий — скорость передачи данных внутри сети. Надо заметить, что от года к году скорость становится все ближе к привычным показателям обычного интернета благодаря оптимизации программного кода и общему росту количества узлов.
Разработка протокола
Все это интересно, но напрашивается закономерный вопрос: кто за этим стоит? Судя по сложности протокола, можно подумать, что это как и в случае с сетью Tor что-то связанное со спецслужбами и государственным финансированием, но нет. I2P — полностью свободный проект, рожденный и поддерживаемый энтузиастами по сей день. Разработка I2P на языке программирования Java была начата неким JRANDOM. Первый релиз состоялся в 2003 году. Несколько лет спустя JRANDOM отошел от разработки, не оставив о себе вестей, а его место занял пользователь с никнеймом zzz — американец, предположительно из района Нью-Йорка, который на момент выхода статьи все еще курирует разработку. Так прошло 10 лет: сообщество росло, I2P-роутер писали как могли, также в это время была написана официальная документация. При поисковом запросе «I2P» первая ссылка, как правило, ведет нас на сайт geti2p.net — официальную страницу того самого I2P-роутера на Java. Но история на этом не заканчивается.
В 2013 году русскоговорящий пользователь orignal с французским никнеймом, судя по всему большой любитель пиратской литературы, обнаружил в онлайн-библиотеке «Флибуста» сообщение о недоступности скачивания книг через клирнет, т.е. обычный интернет. Вместо этого пользователям предлагалось использовать I2P. Однако Ориньяль, как он говорит, не нашел существующей нормальной реализации протокола, а только некое поделие на джаве. Несмотря на то, что разработка «этого поделия» уже велась десять лет, orignal, как искушенный программист, ее не оценил. На тот момент в сети лежало еще с десяток попыток написать i2p-роутер на языках C и C++, в которых не было сделано совсем ничего. Что-то было в продукте под названием «i2pcpp», но до чего-то годного тоже было далеко. И что делает orignal: за три месяца он написал на С++ рабочую программу, пригодную для скачивания книг с Флибусты, и на этом уже хотел остановиться. На дворе был июль 2013 года. Однако некий человек уговорил его изложить свой опыт в статье на Хабре. Дело в том, что orignal пришлось вникать в дебри джава-кода, т.к. официальная документация оказалась не полноценной и имела разрозненную структуру. После публикации первой статьи что-то случилось: наверное, заметив интерес общественности, и почувствовав некоторый азарт, присущий всем программистам, писателям и композиторам, orignal взялся за написание полноценного клиента сети. Дебютный релиз 0.1.0 состоялся 17 октября 2014 года. Для его реализации orignal пришлось собственноручно реализовать на С++ несколько криптографических функций (которые с расширением библиотеки OpenSSL в дальнейшем были заменены на библиотечные). Новый клиент получил название i2pd — Invisible Internet Protocol Daemon. После первого релиза к orignal присоединились энтузиасты, которые также начали работу над совершенствованием нового I2P-роутера. Сообщество разработчиков получило имя PurpleI2P.
В первые годы к инициативе i2pd было проявлено много скептицизма сторонних наблюдателей: в PurpleI2P искали руку Кремля, закладки от ФСБ, следы масонов и рептилоидов. Само название Purple в апогее наркотического прихода отдельные индивидуумы сводили к флагу Российской Федерации: смешение красного, синего и белого цветов дает тот самый фиолетовый. Однако orignal, ведущий разработчик i2pd, пояснил, что название PurpleI2P не содержит великой тайны: название было придумано после кружки английского эля с оглядкой на королевскую корону Британской империи. Наверное, это можно считать отсылкой к лидерству i2pd перед изначальным клиентом на Java.
Ориньяль по сей день продолжает публиковать русскоязычные статьи про I2P, рассказывая широким массам о развитии протокола. В команде программистов-энтузиастов появляются новые никнеймы, другие наоборот уходят в перманентный оффлайн. В основном планирование разработки происходит в IRC, в сети ILITA. Русскоязычное сообщество достаточно активно и в IRC на самом деле обсуждается все: от новых фич в I2Pd до климата в Африке и новых мемов.
Каждая версия роутера сменяется следующей, сообщество живет, разработчики постоянно что-то кодят. Чтобы не возникало вопросов что же меняется, если и так все работает хорошо, вкратце скажем о развитии протокола: мало ли параноики решат, что протокол не меняется, а оттачивается только бэкдор от силовых структур. В начале пути, ветки джава-роутера и роутера на C++ развивались не синхронно, согласование нюансов с соседним лагерем происходило с некоторой задержкой. Сейчас разработчики, несмотря на расхождения во взглядах, вместе реализуют значимые решения. Самое заметное изменение за последние годы: переход с транспортного протокола NTCP на NTCP2. Этот протокол является адаптированным крипто-аналогом привычного TCP и используется повсеместно: начиная открытием веб-страницы и заканчивая загрузкой торрента. Главное различие двух протоколов заключается в использовании алгоритма шифрования: в старом NTCP используется Диффи-Хеллман, очень медленный и жадный до системных ресурсов, а в NTCP2 — алгоритм на основе эллиптических кривых — тренд в сфере скоростных криптосистем, превосходящий по криптостойкости и производительности своего предшественника. Это изменение сделало I2P-роутеры более легковесными и полностью пригодными для использования на малых устройствах вроде одноплатных компьютеров и смартфонов (по крайней мере i2pd точно). Замена алгоритма согласования ключей Диффи-Хеллмана новыми решениями происходит и в других частях протокола. Для зрителей, понимающих в криптографии, особо заметим, что сеть I2P постепенно переходит на криптографические протоколы семейства Noise, что тоже является хорошим решением для производительности, анонимности и надежности. I2P-роутеры, как и все программы на свете, подвержены недочетам вроде багов и неполноценной реализации каких-то функций, что влечет дальнейшее развитие, исправление, и новые релизы. Если интересны детали, более подробную информацию можно найти через поисковик и в чатах сообщества.
Почему стоит использовать i2pd на C++ вместо роутера на Джаве? Ответ прост: потому что i2pd архитектурно превосходит поделие на Джаве. I2P — кладезь различной криптографии, реализация которой на Джаве была бы жутко тормозной. Потому в Джава-роутере используются библиотеки, написанные на языке С. И все бы ничего, но каждый вызов этих библиотек — это большие накладные расходы. И как бы разработчики не старались, а тормоза есть. Не такие большие, как могли бы быть, но до скорости нативной (т.е. встроенной) криптографии из i2pd им очень далеко. Также весь трафик джава-роутера локально проходит через фактически лишний протокол I2CP, что, не вникая в детали, сильно портит качество работы, в то время как в i2pd этот протокол существует исключительно для совместимости с приложениями на джава-роутерах. Для пытливых умов можно сказать более подробно: главная проблема I2CP в том, что через него сессии TCP (которые называются стримами) не могут контролировать доступ к туннелям и лизсетам. Также I2CP лишает пользователей джава-роутера нормальной поддержки UDP-туннелей: их поддержка обеспечивается отдельным приложением streamr. Как уже знает бывалый зритель, протокол UDP используется для быстрой потоковой передачи данных, например, голос собеседника при онлайн-звонке. Сложно переоценить качественную поддержку этого протокола. В I2Pd UDP-туннели поддерживаются без каких-либо проблем и дополнительных программных наслоений.
Помимо более быстрой работы i2pd, этот роутер также потребляет меньше системных ресурсов в сравнении с джаво-версией, т.к. программа на C++ напрямую взаимодействует с системой, в отличие от Джавы, где все крутится внутри виртуальной машины — дополнительной прослойке между операционной системой и программным обеспечением. Дальше только больше: исследуя просторы внутрисетевых площадок, вы не однократно наткнетесь на описание различнейшних проблем с производительностью сети I2P, где источником проблем будет не протокол, а его кривая реализация в популярном клиенте. В рамках тестов со скоростными серверами и сетью, полностью исключающей наличие джава-роутеров, удалось достичь скорости чуть меньше мегабита в секунду. Сегодня такой показатель на фоне средних нескольких десятков килобит кажется невероятным! В видео, по тексту которого составлена эта статья, приведен скриншот недавней переписки двух ведущих разработчиков: orignal и zzz. В то время, как через i2pd в тестовом режиме гоняют видеостримы, джава-роутер не позволяет слушать даже онлайн-радио. Чтобы увеличить среднюю скорость сети I2P нужно: во-первых, каждому держать свой узел включенным максимально доступное время, во-вторых, — это должен быть узел сети, работающий на i2pd.
Сравнение с другими сетями
Если вы имеете представление о сети Tor и о меш-сетях вроде Yggdrasil Network, после всего сказанного об I2P не имеет большого смысла говорить, чем они различаются. Это абсолютно разные концепции. Однако для начинающих читателей приведу несколько основных пунктов.
Начнем с Tor: Во-первых, он сильно привязан к корневым серверам конторы, к которым осуществляется стартовое обращение для построения рисунка сети. В I2P это явно указанные в коде ресиды, которые можно сменить на свои, либо просто использовать уже готовые адресные книги, отталкиваясь от которых роутер продолжит работу, вовсе минуя стартовые узлы. Во-вторых, по мнению компетентных пользователей, Tor изначально и до сих пор принадлежит АНБ, поэтому относительно него не стоит строить иллюзий. В-третьих, Тor имеет более простую архитектуру туннелей и меньше возможностей их конфигурации. В-четвертых, Тор изначально предполагает проксирование в обычный интернет, а в I2P это возможно только при дополнительной конфигурации соответствующих узлов и туннелей к ним. Этот пункт по настроению можно отнести к минусам I2P, но мы не согласимся.
Про Yggdrasil и аналогичные меш-сети: подобные разработки ориентируются на легкость развертки, скорость передачи данных и самоорганизацию. Трафик внутри Yggdrasil искусственно не путается, сеть имеет простой и интуитивно понятный рисунок. Пользователи имеют устойчивые двунаправленные зашифрованные туннели, и чем короче — тем лучше. Как видно, у I2P с Тором совсем мало общего, а с распространенными меш-сетями и того меньше. Разве что I2P может свободно работать через Yggdrasil (поддержка в i2pd с версии 2.36.0). Через Тор тоже, кстати говоря. На этом, пожалуй, все.
Послесловие
Последнее по теме I2P и скрытых сетей в целом: этично ли это? Устоявшееся общественное мнение таково, что любые попытки анонимизации расцениваются, как преступный умысел. Например, в скрытых сетях люди могут размещать то, что будет заблокировано в цензурируемой сети. Это конечно бесит цензоров. Не умолчим и про криминал, который может найти себе пристанище в I2P, все это очевидно. Но что об этом думают разработчики I2P, у которых также могут быть семьи, дети и тяга к справедливости, и как считает большинство криптоанархистов? Если кратко: кухонным ножом можно нарезать хлеб, а можно причинить вред, но из-за возможного злоупотребления кухонные ножи не запрещают. Так же и тут: нельзя бороться с технологиями приватности под предлогом борьбы с преступностью, так как самое распространенное преступление сегодня — это нарушение гражданских прав и свобод: тотальный контроль и продажа личных данных.
Если вас до сих пор увлекал «нетсталкинг», т.е. романтическое исследование содержимого скрытых сетей, призываем идти дальше — изучать механику работы этих сетей и содействовать их развитию. «Даркнет» (или «дипвеб») по своей сути это не что-то экзотическое; это современный набор необходимых инструментов для свободного распространения информации и личного общения людей без искусственных преград.
I2P. Что это такое и как им пользоваться
Как вы знаете, нашим депутатам недавно кто-то рассказал про интернет, и они принялись наводить в нем порядок. По крайней мере так они считают. Единственное, что они могут это — запрещать, поэтому в последнее время стала уместна фраза «дайте мне другой интернет», тем более, что такой другой интернет по сути уже есть — I2P. Чтобы получить к нему доступ, не нужно искать каких-то секретных провайдеров, все работает поверх обычного «большого» интернета, и чиновники до него пока еще не добрались. Правда, обычных пользователей там тоже заметно меньше.
Что-то же такое I2P? По сути это такая же многофункциональная сеть, как и привычный интернет. Ответить на этот вопрос трудно, так же, как одной фразой ответить на вопрос, что такое интернет. Название I2P происходит от фразы «Invisible Internet Project» — «Проект Невидимый Интернет». В I2P есть свои сайты, блоги, в том числе и микроблоги, форумы, чаты, есть даже торрент-трекеры и средства P2P-файлового обмена наподобие eMule. Но у I2P есть принципиальное отличие от подобных сервисов в обычном интернете — это анонимность, безопасность и распределенность.
Но прежде, чем говорить о I2P, коротко поговорим о том, что нас не устраивает в привычном интернете.
В чем проблема Интернета
Если очень грубо, то как работает обычный сайт в интернете? Есть сервер с определенным IP-адресом, где расположен сайт, к нему подключаются пользователи, которые также имеют свои IP-адреса. Общение происходит между этими двумя IP-адресами. Пакеты между ними передаются через множество промежуточных серверов, но все это происходит в открытом виде, каждый промежуточный сервер знает, кому предназначен тот или иной пакет. Перехватить и обработать чужие пакеты не представляет никакой проблемы (не будем пока говорить о безопасном протоколе HTTPS).
Возвращаемся к нашему серверу. Так как его адрес гарантировано известен, то для ввода цензуры достаточно заставить провайдеров заблокировать его IP, чтобы в некоторой стране доступ к сайту на этом сервере был закрыт. На самом деле это самый простой и самый дурацкий способ блокировки. Дурацкий, потому что на одном сервере часто работают несколько сайтов, и, заблокировав таким образом очень экстремистский сайт Васи Пупкина, одновременно будет заблокирован ни в чем неповинный сайт Клавдии Васькиной о приготовлении пирожков с ежевикой. Но, к сожалению, у нас цензура работает именно таким образом.
Другой способ блокировки, который наши чиновники уже испробовали в свое время на сайте torrents.ru (ныне http://rutracker.org) — это отбор доменного имени. Как вы знаете, есть регистраторы доменных имен, которые связывают адрес сайта (torrents.ru) с некоторым IP-адресом сервера. Заставив регистратора прекратить поддерживать некий домен, вы не сможете зайти на сайт, введя его имя, хотя сможете зайти на него, зная его IP-адрес.
Итак, у привычного интернета следующие основные проблемы:
- Привязка сайтов к определенному IP-адресу сервера.
- Централизованное управление доменными именами.
- Небезопасность к перехвату данных.
Третья проблема частично решается, но все-равно сервер может следить за пользователем по его IP. В I2P решены все три проблемы.
Как работает I2P
I2P представляет собой защищенный протокол обмена данными, работающий поверх привычного протокола TCP/IP (на самом деле в первую очередь используется протокол UDP, а если его использовать не удается, то TCP). Первая его задача — сделать так, чтобы нельзя было бы вычислить IP-адрес сервера, на котором работает сайт. Вторая задача — избавиться от централизованного хранения доменных имен, в роли DNS-серверов выступают множество серверов. И третья задача — полностью шифровать пакеты данных при передаче их от пользователя к серверу и обратно, сделав бессмысленным перехват пакетов. Благодаря этому приложениям на стороне пользователя больше нет смысла заниматься шифрованием, оно уже реализовано протоколом I2P. По ходу дела решается еще одна задача — анонимизация. Используя I2P можно выходить в обычный интернет под чужими IP-адресами, таким образом обходя блокировки сайтов в отдельно взятой стране.
Принцип работы протокола I2P следующий. Пусть пользователю нужно обратиться к некоему серверу. Пока оставим в стороне вопрос о том, как пользователь нашел сервер, пока скажу только, что для идентификации не используются IP-адреса, вместо них используются сложные идентификаторы. Первое, что нужно сделать пользователю — это создать туннель от себя до сервера. Под туннелем понимается цепочка промежуточных серверов, через которые будут пересылаться пакеты от пользователя к конечному серверу. В качестве таких промежуточных серверов могут выступать (и, как правило, выступают) другие пользователи. Ничего не напоминает? Правильно, это похоже на работу Tor. Но в I2P есть кардинальное отличие.
Напомню, что Tor использует так называемый луковую маршрутизацию, когда каждое промежуточное звено снимает один слой шифрования, в результате последнее звено общается с конечным сервером открытым текстом, что является как потенциальной опасностью для пользователя, так и возможный источник проблем для конечного узла, если через него делают что-то противозаконное.
Протокол I2P работает по-другому, он использует чесночную маршрутизацию. В этом случае каждый пакет, который нужно передать (аналог — зубчик чеснока), шифруется, а затем упаковывается в большой пакет (чесночину), которая содержит еще несколько таких зубчиков-пакетов для передачи к разным узлам. Таким образом, когда пользователь получает чесночину, извлекает из нее зубчик-пакет, предназначенный для него самого, а остальные зубчики передает дальше. Так как все зубчики зашифрованы, то только тот, кому предназначен зубчик, знает, что с ним делать дальше. Промежуточные узлы не знают, что с тем или иным пакетом будет происходить дальше, на следующем узле, и является ли он конечным. Благодаря этому, используя только перехват и анализ пакетов очень трудно (хочется написать «невозможно», но будем осторожны) определить физическое расположение сервера, а сервер, в свою очередь, ничего не знает о пользователе, который к нему обращается.
Перехват осложняется еще и благодаря тому, что каждый пользователь меняет туннель (цепочка, по которой передаются данные) через определенный промежуток времени (по умолчанию 10 минут).
Таким образом решается первая и третья из описанных проблем (анонимность серверов и пользователя, а так же шифрование трафика).
Теперь рассмотрим, как решается проблема с доменными именами. В I2P нет единых доменных регистраторов, каждый пользователь может самостоятельно зарегистрировать себе домен вида http://bla-bla-bla.i2p. Можно использовать и поддомены. Как же происходит поиск сервера по его имени? Если вы хоть раз создавали сайт или настраивали локальный сервер, то наверняка знаете о таком файле, как hosts, в котором прописаны все локальные адреса. Подобным образом работает маршрутизация в I2P.
У каждого пользователя есть несколько файлов, в которых прописаны соответствия доменов адресам в сети I2P (не IP-адреса). Это так называемая адресная книга. Также у каждого пользователя есть список подписок — адреса серверов, с которых периодически происходит обновление адресов. Подписка — это просто текстовый файл, в котором перечислены адреса серверов, с которых загружаются ссылки на сервера по их именам. По умолчанию там содержится один сервер — http://www.i2p2.i2p/hosts.txt. С этих серверов адреса попадают в так называемую маршрутизаторную адресную книгу.
Я опущу некоторые подробности работы с именами, скажу только, что есть несколько адресных книг, в том числе приватная, с которой может работать только данный пользователь, а также публикуемая адресная книга, адресами из которых пользователь делится с другими пользователями (в случае, если он настроит сервер для раздачи доменных имен). Как раз благодаря этой публикуемой адресной книге работникам цензуры нет смысла заставлять убирать адреса с одного сервера (который еще надо найти), так как через какое-то время пользователи все-равно смогут найти нужный адрес на других серверах благодаря распределенной сети. По сути это та же самая DHT, которая используется для поиска источников при скачивании торрентов без использования серверов, а также используется в eMule.
Вот, например, как выглядит одна из записей адресной книги (файла
plugins.i2p=4GdwNoyPq-tlATiocmygKgZv1gJ1Gr1XtZRQ1T-5RozH54aPDKuVp6E9eTdZm3PyJ
Для наглядности эту запись я разбил на несколько строчек, но в реальности это все одна строка. Как я уже говорил, сейчас каждый может зарегистрировать себе свой домен в зоне I2P, при этом не надо ничего нигде утверждать, проходить какую-либо бюрократическую процедуру. Тут неизбежно возникнет проблема с тем, что несколько человек могут зарегистрировать один и тот же домен, и оба они будут правильные с точки зрения протокола. Решается ли эта проблема на уровне протокола I2P, я пока не могу сказать, но в сети есть уже несколько серверов — каталогов доменных имен. Скорее всего в будущем борьба развернется за регистрацию в них. Поговаривают, что это может стать одним из способов заработка на этой сети, когда домен создается свободно, а вот прописывается в каталогах уже за деньги (не исключено, что как абонентская плата).
Но в таком случае интересно, как будет решаться проблема конкуренции таких каталогов, ведь может оказаться так, что в одном каталоге домен зарегистрирован на один сервер, а в другом — на другой. Тут, честно признаюсь, я пока до конца не разобрался, буду рад, если кто подскажет. А то получается раздолье для потенциальных фишинговых сайтов. Но зато таким образом, доменные имена устойчивы к цензуре.
В завершение этого раздела надо сделать одно уточнение, чтобы вы не ждали от I2P слишком многого. Считается (справедливо), что это распределенная сеть. Однако, в первую очередь распределены адреса. Сайты все-равно работают на каком-то одном конкретном сервере (в отличие от распределенной сети BitTorrent, где распределено само содержимое файлов). Этот сервер можно закрыть, но его очень тяжело найти (узнать его IP). Также очень трудно идентифицировать пользователя, который работал в тот или иной момент с сервером. Еще раз повторю, что сервер тоже не знает, никаких IP-адресов пользователя, только его идентификатор в сети I2P, который периодически меняется. Но для надежности этот идентификатор пользователь не должен никому показывать (сам он его узнать может).
Использование I2P
Установка
Теперь давайте посмотрим, как пользоваться протоколом I2P. Для работы с ним нужно установить пакет программ (в том числе роутер), инсталлятор которых можно скачать с официального сайта. Правда, здесь есть одна особенность. Программы для работы с I2P написаны на Java, поэтому им для работы требуется виртуальная машина Java. Процесс установки программ я описывать не буду, потому что там все как обычно, запускаем инсталлятор двойным кликом, потом Next-Next-Next (даже под Linux) и все готово.
После того, как программы установлены, нужно настроить браузер для работы через I2P. Настройка сводится к прописыванию прокси-серверов. Заходим в настройки браузера, туда, где настраивается сеть. И прописываем следующие прокси:
- Для протокола HTTP: Сервер 127.0.0.1, порт 4444.
- Для протокола HTTPS: Сервер 127.0.0.1, порт 4445.

Теперь запускаем программу-роутер для работы с I2P. Под Windows для этого будут созданы специальные ярлыки, под Linux это можно сделать с помощью команды
Скрипт i2prouter расположен в папке, куда были установлены все программы, относящиеся к I2P, по умолчанию это
/i2p. Я бы посоветовал добавить эту папку в переменную окружения PATH, чтобы при каждом запуске не заходить в папку i2p.
Как только запустится роутер, откроется браузер на странице http://127.0.0.1:7657/home.

На этой странице при первом запуске вам будет рекомендовано установить скорость вашего интернет-соединения в настройках по адресу http://127.0.0.1:7657/config.jsp. Это действительно лучше сделать сразу для оптимизации работы сети.

Как вы уже, наверное, поняли, вся настройка и управление работой сети I2P осуществляется через веб-интерфейс, хотя есть возможность все настраивать через обычные текстовые конфиги. Настроек очень много, среди них используются много специфических терминов, которые, во многом знакомые любителям BitTorrent и других P2P-сетей. Мы постараемся обойтись без этой терминологии.
Программы I2P используют достаточно много портов, и ваш фаервол не должен их блокировать. Состояние I2P-сети вы можете проверить все по тому же адресу http://127.0.0.1:7657, статус сети описан в левой панели. Надо сказать, что определение статуса сети не очень надежное.
Если вы только что запустили роутер, нужно подождать некоторое время (хотя бы минут 5), чтобы он получше интегрировался в сеть — нашел побольше пиров (узлов, через которые можно передавать трафик).
Как вы возможно уже обратили внимание, веб-интерфейс полностью русифицирован, причем довольно качественно. Надо отметить, что русскоязычное сообщество сети I2P является одним из наиболее крупных, что вызывает гордость.
Теперь, после настройки, проверим, как все это работает.
Web и I2P
До сих пор я говорил о том, что в сети I2P есть свои сайты и вскользь упомянул, что эту же сеть можно использовать как анонимайзер для обычного интернета. Но для начала, чтобы убедиться, что мы все настроили правильно, именно в таком режиме мы проверим работу I2P.
В браузере, настроенном для работы через I2P, вы можете зайти на любой сайт. Да, открывать он будет заметно дольше, но если он откроется нормально, то можете быть уверены, что ваш реальный IP-адрес не будет засвечен на сервере. Для надежности вы можете проверить, под каким IP-адресом вы видны серверу, например, с помощью сайта http://hideme.ru/ip/.
Вы получите примерно следующий результат:
Обратите внимание на хост. Похоже, что это сейчас хосты вида xxx.blue.kundencontroller.de (где xxx — будущий ваш IP-адрес) — это единственный путь для выхода в наружный интернет. Поэтому заблокировать такой анонимайзер не составит труда, некоторые сайты их добровольно блокируют у себя на сервере. Так что пока Tor для этих целей надежнее. В терминах I2P сервер, предназначенный для анонимного выхода в «большой» интернет, называют outproxy (по умолчанию используется сервер false.i2p).
Теперь посмотрим, как выглядят сайты, работающие в сети I2P. Как я уже говорил, они имеют адреса вида http://example.i2p, с той лишь разницей, что используется домен первого уровня .i2p. В простейшем случае вы вводите адрес сайта и работаете с ним точно также, как и в «большом» вебе. Правда, страницы могут открываться довольно долго, особенно если вы только подключились к сети. Для примера, ниже приведены скриншоты двух сайтов:
http://id3nt.i2p/— сервис микроблогов![]() |
http://forum.rus.i2p/— русскоязычный форум про I2P![]() |
Однако, если запрошенного адреса нет в вашей адресной книге, то прежде чем вы попадете на сайт, вы должны будете найти запрашиваемый сервер в сети I2P. Например, если мы в адресной строке браузера набираем http://justme.i2p, и этого сайта нет в вашей адресной книге, браузер покажет следующее сообщение:

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

Здесь предлагается сохранить путь в адресной книге, чтобы в следующий сайт открывался сразу, без обращения к поисковому сервису.
У нас на выбор есть четыре варианта действий:
- Не сохранять адрес и просто открыть сайт.
- Сохранить адрес в адресную книгу роутера.
- Сохранить адрес в основную адресную книгу.
- Сохранить адрес в приватную адресную книгу.
Чем эти адресные книги отличаются, вы можете прочитать по адресу http://127.0.0.1:7657/dns. Не будем вдаваться в подробности различий адресной книги роутера (обычно в нее рекомендуется добавлять новые адреса) и основной адресной (master) книги. Отличие этих двух адресных книг от приватной заключается в том, что вы не делитесь известными вам адресами из приватной книги с другими пользователями I2P. На самом деле по умолчанию вы ни с кем не делитесь своей адресной книгой, для этого надо еще настроить сервер, но мы сейчас этим заниматься не будем.
После того, как вы выбрали, что делать с новым адресом, в идеале должен открыться I2P-сайт. К сожалению, это не происходит не всегда. Но в данном случае нам повезло, сайт работает стабильно, и роутер успел хорошо интегрироваться в сеть. Поэтому в результате мы увидем домашнюю страницу чьего-то сайта:

Можем пройтись по ссылкам и найти там, например, список сайтов, где можно скачать музыку:

В разделе с теорией я уже говорил, что адреса также обновляются из подписок. По умолчанию в списке подписок присутствует только один адрес, который обновляется не очень часто. Однако в интернете можно найти еще некоторое количество серверов с подписками.
Добавить новые подписки можно через веб-интерфейс, если по адресу http://127.0.0.1:7657/dns и выбрать раздел «Подписки», или можно сразу открыть адрес http://127.0.0.1:7657/susidns/subscriptions.

В завершение этого раздела приведу несколько полезных ссылок, откуда можно начинать осваивать мир I2P.
-
— небольшой каталог ресурсов I2P. — аще один каталог сайтов с проверкой статуса их доступности. — неплохой архив MP3. — flibusta есть и в I2P. — аналог eMule для сети I2P (под Ubuntu 12.10 он у меня не запустился, выдавая сообщение о том, что не найдена библиотека libbfd-2.22-system.so). — торрент-трекер. — поисковик. — еще один поисковик.
Описание работы с торрент-трекером и iMule выходит за рамки этой статьи.
Почта в I2P
Так как I2P задумывался как полноценная замена обычному интернету, то в нем есть не только сайты, но и другие сервисы, привычные по «большому» интернету. Например, почта. Да, там пока нет большого количества почтовых серверов, но те, что есть вполне работают. Наиболее крупный из них — это http://hq.postman.i2p/. Для того, чтобы там зарегистрироваться, нужно пройти по ссылке http://hq.postman.i2p/?page_id=16. После регистрации вы получите ящик вида username@mail.i2p . Есть, правда, одно ограничение. Если вы не будете пользоваться заведенным ящиком 100 дней (в течение этого периода ни разу в него не зайдете), то он будет удален.
Сразу после регистрации нужно подождать 5 минут прежде, чем пытаться зайти в новый почтовый ящик. Это связано с тем, что регистрация новых ящиков происходит не мгновенно, а по расписанию каждые 5 минут.
Чтобы проверить, что регистрация прошла успешно, откройте ссылку http://127.0.0.1:7657/susimail/susimail — это веб-интерфейс для доступа к почте. На самом деле этот интерфейс ужасен — выглядит он в стиле 90-ых годов прошлого века, да еще в нем есть проблемы с письмами на русском языке. Но не волнуйтесь, позже вы сможете настроить любимый почтовый клиент. А вот как выглядит веб-интерфейс:

Итак, у нас есть почта вида username@mail.i2p . В пределах сети I2P вы можете ей пользоваться, как обычной почтой. С нее вы можете отправлять письма как в «большой» интернет, так и другим пользователям I2P. Но казалось бы, что пользователи «большого» интернета не смогут вам написать письмо на этот ящик. На самом деле смогут. Для этого им достаточно слать письма не на username@mail.i2p , а на username@i2pmail.org , откуда почта будет перенаправляться в ваш I2P-ящик. Почта на ящик из «большого» интернета доставляется довольно долго — у меня этот процесс длился минут 10-15.
Как я говорил, веб-интерфейс ужасен, поэтому давайте настроим почтовый клиент для работы с почтой из I2P. Настройки его довольно простые.
Настройки сервера входящей почты. Имя сервера — 127.0.0.1, порт — 7660, имя пользователя — имя ящика без @mail.i2p. Нужно отключить использование SSL.
Настройки сервера исходящей почты. Имя сервера — 127.0.0.1, порт — 7659, имя пользователя — имя ящика без @mail.i2p. Нужно отключить использование SSL.
Собственно, все. Для наглядности ниже приведены скриншоты настроек в Thunderbird.

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

И в завершение о грустном. На данный момент работа через I2P происходит очень медленно и ненадежно. Лично у меня сайты открываются через раз, приходится часто обновлять страницу. Правда, иногда, сайты начинают открываться довольно шустро. Судя по всему это зависит от проложенного туннеля. Собственно, это проблема всех распределенных сетей, если в ней не много участников.
На этом давайте остановимся, а то пост получился и так слишком большой. Надеюсь, что мне удалось объяснить на пальцах суть работы I2P, а также как им пользоваться. Хочется верить, что этот проект не останется игрушкой для очень узкого круга пользователей, и он станет хотя бы чуть более известным, и одновременно надежным.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
На доработке I2P или Невидимый интернет.
Данный проект представляет собой анонимную, децентрализованную, самоорганизующуюся сеть. Для пользователей заинтересованных в высшей степени анонимности, представленная сеть пожалуй является неотъемлемой частью жизни. Сеть состоит из узлов или же маршрутизаторов и однонаправленных входящих и исходящих виртуальных туннелей. Клиентские приложения имеют свой собственный криптографический идентификатор взамен IP адресу, который позволяет им отправлять и получать сообщения. Эти клиенты могут подключиться к любому маршрутизатору и санкционировать "аренду" некоторых туннелей, которые будут использоваться для отправки и получения сообщений через эту сеть. Маршрутизаторы взаимодействуют между собой по протоколам TCP, UDP и т.д. Вместо DNS используются так называемые "адресные книги" это доверенная сеть имён,взамен глобальной уникальности имён, гарантируется только локальная уникальность, которые обновляются автоматически у всех клиентов.
То есть если говорить простым и понятным языком, есть сеть состоящая из множества клиентов, которые так же выступают и в качестве маршрутизаторов, каждый имеет свой уникальный криптографический идентификатор. Даже если перехватить этот идентификатор, он не будет иметь абсолютно никакой логической связи с реальными устройствами, к тому же нельзя будет отследить его местоположение, как и серверов совсем. Поэтому данную сеть невозможно отключить, отфильтровать или заблокировать. Она продолжит работать, даже при малом количестве пользователей. Весь трафик проходит по специальным шифрованным туннелям.
Шифрование

На этой диаграмме показан путь, который проходит некоторый трафик I2P при прохождении через сеть. I2P-маршрутизатор пользователя обозначен надписью "A", а скрытая служба I2P (например, веб-сайт
) обозначена как "B". Клиент и сервер используют 3-прыжковые туннели, эти прыжки представлены ячейками с метками ‘P’, ‘Q’, ‘R’, ‘X’, ‘Y’, ‘Z’, ‘P_1’, ‘Q_1’, ‘R’_1, ‘X_1’, ‘Y_1’ и ‘Z_1’.
Ячейки с метками ‘P’, ‘Q’ и ‘R’ представляют исходящий туннель для A, а ячейки с метками ‘X_1’, ‘Y_1’, ‘Z_1’ представляют исходящий туннель для B. Аналогично, ячейки с метками ‘X’, ‘Y’ и ‘Z’ представляют входящий туннель для ‘B’, а ячейки с метками ‘P_1’, ‘Q_1’ и ‘R_1’ представляют входящий туннель для ‘A’. Стрелки между ячейками показывают направление движения. Текст над и под стрелками показывает пример пропускной способности между парой прыжков, а также пример задержки.
Когда клиент и сервер используют 3-прыжковые туннели, в ретрансляции трафика участвуют в общей сложности 12 других маршрутизаторов I2P. 6 пиров передают трафик от клиента к серверу, который разделяется на исходящий 3-прыжковый туннель от ‘A’ (‘P’, ‘Q’, ‘R’) и входящий 3-прыжковы туннель к ‘B’ (‘X’, ‘Y’, ‘Z’). Аналогично, 6 пиров ретранслируют трафик от сервера обратно к клиенту.
Во-первых, мы можем рассмотреть латентность — время, которое требуется для того, чтобы запрос от клиента прошел через сеть I2P, достиг сервера и вернулся к клиенту. Суммируя все задержки, мы видим, что:
40 + 100 + 20 + 60 + 80 + 10 + 30 ms (client to server)
+ 60 + 40 + 80 + 60 + 100 + 20 + 40 ms (server to client)
————————————
TOTAL: 740 ms
Общее время прохождения трафика в нашем примере составляет 740 мс, что, безусловно, намного больше, чем при просмотре обычных интернет-сайтов.
Во-вторых, мы можем рассмотреть доступную пропускную способность. Она определяется по самому медленному каналу связи между прыжками от клиента и сервера, а также при передаче трафика от сервера к клиенту. Для трафика, идущего от клиента к серверу, мы видим, что доступная пропускная способность в нашем примере между прыжками ‘R’ & ‘X’, а также прыжками ‘X’ & ‘Y’ составляет 32 КБ/с. Несмотря на более высокую доступную пропускную способность между другими узлами, эти узлы будут действовать как узкое место и ограничат максимальную доступную пропускную способность для трафика от ‘A’ к ‘B’ на уровне 32 КБ/с. Аналогично, трассировка пути от сервера к клиенту показывает, что максимальная пропускная способность 64 КБ/с — между перекрестками ‘Z_1’ & ‘Y_1, ‘Y_1’ & ‘X_1’ и ‘Q_1’ & ‘P_1’.
В данной сети используется чесночная маршрутизация, многослойное шифрование, односторонние туннели, расхождение зашифрованных пакетов по нескольким разным туннелям, каждый пакет шифруется методом "garlic encryption" (чесночное шифрование).
Чесночная маршрутизация представляет собой многослойное шифрование и является расширением луковой маршрутизации, которая используется в сети TOR.
Односторонние туннели подразумевают собой поток трафика только в одну сторону. Тем самым клиент анонимной сети не имеет прямого доступа к клиенту на другой стороне, в распоряжении лишь информация о начальном узле в его входящем туннеле.
Сравнение с сетью Tor

У сети I2P имеется ряд весомых преимуществ перед всеми известной сетью Tor. Из них как по моему мнению наиболее главными будут выступать то, что данный проект разработан и оптимизирован для работы скрытых сервисов, что гораздо быстрее чем Tor; полностью распределённая и самоорганизующаяся сеть; достаточно небольшая, чтобы её сильно блокировали или совершали DOS атаки; защита против детектирования клиентской активности; реализованы короткоживущие туннели, что уменьшает количество способов, которые атакующий может использовать для атаки, в отличие от цепочек Tor которые как правило живут долго; API I2P спроектированы под анонимность и безопасность, тогда как SOCKS сделан для функциональности.
Установка и реализация сети I2P
В Kali Linux установка клиентской программы I2P не составляет никаких трудностей и проблем, ведь она уже имеется в репозиториях, её можно будет установить только одной командой
sudo apt install i2p
Далее начнёться скачивание и установка, данный процесс не занимает особо много времени. Далее когда всё будет установлено, для запуска вам нужна будет так же только одна команда
После запуска перед вами откроется консоль маршрутизатора I2P.
Подводим итоги
В этой статье мы рассмотрели анонимную сеть I2P, так же изучили по какому принципу она работает, рассмотрели ряд её преимуществ перед сетью TOR. Данная сеть может выступать средством анонимизации трафика для каждого, но не стоит забывать о том, что хоть данная сеть и предоставляет довольно хорошую степень анонимности, стоит использовать её в связке с другими средствами анонимизации сетевого трафика, такими как сеть Tor, FreeNet, VPN. Так же стоит помнить, что при большом желании можно распутать любую цепочку, и у спец-служб присутствуют методы деанонимизации пользователей сети I2P, поэтому данная статья является лишь ознакомительным материалом.

