Сеть I2P является оверлейной, устойчивой (отключение узла не повлияет на функционирование сети), анонимной (невозможно или сложно определить IP-адрес узла) и децентрализованной[6] (не имеющей центрального сервера). При передаче данных между узлами сети применяется сквозное шифрование.
I2P — это анонимная самоорганизующаяся распределённая сеть, которая использует модифицированный DHTKademlia, но отличается тем, что хранит в себе хешированныеадресаузлов сети, зашифрованные AESIP-адреса, а также публичные ключи шифрования, причём соединения по network database тоже зашифрованы. Сеть предоставляет приложениям транспортный механизм для анонимной и защищённой пересылки сообщений друг другу[7]. Хотя сеть I2P ставит основной задачей определение пути передачи пакетов, благодаря библиотеке Streaming lib реализована также и их доставка в первоначально заданной последовательности без ошибок, потерь и дублирования, что даёт возможность[8] использовать в сети I2P IP-телефонию, интернет-радио, IP-телевидение, видеоконференции и другие потоковые протоколы и сервисы.
Внутри сети I2P работает собственный каталог сайтов, электронные библиотеки, а также торрент-трекеры. Кроме того, существуют шлюзы для доступа в сеть I2P непосредственно из Интернета, созданные специально для пользователей, которые по разным причинам не могут установить на компьютер программное обеспечение проекта «Невидимый Интернет»[8].
Особенности сети
Сеть I2P отличается использованием механизмов шифрования, P2P-архитектурой и переменными посредниками (хопами). Этот способ предполагает увеличение сложности деанонимизации, MITM-атак и делает полностью невозможной прозрачную для пользователя подмену пакетов.
В настоящий момент элементом сети является своеобразная реализация обычных DNS-серверов. От привычных DNS он отличается в следующих аспектах[9]:
Для определения хеш-суммы получателя используется локальная база адресов[10].
База адресов периодически обновляется с серверов имён, тогда как в традиционных DNS адрес определяется по запросу к нему (однако в некоторых ОС и браузерах осуществлено кэширование).
Поддомены не привязаны к домену-родителю, однако поставщик адресных подписок волен ограничить регистрацию субдоменов по разрешению домена-родителя.
Возможно использование нескольких серверов имён. В официальной реализации роутера конфликты решаются по схеме «первым пришёл — первым обслужен», но хеш-суммы получателя, явно указанные пользователем в адресных базах «privatehosts» и «userhosts», идут первыми — то есть имеют большее влияние, чем подписки.
Поскольку сеть одноранговая, адреса являются хешами, которые хопы адресующего (посредники) используют для адресации посредникам адресата.
Серверы имён находятся внутри одноранговой сети, хотя технически возможно обновлять базу извне.
Большинство серверов имён, в противоположность регистраторам внешних имён, на настоящий момент не требует платы за регистрацию доменов в своей базе. Основной критерий — доступность сервера по хеш-сумме получателя.
После создания тоннеля для передачи данных время его существования не превышает 10 минут.
Для создания тоннеля передачи данных каждый раз выбирается уникальная последовательность узлов.
Поскольку сеть является одноранговой и децентрализованной, скорость и надежность сети напрямую зависят от участия людей в передаче чужого трафика.
Для доступа в I2P необходимо установить на своем компьютере программу-маршрутизатор, которая (де)шифрует, (раз)сжимает трафик и направляет его пирам в I2P. Для работы с внутрисетевыми сайтами необходимо настроить браузер для направления HTTP-пакетов роутеру, слушающему определённый порт. Для обращения к внешнему Интернету через I2P необходимо использовать прокси-серверы изнутри I2P (outproxy), которых на настоящее время мало. Также внутренние сайты в сети I2P доступны из внешнего Интернета через прокси-сервер[10].
Шифрование в сети I2P
Сеть изначально была спроектирована с учётом предположения, что все промежуточные узлы являются скомпрометированными или злонамеренными, поэтому для противодействия был введён ряд активных мер[11].
Весь трафик в сети шифруется от отправителя до получателя. В сумме при пересылке сообщения используется четыре уровня шифрования (сквозное, чесночное, туннельное, а также шифрование транспортного уровня), перед шифрованием в каждый сетевой пакет автоматически добавляется небольшое случайное количество случайных байт, чтобы ещё больше обезличить передаваемую информацию и затруднить попытки анализа содержимого и блокировки передаваемых сетевых пакетов. В качестве адресов сети используются криптографические идентификаторы, представляющие собой открытые криптографические ключи. IP-адреса в сети I2P не используются нигде и никогда, поэтому определить истинный адрес какого-либо узла в сети не представляется возможным[8]. Каждое сетевое приложение на компьютере строит для себя отдельные шифрованные, анонимные туннели. Туннели в основном одностороннего типа (исходящий трафик идёт через одни туннели, а входящий — через другие) — направление, длину, а также, какое приложение или служба создали эти туннели, выяснить крайне трудно[8]. Все передаваемые сетевые пакеты имеют свойство расходиться по нескольким разным туннелям, что делает бессмысленным попытки прослушать и проанализировать с помощью сниффера проходящий поток данных. Также происходит периодическая смена (каждые 10 минут) уже созданных туннелей на новые, с новыми цифровыми подписями и ключами шифрования (цифровые подписи и ключи шифрования, разумеется, у каждого туннеля свои). По этим причинам нет необходимости[8] беспокоиться о том, чтобы прикладные программы обеспечивали шифрование своего трафика. Если существует недоверие к шифрованию программ, имеющих закрытый исходный код (как, например, Skype), возможно решить проблему программами IP-телефонии (такими, как Ekiga), передающими трафик в открытом виде. В любом случае сеть I2P произведет четырёхуровневое шифрование всех пакетов и обезопасит передачу/приём всех данных[8].
В сети I2P все пакеты зашифровываются на стороне отправителя и расшифровываются только на стороне получателя, при этом никто из промежуточных участников обмена не имеет возможности перехватить расшифрованные данные и никто из участников не знает, кто на самом деле отправитель и кто получатель, так как передающий пакеты узел может быть отправителем, а может быть таким же промежуточным узлом, а следующий узел, которому нужно этот пакет отправить, может быть получателем, а может быть тоже таким же промежуточным узлом, узнать конечные точки отправителя и получателя промежуточный узел никак не может, так же как не может узнать, что произошло с только что переданным следующему узлу пакетом — обработал ли тот его или передал куда-то дальше, выяснить нельзя[8].
В I2P-сети используются (для разных уровней и протоколов) следующие системы и методы шифрования и подписи[8]:
Проект I2P был начат в 2003 году для поддержки тех, кто заинтересован в новом нецензурируемом, анонимном средстве общения и распространения информации. I2P — это попытка создать защищённую децентрализованную анонимную сеть с малым временем отклика и свойствами автономности, отказоустойчивости и масштабируемости. Конечной задачей является способность функционировать в жёстких условиях, даже под давлением организаций, обладающих значительными финансовыми или политическими ресурсами. Все аспекты сети доступны в виде исходного кода и бесплатны. Это позволяет пользователям убедиться, что программное обеспечение делает именно то, что заявлено, и облегчает сторонним разработчикам возможность совершенствовать защиту сети от настойчивых попыток ограничить свободное общение[12].
С середины 2013 года активно разрабатывается I2Pd, альтернативный клиент с открытым исходным кодом для сети i2p[14], написанный на языке программирования C++ с различиями в подходе к шифрованию. Над ним трудится команда независимых разработчиков, часть которых — из России, что может сказываться на доверии к домену для некоторых пользователей в отсутствие независимых аудитов исходного кода[источник не указан 132 дня]. В i2pd время от времени находят критические уязвимости. Краткий перечень отличий от официального клиента: меньший размер приложения, полное отсутствие в официальной сборке сторонних программ, интеграция с приложениями, написанными на C++, экономичное использование ресурсов компьютера, а также более высокая скорость работы в сети.
Существующие уязвимости
Подмена узлов
Данный метод атаки на сеть возможно реализовать достаточно малым использованием ресурсов (для успешной атаки необходимо захватить всего около 2 % всех узлов сети). Однако этот способ ограничивает возможности атаки захватом 20 % от всех floodfill’ов сети[15].
Для осуществления атаки злоумышленнику необходимо заменить исправные узлы сети (которые уже активны в ней) на скомпрометированные. Для этого необходимо вывести из строя исправные узлы, при этом заменяя их своими. Атакующему следует заменять узлы сети на основные узлы (сконфигурированные как manual). Выведение из строя рабочих узлов сети не является обязательным
условием выполнения атаки — маршрутизаторы узлов в сети являются обычными компьютерами пользователей, поэтому не всегда участвуют в сети, при этом узлы отключаются и при перезагрузке маршрутизатора (например, при обновлении ПО). Сама сеть не подключает новые узлы, пока не требуется новых участников или нет недостатка в ресурсах. Следовательно, для более легкого замещения узлов достаточно дождаться отключения одного из узлов от сети, заняв его место своим узлом[15].
Для ускорения процесса, наряду с ожиданием самостоятельного отключения одного из узлов от сети замещения узлов, атакующий может вызывать переполнение стека задач у рабочих узлов (так называемый job lag). Заключается он в проведении DoS-атаки на узел. Атакующему необходимо создать много новых тоннелей через атакуемый узел, чтобы в дальнейшем заполнить очередь его задач непрерывными запросами через каждый тоннель. При этом происходит большая задержка выполнения задач, и узел исключает себя из списка floodfill’а[15].
Тоннели представляют собой цепочки маршрутизаторов, через которые передаются сообщения. Тоннели бывают исходящие и входящие. Исходящие предназначены для сокрытия местоположения отправителя, а входящие — получателя.
При использовании нестандартно коротких туннелей — 0, 1, 2 хопа — существует повышенный риск деанонимизации всех участников тоннеля. Поскольку информация о получателе и отправителе передается вместе с самим сообщением в IP-пакете (так как данные
передаются по обычному незащищенному каналу), промежуточный узел знает получателя и отправителя пакета, поэтому атакующий, контролирующий промежуточный узел, может строить предположения о начальном и конечных узлах.
Такая проблема разрешается увеличением длины тоннеля, однако сильно замедляет работу сети по передаче сообщений. На данный момент в сети по умолчанию используются трехшаговые тоннели, что делает данный тип атаки практически неприменимым, только если злоумышленник не контролирует 2 из 3 промежуточных узлов одного тоннеля[16].
Атака методом исключения
Данная атака использует уязвимости I2P, которые обусловлены
наличием у данной сети свойств P2P-сетей, а именно: непостоянное время работы
маршрутизаторов сети (которые являются обычными компьютерами участников сети),
а также некоторые правила туннелирования[16]:
квота в 10 минут на существование тоннеля;
невозможность участия узла дважды в одном и том же тоннеле;
правило построения уникальной последовательности узлов для каждого тоннеля;
Для проведения атаки злоумышленник составляет список
маршрутизаторов сети, потенциально являющихся узлами для тоннеля с атакуемым
конечным узлом (сам атакуемый узел в список не включается). Далее атакующий
начинает посылать непрерывные запросы атакуемому узлу с целью выяснения
промежутков времени, когда маршрутизатор находится онлайн. В случае активного
узла (текущее состояние: «онлайн») злоумышленник проверяет
подготовленный список узлов с целью поиска неактивных узлов среди них при
помощи рассылки единовременных запросов каждому из них. Если при
опросе конкретного узла ответ получен не был (текущее состояние: «офлайн»),
то маршрутизатор исключается из списка узлов. Аналогичные действия проводятся и
в обратном случае: если атакуемый узел неактивен, из списка исключаются
активные в данный момент узлы. Таким образом, в конечном итоге список будет
состоять из постоянно активных маршрутизаторов. Следующим этапом отсева узлов
из списка будет эксплуатация правил построения тоннелей, описанных выше:
исключаются маршрутизаторы тоннелей, входящие в LeaseSet[17] атакуемого узла; также принимается
во внимание квота на время работы тоннеля[16].
Оценка скорости работы данного метода: на перебор 5 тысяч
узлов предварительного списка будет затрачено около 7 дней работы алгоритма[16].
Атака типа «Sybil attack»
Для проведения атаки типа «Sybil attack» вполне достаточно одного
атакующего и требуется небольшое количество ресурсов. Данный метод обеспечивает возможность захвата контроля над несколькими floodfill-узлами в определённой области пространства ключей[англ.]. Поскольку атакующий не может достаточно быстро запустить в сеть скомпрометированные узлы
(например, используя атаки методом исключения), этот способ отличается от
других отсутствием захвата контроля над конкретным узлом (не являясь его
владельцем). В данном случае атакующий может сгенерировать большое количество идентификаторов узлов локально, и затем выбрать для использования наиболее подходящие (те, что находятся ближе любого исправного узла в базе данных)[15].
Для того чтобы данная атака принесла результаты, требуется некоторое время, поскольку при подключении нового узла к сети требуется около
часа на обработку этим узлом информации о других узлах сети[15].
Данная атака может применяться, например, для закрытия
доступа узлам сети к определённой информации (например, ключу, который указывает на узел с определённым сервисом). Скомпрометировав ближайших
соседей определённого узла, можно добиться, чтобы при обращении к этому узлу за
адресом сервиса сети досрочно возвращался запрос о неопределенности сервиса (ориг., not knowing the resource)[15].
Основные приложения, доступные для использования внутри сети I2P
iMule — свободный анонимный клиент файлообменной сети, который использует анонимные соединения с помощью сети I2P и сети Kad.
Floodfill router — маршрутизаторы, которые обладают полностью актуальной базой NetDB либо близкой к актуальной. Являются приоритетными кандидатами на узлы тоннелей. Для получения статуса Floodfill необходимо поддерживать обновление базы данных узлов до актуальной.
XD — автономный битторрент-клиент для сети i2p. Работает через SAM bridge, в том числе и с i2pd[19].
↑Анонимность в сети Интернет // КомпьютерПресс : журнал. — 2010. — № 9.
↑ 12345678Денис Колисниченко. Анонимность и безопасность в Интернете: от "чайника" к пользователю. — БХВ-Петербург, 2011. — С. 44, 46, 47. — 240 с. — ISBN 978-5-9775-0363-1.
↑ 12Juan Pablo Timpanaro, Isabelle Chrisment, Olivier Festor.Monitoring the I2P network // INRIA Nancy-Grand Est. — Henri Poincar´e University, France, 2011. — С. 5—7. Архивировано 13 декабря 2014 года.
↑Adrian Crenshaw. Darknets and hidden servers: Identifying the true IP/network identity of I2P service hosts // In the Proceedings of Black Hat 2011. — Washington, DC, 2011.
↑Lars Schimmer. Peer Profiling and Selection in the I2P Anonymous Network. — 2011.
↑D.e.I. Abou-Tair, L. Pimenidis, J. Schomburg, B. Westermann. Usability Inspection of Anonymity Networks. — Technical University of Dresden. — 2009. — 76 с. — ISBN ISSN 1430-211X.
↑ 123456Christoph Egger, Johannes Schlumberger, Christopher Kruegel, Giovanni Vigna.3.2 Sybil attack; 3.3 Eclipse attack // Practical Attacks Against the I2P Network. — 16th International Symposium on Research in Attacks, Intrusions and Defenses (RAID 2013), 2013-10. — С. 8—9. Архивировано 26 декабря 2014 года.
Стек протоколов I2P и немного о TOR — Глава из книги Ю. А. Семенова «Telecommunication technologies — телекоммуникационные технологии», посвящённая стеку протоколов I2P и его сравнению с сетью Tor.