Часть 1: «Всё что вы хотели знать и боялись спросить о I2P»
Я достаточное время пользовался I2P и читал все статьи об этой сети доступные в русскоязычной части интернета, но не одна из них не даёт всеобъемлющего знания о ней. Учитывая пожелания людей в предыдущих публикациях об I2P, я занялся переводом официального источника.
Из-за большого объёма информации, я буду выкладывать переводы частями.
Если кого то действительно это интересует, прошу под «спойлер».
Это недо* художественный перевод, прошу прощения если где-либо смысл был искажён.
Присылайте поправки и исправления в личку.
Официальный источник: i2p2.de
Введение
В отличие от веб-сайтов, размещенных в распределительных сетях Freenet и GNUnet, размещенные на I2P сайты полностью интерактивные — есть традиционные веб-сервисы: поисковые системы, доска объявлений, в блогах имеется возможность комментировать.
С учетом всех этих анонимных приложений, I2P берет на себя роль «Харона» (Тот кто души через реку мёртвых перевозил в греческой мифологии) — приложения сообщают, что они хотят послать некоторые данные на адрес, представленный криптографическим идентификатором (Это пункт назначения) и I2P заботится о том, чтобы данные были доставлены секретно и анонимно. I2P умеет распределять пакеты, для того чтобы информация максимально анонимно и надежно передавалась через несколько потоков, поверх TCP. При этом на основе алгоритма обеспечивается максимальная пропускная способность и минимальные задержки.
Доступны несколько простых прокси-серверов SOCKS, чтобы связать существующий интернет с I2P, их возможности были ограничены, так как многие сайты обычно создают угрозу анонимности и подвергают пользователя опасности.
Единственный безопасный путь это полная обработка приложений для обеспечения надлежащей работы, мы предоставляем ряд API-интерфейсов, которые можно использовать, чтобы улучшить взаимодействие с сетью (тут видимо имеется в виду работа с сетью интернет в обе стороны — прим. пер.).
I2P, не является: исследовательским, академическим, коммерческим или государственным проектом. Это совместные усилия инженеров, направленные на то, чтобы делать все необходимое для обеспечения достаточного уровня анонимности для тех, кто в ней нуждается. Активная разработка велась с начала 2003 года и занимала всё время разработчиков, также есть специальная группа, состоящая из участников со всего мира, которая тоже участвовала в разработке. Весь исходный код I2P открыт и свободно доступен на веб-сайте, большинство кода отдано в общественное достояние, хотя и используются нескольких криптографических процедур под BSD лицензией.
Люди, работающие над I2P не контролируют то, что люди делают в клиентских приложениях, и есть несколько приложений, доступных под лицензией GPL (I2PTunnel, susimail, I2PSnark, I2P-Bote, I2Phex и другие.).
Финансирование I2P поставляется исключительно из пожертвований, и не облагается налогами (ой как загнул), так как многие разработчики сами являются анонимными.
Принцип работы
Обзор
Чтобы понимать как работает сеть I2P, важно понять несколько ключевых понятий:
Во-первых, I2P делает строгое разделение между программным обеспечением, участвующем в сети ( «маршрутизатор») и анонимными концами («цели»), связанными с отдельными приложениями.
Когда используется I2P это хорошо видно, но что он скрывает? Он скрывает информация о том, что пользователь делает сейчас (если вообще что-либо), а также то, что пользователь подключён к определённому маршрутизатору. Конечные пользователи, как правило, имеют несколько локальных адресов на маршрутизаторе — например, один прокси для IRC серверов, другой для поддержки пользовательского анонимного веб-сервера («eepsite»), ещё один для I2Phex например, четвёртый для торрентов и т. д.
Вторым важным аспектом для понимания работы является концепция «туннеля». Туннель — это ориентированный путь через явно выбраный список маршрутизаторов. Используется многоуровневое шифрование, поэтому каждый из маршрутизаторов может расшифровать только один слой. Расшифрованная информация содержит IP следующего маршрутизатора, наряду с зашифрованной информацией, которая будет перенаправлена. Каждый туннель имеет начальную точку (первый маршрутизатор, также известный как «шлюз») и конечную точку. Сообщения могут быть отправлены только в одну сторону. Чтобы получить обратное сообщение, требуется еще один туннель.
Существует два типа туннеля: «исходящий» туннели отправляет сообщения от создателя туннеля, в то время как «входящие» туннели передают сообщение обратно создателю туннеля. Сочетание этих двух туннелей позволяет пользователям отправлять друг другу сообщения. Отправитель («Алиса» на изображении выше) устанавливает исходящий туннель, в то время как приемник («Боб» в картинке) создает входящий туннель. Шлюз во входящем туннеле может получать сообщения от других пользователей и переслать их до конечной точки (в данном случае это «Боб»).
Конечная точка исходящего туннеля должна будет отправить сообщение на шлюз во входящий туннель. Для этого отправитель («Алиса») добавляет инструкции в зашифрованное сообщение. Как только конечная точка исходящего туннеля расшифровывает сообщение, оно получит инструкцию, чтобы переслать сообщение на правильный входящий шлюз (шлюз «Боб»).
Третьим важным для понимания пунктом является сетевая база данных NetDB. Несколько алгоритмов, предназначенные для обмена сетевыми метаданными. Существует два типа метаданных: «routerInfo» и «leaseSets»:
routerInfo дает данные о маршрутизаторах, необходимых для обмена данными частных маршрутизаторов (их открытыми ключами, адресами и т.д.), в то время как leaseSet дает маршрутизаторам информацию, необходимую для связи конкретных точек.
LeaseSet содержит блок информации «Lease». Каждое поле определяет туннель из шлюзов, который позволяет достичь получателя. Полная информация, содержащаяся в Lease:
Входящий шлюз для туннеля, который позволяет достичь получателя.
Время, когда туннель устарел.
Пара открытых ключей, чтобы иметь возможность шифрования сообщений (для отправки через туннель и для получателя в пункте назначения).
Маршрутизаторы пересылают свои routerInfo в netDb напрямую, а leaseSets направляются через исходящий туннель (leaseSets должны быть отправлены анонимно, чтобы избежать корреляции маршрутизатора с его leaseSets).
Мы можем объединить вышеуказанные концепции для создания успешно работающей сети.
Для создания собственных входящих и исходящих туннелей, Алиса производит поиск в netDb для сбора routerInfo. Таким образом, она собирает списки пиров, которые она может использовать в качестве Hop (Промежуточных точек) в ее туннелях. Она может отправить сообщение для первого прыжка с просьбой о создании тоннеля и просить, чтобы маршрутизатор отправил запрос на создание туннеля, до того как туннель будет построен.
Когда Алиса хочет послать сообщение Бобу, она сначала выполняет поиск в netDb, чтобы найти leaseSet Боба и получить информацию о текущих входящих туннелях Боба. Затем она выбирает один из своих исходящих туннелей и отправляет сообщение по нему с инструкциями для конечной точки исходящего туннеля, чтобы переслать сообщение на один из шлюзов входящего туннеля Боба.
Когда в исходящем туннеле конечная точка получает эти инструкции, она передает сообщение с запросом и когда входящий шлюз туннеля Боба получает запрос, он направляется вниз по туннелю к маршрутизатору Боба.
Если Алиса хочет чтобы Боб ответил на сообщение, она должна передать инструкцию явно, как часть самого сообщения. Это может быть сделано путем создания более высокого слоя, создание которого осуществляется в потоковой библиотеке. Алиса может также сократить время отклика, вкладывая ее последний leaseSet в сообщение, так что Бобу не нужно делать поиск по netDb для обращения, когда он решит ответить, но это не обязательно.
В то время как сами туннели имеют имеют многослойное шифрования для предотвращения несанкционированного доступа к пирам внутри сети («транспортный слой» зашифрован сам по себе, для предотвращения несанкционированного доступа к участникам сети).
Так же необходимо добавить дополнительный слой шифрования, чтобы скрыть сообщение от исходящей до конечной точки туннеля и шлюза входящего туннеля. Это «чесное шифрование» позволяет маршрутизатору Алисы обернуть несколько сообщений в одно „чеснок сообщение“ (это четвёртый аспект), зашифрованные вместе с открытым ключом, так что посредник не может определить количество сообщений и что они содержат.
Для типичного соединения между Алисой и Бобом, сообщение будет зашифровано с открытым ключом, опубликованным в leaseSet Боба, позволяющий читать шифрованное сообщение на маршрутизаторе Боба, не выдавая открытый ключ
Еще один важный факт. Нужно иметь в виду, что I2P полностью основан на сообщениях, и что некоторые сообщения могут быть утеряны по пути.
Приложения в сети I2P, могут использовать в сообщении собственный интерфейс и заботиться о своем собственном контроле передаче и надёжности, но большинство приложений может адекватно работать используя стандартные библиотеках для передачи данных в сети i2p.
Полное руководство по I2P и как его установить и использовать
СВЯЗАННЫЕ: Как получить доступ к темной сети
I2P против Tor против Freenet
Наиболее распространенным использованием Tor является анонимный доступ к общедоступному Интернету. Пользователи подключаются к сети Tor и проходят через нее в обычный интернет, называемый чистой сетью. Когда Tor работает, интернет-трафик направляется через сеть Tor таким образом, что трудно соотнести запрос, поступающий в сеть Tor, с тем же запросом, выходящим из сети. Кроме того, сервисы могут находиться внутри сети Tor, а это означает, что трафик никогда не выходит из Tor в чистую сеть. I2P имеет ограниченную поддержку для чистого сетевого доступа, но имеет ту же базовую функцию темного веба в том, что он поддерживает сайты, которые существуют внутри сети I2P.
СВЯЗАННЫЕ: полное руководство по Tor
Чеснок маршрутизация
Слово Tor происходит от его технологии маршрутизации под названием The Onion Router. Луковая маршрутизация включает в себя шифрование пакетов данных в слоях шифрования. Каждый узел дешифрует только тот уровень, который ему нужен, чтобы понять, куда отправить пакет дальше. Таким образом, говорят, что уровни шифрования напоминают слои лука. I2P не использует луковую маршрутизацию. Скорее, это использует маршрутизацию чеснока.
Eepsites
Одним из применений Tor является создание службы onion, которая является веб-сайтом, доступным только при подключении к сети Tor. Этот тип использования Tor имеет еще большую анонимность, потому что трафик никогда не покидает сеть Tor, поэтому трудно даже увидеть трафик, не говоря уже о том, чтобы шпионить за ним.
Outproxies
I2P немного отличается от Tor, хотя у них обоих одна цель. Технически возможно настроить выходной узел I2P (называемый outproxy на языке I2P), но на практике I2P обычно не используется таким образом. I2P почти исключительно используется для доступа к сайтам eepsites, а не для анонимного доступа к общедоступному Интернету..
Freenet
Установка клиента I2P
Чтобы начать, скачайте версию клиента I2P, которая соответствует вашей операционной системе, с этой страницы.
I2P требует Java. Если у вас нет подходящей установки Java на вашем компьютере, установка I2P завершится неудачно с сообщением об этом. Затем вы перейдете на домашнюю страницу Java для установки Java, чтобы вы могли продолжить установку.
Выберите опцию Windows Service, если вы хотите, чтобы I2P работал все время, начиная с запуска Windows. Если вы хотите легко включать и выключать I2P по мере необходимости, оставьте этот флажок пустым.
Остальная часть установки очень проста. Если вы оставили настройки по умолчанию одни во время установки, вы увидите группу I2P в меню «Пуск». Выберите один из параметров запуска I2P, чтобы запустить его, а затем щелкните запись консоли маршрутизатора I2P, чтобы просмотреть и настроить маршрутизатор I2P..
Использование I2P
Лекарство от этого заключается в том, чтобы сообщить браузеру использовать I2P-прокси, предоставляемый маршрутизатором. На домашней странице маршрутизатора указано: «Также вы можете настроить свой браузер на использование прокси-сервера I2P для доступа к сайтам. Просто введите 127.0.0.1 (или localhost) порт 4444 в качестве http-прокси в настройках вашего браузера. Не используйте SOCKS для этого ». Он содержит инструкции о том, как настроить прокси для большинства браузеров на странице I2P clearnet здесь..
Если вы правильно настроили прокси, вы сможете просматривать сайты, такие как форум разработчиков I2P по адресу http: //zzz.i2p (сайт)
Для возобновления работы в Интернете вам необходимо удалить эти настройки прокси. Вся эта повторяющаяся конфигурация может быть болезненной, и гораздо проще справиться с ней, используя прокси-плагин, такой как FoxyProxy. FoxyProxy может автоматически использовать I2P-прокси для сайтов и обычный интернет для всего остального с помощью трех простых шагов.
Добавьте плагин FoxyProxy
FoxyProxy доступен для Chrome и Firefox. Имейте в виду, что любой прокси-плагин обязательно увидит весь ваш интернет-трафик, поэтому вам нужно доверять ему.
Добавьте прокси I2P на порт 4444 locahost
Добавьте шаблон URL, чтобы FoxyProxy использовал этот параметр I2P только для веб-сайтов.
Предупреждение: установка Foxyproxy таким образом не будет направлять ваш обычный интернет-трафик через I2P. Он будет использовать ваше обычное интернет-соединение для обычного интернет-трафика и I2P-прокси для сайтов. В следующем разделе больше информации о доступе к веб-сайтам в I2P..
Использование I2P для доступа к веб-сайтам
Как получить доступ к 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, что может поставить под угрозу ее анонимность. Наличие электронных писем гораздо позже устраняет эту возможность корреляции.
В отличие от SusiMail, I2P Bote рассматривает создание учетной записи как вариант и не требует учетной записи для отправки анонимной электронной почты. Если вы хотите получать электронную почту, вам необходимо пройти процесс создания учетной записи..
Проект I2P Bote работает над внедрением Интернета Почтовый шлюз I2P, но в настоящее время он не работает.
Настройка I2P Bote требует немного больше работы. Шаги установки можно найти на странице установки I2PBote (eepsite).
Процесс установки может занять много времени, а индикатор выполнения не позволяет вам узнать, что происходит. Примерно через пять минут я обновил домашнюю страницу маршрутизатора I2P и был награжден новым значком Bote SecureMail..
В настоящей темной моде нет необходимости создавать какие-либо учетные записи или идентификаторы для отправки электронной почты с помощью Bote. Вы можете нажать значок + в правом нижнем углу экрана, ввести электронное письмо и отправить его с полной анонимностью. Однако вы не сможете получать электронную почту, поскольку вы полностью анонимны. Если вы хотите получать электронную почту, вам нужно будет создать личность.
Как настроить свой собственный сайт (сайт I2P)
Ваш I2P роутер поставляется с готовым к работе сайтом eeepsite, вам просто нужно добавить контент.
Чтобы просмотреть инструкции по правильной настройке, нажмите кнопку веб-сервера или вставьте ее в адресную строку маршрутизатора I2P: http://127.0.0.1:7658/help/
Добавление функциональности к вашей консоли I2P
I2P поставляется с базовым набором инструментов, который большинство темных веб-пользователей ищут прямо в комплекте. На главной странице маршрутизатора I2P есть инструменты для IRC, передачи файлов, электронной почты и веб-серверов, а также многих других. Эта функциональность может быть расширена с помощью инфраструктуры плагинов I2P, хотя очень мало плагинов доступно.
Хранилище подключаемых модулей I2P находится на веб-сайте I2P (веб-сайт). Весьма вероятно, что злоумышленник или наблюдатель получат много пользы от обмана пользователя I2P при установке плагина наблюдения, поэтому не забудьте получить плагины из этого официального репозитория, а не из ненадежных сторонних источников..
Поиск контента по I2P
В отличие от прозрачной паутины, темные паутины не совсем способствуют продвижению своих сайтов. Google для «темной сети» не существует, и даже если она была, многие темные веб-сайты работают вверх и вниз из-за их неортодоксальных настроек хостинга. Сказав это, есть несколько мест, где вы можете найти услуги I2P, если у вас нет конкретного места назначения
I2P FAQ
Есть много неправильных представлений о I2P; что это такое и почему это не Tor. Многие из этих вопросов рассматриваются на странице часто задаваемых вопросов I2P (eepsite).
Отслеживание ошибок I2P
Заключительные слова об использовании I2P и анонимности
Раскрываем секреты сети I2P
В свете тотальной слежки многие пользователи посматривают в сторону решений, позволяющих скрыть свою частную жизнь от чужих глаз. Два наиболее популярных варианта — это Tor и I2P. Tor уже не раз мелькал на страницах журнала, и с его надежностью, в принципе, все понятно — сами разработчики пишут, что стопроцентной анонимности он не дарует. А вот с I2P нам сегодня придется разобраться самостоятельно — действительно ли эта штука так надежна, как считают многие?
Немного истории
В начале 2000-х годов существовало множество P2P-сетей, практическим применением которых был файлообмен. Копирастеры приходили в ярость, поскольку в распространении файлов принимали участие все сразу. Попытки же устроить «показательную порку» индивидуумам приводили лишь к колоссальным затратам времени и средств с нулевым конечным результатом. Для тех же, кто опасался оказаться в числе «попавших под раздачу», была предложена сеть Freenet, ключевой идеей которой был обмен зашифрованными блоками данных, при этом участник не имел представления о том, что это за данные, если они не были предназначены ему самому. Хотя сеть предоставляла и другие сервисы вроде полностью анонимных форумов, фактически все сводилось к скачиванию файлов.
Задачи I2P
Основные задачи I2P следующие:
WARNING
I2P и Тор
«Спусковым крючком», вызвавшим массовый интерес к «невидимому интернету», стало законодательное ограничение доступа к информационным ресурсам в ряде стран, а также разоблачения Сноудена о слежке за всеми. Разумеется, многим это не понравилось: действительно, с какой стати непонятно кто станет решать за взрослого дееспособного человека, какую информацию ему следует получать, а какую нет. Что касается слежки, то она вообще никому не приятна. Осознав это, обыватель бросился искать две магические кнопки «Обойти цензуру» и «Спрятаться от слежки». И такие «кнопки» он получил в виде специальных браузеров или плагинов к браузерам для сети Tor.
Технически грамотные люди же обратили внимание на сеть I2P в качестве альтернативы Tor’у. Поскольку ты, уважаемый читатель, относишься к технически грамотным людям (иначе зачем тебе «Хакер»?), то, прочитав данную статью, поймешь, какие задачи решает сеть I2P и каким образом она это делает.
Следует обратить внимание на главное отличие I2P от Tor: основной задачей Tor’а является сокрытие истинного IP-адреса клиента, обращающегося к серверу. По большому счету серверам нет дела до того, каким образом к ним подключаются клиенты, — скорее, Тоr является для них лишней головной болью из-за хулиганов, в случае же I2P, наоборот, владельцы серверов (eepsite’ов) размещают их анонимно, а клиенты вынуждены использовать I2P, если хотят обращаться к этим серверам. Таким образом, Тоr является сетью клиентов, а I2P — серверов. Конечно, есть и onion-сайты в Тоr, и выходные узлы в I2P, однако это скорей побочные технологии.
Myth busters
В Сети гуляет несколько популярных мифов о I2P, в которые многие верят. Мы же их развеем.
Миф 1: чем больше участников, тем быстрее работает сеть.
А на самом деле: каждый новый участник должен поддерживать свою базу данных в актуальном состоянии, поэтому сеть, а особенно floodfill’ы просто захлебнутся в потоке таких запросов. В результате часть узлов станет просто недоступной другим узлам.
Миф 2: чем больше доля транзитного трафика, тем выше анонимность.
А на самом деле: I2P оперирует отдельными пакетами, поэтому реальные тоннели поверх обычного интернета, как, например, в VPN, не строятся. Для каждого пакета выбирается подходящий способ доставки, независимо от того, свой ли это пакет или транзитный. Провайдер же видит активность участника как обмен зашифрованными пакетами с различным адресами, выбираемыми достаточно бессистемно. В этом потоке, помимо тоннельных сообщений, присутствуют в большом количестве сообщения, передаваемые напрямую. С другой стороны, узел может видеть часть транзитного трафика, если является концом тоннеля, а не промежуточным узлом, в этом случае извне транзитный тоннель выглядит точно так же, как собственный.
Миф 3: в Тоr’е применяется многослойное «луковое» шифрование, а в I2P более прогрессивное «чесночное», в котором сообщение состоит из нескольких «чесночин», предназначенных разным узлам, при этом узел может расшифровать только свою «чесночину», содержимое остальных ему неизвестно.
А на самом деле: изначально оно именно так и планировалось, однако из-за необходимости использования тоннелей парами «исходящий — входящий» пришлось шифровать весь «чеснок» целиком, а не каждую «чесночину» по отдельности. Действительно сообщение, явно именуемое «чесноком», состоит из «чесночин», но поскольку его структура становится видна только после расшифровки, то «чесночины» фактически вырождаются во фрагменты тоннельных сообщений.
Как должно выглядеть реальное «чесночное» шифрование, можно понять из механизма создания тоннелей: сообщение состоит из нескольких записей, из них зашифрованы все, кроме одной, предназначенной данному узлу; он перешифровывает сообщение своим ключом и отсылает дальше. Естественно, следующему узлу предназначается уже другая запись сообщения.
Таким образом, декларируемое «чесночное» шифрование применяется всего лишь в одном сообщении, используемом относительно редко, в основном же потоке данных используется обычное многослойное шифрование: промежуточные узлы шифруют сообщение каждый своим ключом, а владелец расшифровывает, применяя эти ключи последовательно.
Как участники I2P находят друг друга?

