Эта статья входит в число добротных статей

I2P (I2P)

Перейти к навигации Перейти к поиску
I2P
Логотип программы I2P
Скриншот программы I2P
Тип свободное и открытое программное обеспечение, Оверлейная сеть, мобильное приложение и peer-to-peer software[вд]
Написана на Java[3] и C++[4][5]
Операционные системы Windows, Linux, macOS, OpenBSD, FreeBSD и Android
Языки интерфейса английский, испанский, немецкий, русский и французский
Первый выпуск 2003[1]
Аппаратные платформы Java Virtual Machine и Android
Последняя версия
Репозиторий github.com/i2p/i2p.i2p
[cvs://cvs.i2p.net/cvsroot/ cvs.i2p.net/cvsroot/]
[cvs://cvs.invisiblenet.net:/cvsroot/freeweb cvs.invisiblenet.net:/cv…]
Лицензия BSD, GNU GPL, лицензия MIT и 🅮[вд]
Сайт geti2p.net (англ.)
Логотип Викисклада Медиафайлы на Викискладе

I2P (аббревиатура от англ. invisible internet project, IIP, I2P — проект «Невидимый интернет») — анонимная компьютерная сеть.

Сеть I2P является оверлейной, устойчивой (отключение узла не повлияет на функционирование сети), анонимной (невозможно или сложно определить IP-адрес узла) и децентрализованной[6] (не имеющей центрального сервера). При передаче данных между узлами сети применяется шифрование.

Внутри сети I2P можно разместить любой сервис (или службу) (форум, блог, файлообменник, электронную почту, систему для мгновенного обмена сообщениями (чат), систему для совместного использования файлов, VoIP и т. д.) с сохранением анонимности сервера. В сети I2P работают http-серверы; адреса сайтов находятся в псевдодоменном пространстве «.i2p». Поверх сети I2P можно строить одноранговые сети (P2P), например, BitTorrent, eDonkey, Kad, Gnutella и так далее.

I2P — это анонимная самоорганизующаяся распределённая сеть, которая использует модифицированный DHT Kademlia, но отличается тем, что хранит в себе хешированные адреса узлов сети, зашифрованные AES IP-адреса, а также публичные ключи шифрования, причём соединения по 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]:

  1. 256-битовый AES-режим CBC с PKCS#5;
  2. 2048 битовая схема Эль-Гамаля;
  3. 2048-битовый алгоритм Диффи — Хеллмана;
  4. 1024 битовый DSA;
  5. 256-битовый HMAC — алгоритм усиления криптостойкости других криптоалгоритмов;
  6. 256-битовое хеширование SHA256.

История сети I2P

[править | править код]

Проект I2P был начат в 2003 году для поддержки тех, кто заинтересован в новом нецензурируемом, анонимном средстве общения и распространения информации. I2P — это попытка создать защищённую децентрализованную анонимную сеть с малым временем отклика и свойствами автономности, отказоустойчивости и масштабируемости. Конечной задачей является способность функционировать в жёстких условиях, даже под давлением организаций, обладающих значительными финансовыми или политическими ресурсами. Все аспекты сети доступны в виде исходного кода и бесплатны. Это позволяет пользователям убедиться, что программное обеспечение делает именно то, что заявлено, и облегчает сторонним разработчикам возможность совершенствовать защиту сети от настойчивых попыток ограничить свободное общение[12].

Многие из команды разработчиков I2P ранее участвовали в проектах IIP[англ.] и Freenet. Но, в отличие от последних, «Проект невидимый Интернет» — это анонимная одноранговая распределённая коммуникационная среда, с которой могут работать как любые традиционные сетевые службы и протоколы, такие как электронная почта, IRC, HTTP, Telnet, так и распределённые приложения вроде баз данных, Squid и DNS[13].

С середины 2013 года активно разрабатывается I2Pd, альтернативный клиент с открытым исходным кодом для сети i2p[14], написанный на языке программирования C++ с различиями в подходе к шифрованию. Над ним трудится команда независимых разработчиков, часть которых — из России, что может сказываться на доверии к домену для некоторых пользователей в отсутствие независимых аудитов исходного кода[источник не указан 103 дня]. В i2pd время от времени находят критические уязвимости. Краткий перечень отличий от официального клиента: меньший размер приложения, полное отсутствие в официальной сборке сторонних программ, интеграция с приложениями, написанными на C++, экономичное использование ресурсов компьютера, а также более высокая скорость работы в сети.

Существующие уязвимости

[править | править код]

Подмена узлов

[править | править код]

Данный метод атаки на сеть возможно реализовать достаточно малым использованием ресурсов (для успешной атаки необходимо захватить всего около 2 % всех узлов сети). Однако этот способ ограничивает возможности атаки захватом 20 % от всех floodfill’ов сети[15].

Для осуществления атаки злоумышленнику необходимо заменить исправные узлы сети (которые уже активны в ней) на скомпрометированные. Для этого необходимо вывести из строя исправные узлы, при этом заменяя их своими. Атакующему следует заменять узлы сети на основные узлы (сконфигурированные как manual). Выведение из строя рабочих узлов сети не является обязательным условием выполнения атаки — маршрутизаторы узлов в сети являются обычными компьютерами пользователей, поэтому не всегда участвуют в сети, при этом узлы отключаются и при перезагрузке маршрутизатора (например, при обновлении ПО). Сама сеть не подключает новые узлы, пока не требуется новых участников или нет недостатка в ресурсах. Следовательно, для более легкого замещения узлов достаточно дождаться отключения одного из узлов от сети, заняв его место своим узлом[15].

Для ускорения процесса, наряду с ожиданием самостоятельного отключения одного из узлов от сети замещения узлов, атакующий может вызывать переполнение стека задач у рабочих узлов (так называемый job lag). Заключается он в проведении DoS-атаки на узел. Атакующему необходимо создать много новых тоннелей через атакуемый узел, чтобы в дальнейшем заполнить очередь его задач непрерывными запросами через каждый тоннель. При этом происходит большая задержка выполнения задач, и узел исключает себя из списка floodfill’а[15].

Деанонимизация участников тоннеля

[править | править код]

В сети I2P применяются тоннели[16]:

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

При использовании нестандартно коротких туннелей — 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

[править | править код]

Ниже представлен список[18]:

Примечания

[править | править код]
  1. https://staas.home.xs4all.nl/t/swtr/documents/wt2015_i2p.pdf
  2. I2P 2.7.0 Released - Blog - I2P
  3. The i2p Open Source Project on Open Hub: Languages Page — 2006.
  4. GitHub (англ.) — 2007.
  5. https://github.com/PurpleI2P/i2pd
  6. журнал Chip 11/2013, стр.53
  7. Анонимность в сети Интернет // КомпьютерПресс : журнал. — 2010. — № 9.
  8. 1 2 3 4 5 6 7 8 Денис Колисниченко. Анонимность и безопасность в Интернете: от "чайника" к пользователю. — БХВ-Петербург, 2011. — С. 44, 46, 47. — 240 с. — ISBN 978-5-9775-0363-1.
  9. Джон Сноу. Анонимный хостинг через I2P: практические советы по использованию криптосети. Xakep.ru (7 июля 2011). Дата обращения: 12 декабря 2014. Архивировано 8 ноября 2014 года.
  10. 1 2 Juan Pablo Timpanaro, Isabelle Chrisment, Olivier Festor. Monitoring the I2P network // INRIA Nancy-Grand Est. — Henri Poincar´e University, France, 2011. — С. 5—7. Архивировано 13 декабря 2014 года.
  11. 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.
  12. Lars Schimmer. Peer Profiling and Selection in the I2P Anonymous Network. — 2011.
  13. 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.
  14. i2pd website. Дата обращения: 19 января 2023. Архивировано 20 августа 2018 года.
  15. 1 2 3 4 5 6 Christoph 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 года.
  16. 1 2 3 4 5 Джон Сноу. Раскрываем секреты сети I2P. Xakep.ru (4 сентября 2014). Дата обращения: 8 декабря 2014. Архивировано 11 декабря 2014 года.
  17. Juan Pablo Timpanaro, Isabelle Chrisment, Olivier Festor. I2P's Usage Characterization // Research Report RR-7844. — INRIA Nancy-Grand Est, France: Henri Poincaré University, 2011.
  18. Андрей Комаров ([email protected]). За гранью невидимости: новые методы сохранить ингонито в инете // Издательский дом ООО "Гейм Лэнд" : журнал. — 2008. — № 120. Архивировано 5 июня 2015 года.
  19. "XD — автономный торрент-клиент для сети i2p". Web Of Dark - мы Рупор Даркнета. 2017-09-06. Архивировано 27 февраля 2018. Дата обращения: 27 февраля 2018.