Хакер #182. Все о Bitcoin
У каждого участника эта база своя, и одной из задач программы-клиента является поддержка базы в актуальном состоянии. Если узел с искомым хешем в локальной базе не найден, то следует о нем спросить другие узлы; если у запрашиваемого узла адрес присутствует в базе, то он пришлет в ответ информацию о нем, в противном случае вернет список трех других узлов, где, по его мнению, адрес может быть. То есть, чтобы узнать информацию об узле, нужно знать по крайней мере его хеш — возможность скачать список всех известных на данный момент узлов умышленно отсутствует. Также предусмотрен механизм «зондирования», при котором посылается запрос случайно сгенерированного хеша со специальным флагом, и тогда узел вернет список трех узлов, присутствующих в его базе, хеши которых наиболее «близки» к запрошенному, тем самым позволяя узнать о новых участниках.
Обманываем новичков
Наличие локальной базы данных позволяет участнику выходить в сеть немедленно, не обращаясь к серверам каталогов узлов, как это делается в Тоr’е (из-за этого китайское правительство в 2010 году смогло отключить его, блокировав доступ к каталогам). Однако у такой децентрализации есть один существенный недостаток: чтобы получать информацию о новых узлах, в локальной базе данных должны уже присутствовать какие-то узлы. Значит, при первом запуске их придется откуда-то загрузить. Этот процесс называется «посевом» (reseeding) и заключается в скачивании файлов с небольшого числа жестко прописанных в коде сайтов. Достаточно заблокировать доступ к этим сайтам, и новые узлы не смогут стартовать. Правда, в этом случае для первого запуска можно просто взять список узлов у кого-то другого. Гораздо хуже, если доступ будет не заблокирован, а перенаправлен на сайты с фальшивым списком узлов, — тем самым новый узел рискует попасть в изолированную от остальной сеть, и нет простого способа распознать эту ситуацию. К чести разработчиков, они понимают масштаб проблемы и работают над тем, чтобы распространять начальный список узлов в виде подписанного их ключом архива по различным каналам.
Невидимый интернет
Сеть I2P состоит из узлов двух видов: маршрутизаторы, имеющие помимо I2P-адресов обычные IP-адреса и видимые в обычном интернете, и узлы, находящиеся позади маршрутизаторов и собственных IP-адресов не имеющие, — они и образуют тот самый «невидимый интернет». Маршрутизаторы представлены в сетевой базе данных структурой RouterInfo, помимо полного идентификатора содержащей один или несколько внешних IP-адресов и доступных протоколов, а также список возможностей данного маршрутизатора, важнейшей из которых является floodfill. Floodfill-маршрутизаторы служат своего рода «досками объявлений», куда узлы публикуют информацию о себе и куда приходят запросы клиентов. Во избежание подделки данные подписываются ключом, входящим в адрес. Поскольку информация о маршрутизаторе меняется довольно редко, то соответствующие файлы сохраняются на диске и загружаются в память при старте. У нормально функционирующего I2P-клиента таких файлов должно быть порядка нескольких тысяч.

«Невидимый интернет» представлен структурами данных LeaseSet, содержащих полный идентификатор, дополнительный ключ шифрования и список тоннелей, ведущих к маршрутизатору с данным узлом. Хотя входящие тоннели имеются и у самих маршрутизаторов, они никогда не формируют LeaseSet’ы: к маршрутизаторам всегда следует обращаться, устанавливая с ними прямые соединения, тоннели же используются только для получения ответов на запросы. Поскольку продолжительность жизни одного тоннеля десять минут, то LeaseSet’ы также существуют недолгое время и поэтому на диске не сохраняются, а при рестарте перезапрашиваются по новой. Тоннели и ключ шифрования из LeaseSet’а являются единственным способом обращения к «невидимому» узлу, то есть, зная адрес, следует сначала запросить его LeaseSet у ближайшего к нему floodfill’а и потом отправить сообщение в один из тоннелей. Для получения ответа требуется сформировать собственный LeaseSet, который можно отправить вместе с сообщением или же опубликовать на ближайшем floodfill’е.
Невозможность установить, на каком маршрутизаторе располагается тот или иной LeaseSet, является краеугольным камнем технологии обеспечения анонимности в сети I2P. Соответственно, большинство атак злоумышленников направлены на решение противоположной задачи. С этой целью в I2P для передачи информации используется сильная криптография, скрывающая данные от особо любопытных провайдеров разных уровней, а удачно применяемые электронные подписи делают сеть устойчивой к атакам типа man-in-the-middle.

Перехватываем тоннели
Для обеспечения анонимности внутри I2P применяются тоннели, представляющие собой цепочки маршрутизаторов, через которые передаются сообщения. Тоннели бывают исходящие и входящие. Исходящие предназначены для сокрытия местоположения отправителя, а входящие — получателя. Потому LeaseSet’ы и представляют собой список входных узлов и идентификаторов входящих тоннелей, информация об исходящих тоннелях не публикуется. Местоположение второго конца тоннеля держится в секрете. Для получения ответов клиент посылает серверу собственный LeaseSet. Каким путем проложен тоннель и, соответственно, на каком узле находится его второй конец, известно только создателю тоннеля. Все промежуточные участники тоннеля знают лишь следующий узел, которому следует передать перешифрованное сообщение. Но это в теории — на практике же промежуточные узлы также знают, откуда пришло сообщение, потому что сообщения между узлами передаются по обычному интернету и узнать IP-адрес отправителя не составляет труда. Далее, при достаточном размере базы можно найти и RouterInfo. Таким образом, если промежуточный узел тоннеля принадлежит злоумышленнику, то он немедленно узнает и двух своих соседей, что компрометирует одно- или двухшаговые тоннели, поскольку позволяет отследить всю цепочку. Теоретически можно увеличить длину тоннелей вплоть до восьми узлов, практически же каждый дополнительный узел резко замедляет скорость работы и надежность, поскольку присутствие узла онлайн на все время существования тоннеля не гарантировано. Поэтому в настоящий момент в I2P используются трехшаговые тоннели. Таким образом, для успешной деанонимизации узла злоумышленнику следует узнать маршрут любого из тоннелей в любой момент времени — для этого достаточно, чтобы два узла одного тоннеля были доступны злоумышленнику. При нынешнем размере сети в несколько тысяч узлов такой сценарий вполне по силам крупным структурам. Если в деанонимизации серверов ранее описанный перехват reseeding’а мало поможет, поскольку серверы выбирают узлы входящих тоннелей сами, то для выявления клиентов, посещающих «неблагонадежные» ресурсы, данный метод идеален: все узлы, в том числе выходные, используемые клиентом для построения его исходящих тоннелей, будут априори принадлежать злоумышленнику. Тем самым сразу станет известно, откуда пришло сообщение, предназначенное какому-нибудь входящему тоннелю сервера.

Атака методом исключения
Для тех, кто не обладает достаточными ресурсами по захвату большого числа узлов, однако располагает временем и терпением, подойдет другой способ. Цель его — резкое сужение круга «подозреваемых» маршрутизаторов (при должном везении даже до одного), на которых может располагаться искомый узел. Возможность проведения такой атаки обусловлена P2P-природой сети I2P — большинство маршрутизаторов сети не находятся онлайн 24 часа в сутки, поскольку располагаются на компьютерах ее участников. С другой стороны, эксплуатируются особенности I2P:
Перед началом атаки злоумышленник набирает достаточно обширную базу, предполагая, что в ней находится и маршрутизатор атакуемого узла. Далее он начинает постоянно обращаться к атакуемому узлу с запросом, предполагающим получение ответа. Это можно делать ненавязчиво, главное, чтобы запрос-ответ шли постоянно, тем самым злоумышленник определяет временные интервалы, когда атакуемый узел и, соответственно, его маршрутизатор находится онлайн. Одновременно с этим оставшиеся маршрутизаторы опрашиваются путем установления непосредственного соединения, отправки какого-нибудь запроса или создания тоннеля. Делается это массово в течение максимально короткого промежутка времени. Те маршрутизаторы, которые оказались неактивными в то время, как атакуемый узел показывает активность, выбрасываются из списка, и наоборот — выбрасываются активные, когда узел неактивен. Если же атакуемый узел активен все время, то в конце концов список будет состоять из постоянно активных маршрутизаторов. И он может оказаться достаточно большим. Вот тут на помощь злоумышленнику и приходят перечисленные выше особенности: входные маршрутизаторы тоннелей, входящих в LeaseSet атакуемого узла, заведомо не являются его маршрутизатором и могут быть немедленно исключены. LeaseSet обновляется не реже чем раз в десять минут и обычно содержит пять тоннелей. За час будут исключены 30 узлов, за сутки 720, таким образом, перебор списка в 5 тысяч узлов займет не более недели.
Определяем соседей по запаху чеснока
Для обеспечения анонимности с обеих сторон тоннели используются парами: исходящий тоннель отправителя и входящий тоннель получателя. Поскольку тоннели создаются независимо друг от друга, то выходной и входной маршрутизаторы в месте соединения тоннелей видят незашифрованные передаваемые данные. Поэтому поверх тоннельного используется дополнительный уровень шифрования — специальное «чесночное» сообщение, полностью зашифрованное и предназначенное для конечных узлов в цепочке. Проблема заключается в том, что расшифровкой таких сообщений занимается маршрутизатор узла, а не сам узел. Таким образом, ключ шифрования, присутствующий в полном идентификаторе, не используется, вместо этого в LeaseSet’е присутствует предназначенный для шифрования отдельный ключ, сгенерированный маршрутизатором, на котором располагается данный LeaseSet. При этом ключ должен быть одним и тем же для всех расположенных на маршрутизаторе узлов, даже если каждый LeaseSet использует свой собственный набор тоннелей. Иначе и нельзя, поскольку «чесночное» сообщение должно быть расшифровано до того, как станет понятно, кому предназначена та или иная «чесночина». В результате изначально здравая идея «чесночной» передачи данных обрела столь уродливую форму при передаче через пару тоннелей. Таким образом, ключ шифрования, публикуемый в LeaseSet’е, является уникальным идентификатором соответствующего маршрутизатора. Достаточно скомпрометировать любой из узлов, чтобы также скомпрометировать все остальные, в том числе и клиентские. Для проведения данной атаки злоумышленнику следует запустить один или несколько floodfill’ов, куда узлы будут публиковать свои LeaseSet’ы.
Выводы
Суммируя вышесказанное, приходим выводу: анонимность I2P в нынешнем состоянии носит лишь базовый характер, позволяя укрыться только от пассивного наблюдения, вроде сбора маркетологической информации. Безусловно, проведение данных типов атак требует серьезных ресурсов, вроде высокоскоростных серверов и специализированного софта, но если кому-то сильно понадобится, то он сможет раскрыть анонимность довольно быстро. Увеличение числа узлов в сети могло бы решить данную проблему, однако при нынешней организации сети это приведет к ее фактическому коллапсу. В то же самое время I2P прекрасно подходит для построения «неубиваемых» ресурсов, доступ к которым невозможно ограничить в принципе.


















