Как НЕ СТОИТ использовать I2P и TOR / Хабр

Как НЕ СТОИТ использовать I2P и TOR / Хабр

А что ещё там есть?

Очень рекомендую почитать русскоязычную wiki и полистать списки identiguy или isitup. А ещё есть поисковик

Внезапно web-версия telegram. Правда, я понятия не имею, знает ли про это зеркало администрация telegram. Впрочем, через выходную ноду можно достучаться и до оригинала
Внезапно web-версия telegram. Правда, я понятия не имею, знает ли про это зеркало администрация telegram. Впрочем, через выходную ноду можно достучаться и до оригинала

А ещё есть телеграмовские MTProto прокси. Идея сводится к созданию туннелей на указанные i2p-хосты. Инструкция на сайте

Ещё есть торренты и почта. Ничего из этого я ещё не пробовал использовать

Находил флибусту и ebooks.i2p — последний выглядит вообще дорого-богато

I2p. настройка | шпаргалко сумасшедшего программёра

Видимо, читатель, который заходил сюда по запросу i2p задавался вопросом: вот автор столько пишет, хвалит, радуется за немцев, разработавших проект i2p, а ни разу не показал, о чем, собственно, речь. На сей раз я намерен исправить данную оплошность, и не только показать, но и рассказать, как, собственно, настраивать эту радость, а заодно и как использовать.

Кстати, есть подробное пошаговое руководство по установке и настройке, а здесь – все записи этого сайта по тематике I2P. Кроме того, вот тут рассмотрены некоторые правовые вопросы по использованию I2P в России.

Что такое?

Во-первых, что такое i2p? I2P – это оверлейная (в вольной интерпретации, оверлей – это слой над чем-то, наложение) сеть, работающая поверх обычного интернета, сеть над сетью. Она обеспечивает функционирование внутри себя различных веб-сайтов (технология eepsite), систем обмена мгновенными сообщениями, почтой, и даже торрент-трекеров (уж про KAD и речь не идёт, существует, и уже довольно давно, приложение iMule – порт всем знакомого eMule на i2p), а торрент-клиент vuze имеет поддержку этой сети, позволяя качать как из неё, так и с обычных трекеров. При этом, весь траффик зашифрован, анонимизирован, и в целом, изолирован. Это значит что в идеале ресурсы i2p вообще никак не связаны с ресурсами в глобальной сети, чисто по причине стремления к минимизации утечек и обеспечения секретности коммуникаций.

Что хорошего.

Чем это выгодно нам, простым пользователям? Во-первых, в связи с общемировой шумихой вокруг систем файлообмена – тех же трекеров – весьма перспективной выглядит возможность ухода трекеров и клиентов в i2p сети – а там ищи свищи, кто, что и где выложил. Если сейчас, скачивая через торрент-клиент какой-то софт, или новый фильм аля аватар, вы рискуете попасться на крючок “ловцов пиратов”, попросту из-за того, что ваш IP виден всем скачивающим. В i2p – он зашифрован, и маршрутизация осуществляется по тоннелям, т.е. доказать, что это вы что-то там где-то скачали – весьма тяжело.

Затем, существует, так же как и в tor, возможность создавать скрытые сервера и сайты работающие в этой сети. Но в отличие от тора, в качестве доменного имени вы получаете не адского вида хэш, а вполне удобоваримое имя вида name.i2p. Скрытые они потому, что теоретически для точного выявления правильно настроенного хоста, на котором это всё лежит, требуется затратить массу ресурсов, времени, и людей (но не невозможно, разумеется). А поднять сайт на домашнем сервере в связке Apache PHP MySQL – вполне реально, и довольно несложно. Сложнее будет настроить сам сервер. Также там есть анонимная почта, возможность анонимного общения через популярные мессенджеры,

и даже skype – если его настроить на использование прокси i2p (лично не проверял, но по слухам, упорно циркулирующим после той шумихи вокруг этой программы – такое возможно). Вкуснячок тут в том, что даже несмотря на использование проприетарных алгоритмов шифрования скайпа, которые возможно поддерживают прослушку, здесь идёт оверлейное шифрование, т.е. для того, чтобы добраться до, собственно, разговора в скайпе, надо вскрыть пару-тройку слоёв шифрования в i2p системе. UP: 23.10.2021: Как показала практика – невозможно, как минимум пока. Ещё один бонус – в ней есть довольно неплохая поддержка русского языка.

Также программа кроссплатформенна. Это получилось в результате использования языка Java при программировании системы. И работать будет как на windows, так и на linux, macOS, Unix, Solaris, и так далее и тому подобное.

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

Работает довольно просто. У вас на компьютере запускается так называемый виртуальный шлюз. Это программа, работающая в режиме прокси-сервера, и перенаправляющая поток траффика в i2p сеть. Допустим, вы поставили эту программу с настройками по умолчанию (для большинства пользователей, поверьте, больше и не требуется – это вещь из коробки, которую поставил – и работает). У вас на компьютере УЖЕ есть прокси-сервер. Достаточно открыть настройки прокси в браузере (допустим в Firefox 3.6 это Инструменты -> настройки -> Вкладка “дополнительные” -> Вкладка “Сеть” -> Кнопка настроить), и вбить туда адрес 127.0.0.1:4444. Всё. Теперь вы можете заходить на i2p сайты, например http://i2p2.i2p – официальный сайт проекта.

Анонимность и защищённость обеспечивается тем, что в общий интернет не идут незашифрованные данные, а то, что идёт – очень сложно понять – вы ли инициировали этот траффик, или просто через ваш компьютер проходит транзитный траффик других клиентов. Т.е. доказать какую-либо причастность конкретного лица к той или иной сетевой деятельности/активности – очень тяжело. Это возможно за счёт “локальной петли” – не зашифрованный траффик идёт только между локальным прокси и конкретным приложением. Затем он “вливается” в шлюз, шлюз его шифрует, и по миру отправляет уже в защищённом виде. Придя на адрес назначения, сообщение дешифруется только на удалённом шлюзе, т.е. та же самая “локальная петля”, только у вашего, допустим, собеседника. или сервера.

Ложка дёгтя.

В обозримой области i2p сетей очень мало русскоязычных сайтов (по крайней мере я за последние 2 недели не нашёл ни одного). Также система не подходит людям, у которых платный траффик, потому как идеология i2p и система устройства требует делиться своим траффиком с другими людьми, примерно также как в торрент-сетях. В день у меня набегает до 50 МБ транзитного траффика, и это я ещё оставил настройки по умолчанию (хотя нет, вру, всё-таки лимиты скорости я увеличил до 100 килобайт/с в обе стороны). Ну и, на начальном этапе работы, время отклика достаточно большое будет (вплоть до 30-40 секунд и выше на первоначальную загрузку какого-либо сайта, т.к. происходит поиск по распределённому DNS и выбор маршрута).

Как сделать?

Итак, собственно, установка и настройка. Для начала проверьте, есть ли у вас на компьютере Java машина. Если проверять лень, то просто идите на сайт , скачиваем и ставим. Потом идём на сайт . Видим “Установка с нуля”, сейчас текущая версия I2P 0.7.11 – тыкаем “скачать”, сохраняем куда-нибудь на диск. В целом, там внизу ещё есть раздел “действия после установки” – крайне рекомендую прочитать. Установили – лезьте в меню “пуск” – “Все программы” – “I2P” – “Start I2P (no window)”. Ну, в общем-то, и всё. Прокси установлен и запущен. Теперь в вашем браузере открывайте адрес: – и вы увидите консоль маршрутизатора (она, кстати, на русском).

Собственно, дальше делать ничего особенно и не надо – настройки по умолчанию уже позволяют работать. Единственное, что осталось – это настроить браузер на использование виртуального шлюза. На примере firefox это выглядит как вот такое вот окошко:

Жмякаем ОК, и заходим на сайт, ну, допустим, – это зеркало официального форума проекта. Вообще, наиболее полезные ссылки приведены прямо в окне консоли маршрутизатора. Особенно хочется отметить “Эшелон” – там собрано ПО для i2p сети, в том числе и iMule. Всё, как говорил Морфеус: “Апок, мы в сети”.

Сейчас ищут техподдержку:  Как исправить Outlook, не подключающийся к вашему почтовому серверу

В целом, если вы любознательны, и не боитесь тыкать по кнопочкам, то рекомендую прошвырнуться по панели и посмотреть – что где и как. Просто панель управления во-первых – на русском, что повышает её доходчивость, во-вторых – всё настраивается довольно просто и легко. Например рекомендую, если есть возможность, увеличить квоту на использование траффика – поставить повыше скорость. Затем, настроить шлюз для запуска в режиме службы (это делается на странице I2P СВОЙСТВА – слева, там вверху ссылка “служба”). Заходите на страничку и просто нажимаете кнопку “Запускать i2p при старте”. Всё! 🙂

Если вы достаточно продвинуты и у вас есть домашний сервер из старого системника, постоянно подключенный к интернету, есть возможность сделать на нём полноценный анонимный сайт (eepsite). Если умеете писать на Perl – то возможно вам хватит встроенных возможностей сервера (там есть свой мини-веб сервер с поддержкой cgi скриптов), либо можно настроить полноценную связку Apache PHP MySQL и поднять на ней что угодно, от трекера до портала. Выявить местонахождение такого ресурса будет уже достаточно затруднительно. Тут важно настроить веб-сервер правильно: он не должен принимать соединения ни от каких других адресов кроме localhost, а в идеале – только с ним должен работать весь сервер. Тогда извне этот компьютер будет обычной рабочей станцией, не вызывающей никаких подозрений. В любом случае, перед осуществлением своих адских замыслов по захвату мира – ознакомьтесь с матчастью, чем плотнее тем лучше 🙂

Вот, в общем-то, и всё. Надеюсь вам помогла эта статья. И я также надеюсь, что она даст толчок развитию русскоязычного сегмента i2p сетей, который в настоящее время то ли отсутствует, то ли так удачно замаскирован, что целевая аудитория его не видит 🙂

Myth busters

В Сети гуляет несколько популярных мифов о I2P, в которые многие верят. Мы же их развеем.

Миф 1: чем больше участников, тем быстрее работает сеть.

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

Миф 2: чем больше доля транзитного трафика, тем выше анонимность.

А на самом деле: I2P оперирует отдельными пакетами, поэтому реальные тоннели поверх обычного интернета, как, например, в VPN, не строятся. Для каждого пакета выбирается подходящий способ доставки, независимо от того, свой ли это пакет или транзитный.

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

Миф 3: в Тоr’е применяется многослойное «луковое» шифрование, а в I2P более прогрессивное «чесночное», в котором сообщение состоит из нескольких «чесночин», предназначенных разным узлам, при этом узел может расшифровать только свою «чесночину», содержимое остальных ему неизвестно.

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

Как должно выглядеть реальное «чесночное» шифрование, можно понять из механизма создания тоннелей: сообщение состоит из нескольких записей, из них зашифрованы все, кроме одной, предназначенной данному узлу; он перешифровывает сообщение своим ключом и отсылает дальше. Естественно, следующему узлу предназначается уже другая запись сообщения.

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

Атака методом исключения

Для тех, кто не обладает достаточными ресурсами по захвату большого числа узлов, однако располагает временем и терпением, подойдет другой способ. Цель его — резкое сужение круга «подозреваемых» маршрутизаторов (при должном везении даже до одного), на которых может располагаться искомый узел.

  1. Время существования тоннеля десять минут.
  2. Узел не участвует в тоннеле дважды.
  3. Для построения тоннеля каждый раз выбирается новая последовательность узлов.

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

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

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

Базовое понимание криптографии

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

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

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

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

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

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

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

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

Сейчас ищут техподдержку:  Горячая линия : Бесплатный номер телефона горячей линии Налоговой службы России

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

Возможности, ограничения и болячки

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

Интересно, что из сети I2P можно достучаться до нод TOR. Это мы обязательно настроим

I2P не ограничивает себя каким-то протоколом. Вместо этого сеть предоставляет среду передачи данных. Я пробрасывал через сеть I2P соединение с базой данных. Туннели I2P позволяют пробросить любой ресурс, таким образом сделав его доступным для использования любыми программами.

Если кто-то не знаком с туннелями — идея проста и состоит в том, чтобы для некоторого открытого порта на удалённом сервере открыть порт на своей машине, и в дальнейшем любой локальной программой подключаться к локальному порту, что точно умеет любая программа, а тонкостями переноса байтов на тот порт удалённой машины и обратно занимается уже туннелирующая программа (частный случай туннеля).

Следствия туннелей — бомж-VPN и бомж-хостинг. Я счастлив — я могу выкатить ресурс бесплатно. Я могу соединить 2 машины бесплатно. Любой другой участник сети может сделать всё то же самое бесплатно. Вкусно

Функционировать сеть сможет, даже если шаловливые ручки вновь потянутся к Большому Рубильнику — белорусские реалии именно такие, он существует

Больным местом является изменение маршрутов (следовательно, dest hash). Но я надеюсь, что проблема решаема — существует версия для Android, которая подразумевает переход между сетью оператора и разными точками доступа wifi, а в настройках роутера появился экспериментальный «Laptop Mode»

Как быть

Рекомендую использовать изолированную от сети виртуальную машину, которая автоматом останавливается при обнаружении неожиданного трафика (отличного от tor|i2p) с её IP адреса.

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

Рекомендую подход на основе трех видов трафика от виртуальной машины:

  1. Зеленый – только доступ к I2P/TOR прокси, запущенном на ДРУГОЙ виртуальной машине. Сама ВМ принципиально не должна иметь возможности доступа в открытый интернет, и знать внешний IP пользователя.

  2. Желтый – ранее проанализированный сторонний трафик, признанный допустимым. Он должен быть полностью заблокирован. Его “допустимость” означает, что мы не будем останавливать ВМ при его обнаружении, а просто заблокируем. Это, например, попытки Windows достучаться до Windows Update или отправить телеметрию.

    (На всякий случай уточню, что упоминание тут ОС Windows в качестве гостя, скорее, шутка, нежели рекомендация.)

  3. Красный – все остальное. Заблокировано полностью. Помимо этого, при обнаружении ВМ немедленно останавливается, а, запись трафика (которая непрерывно ведется средствами контроля) и состояния ВМ, – анализируется. По результатам, трафик либо признается “желтым”, либо определяется его источник/дыра в системе. В последнем случае, если трафик не может быть гарантировано признан “желтым”, рекомендую откатить ВМ к “заводским настройкам”. Вообще, рекомендую откатывать к “заводским настройкам” после каждого использования.

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

Как участники i2p находят друг друга?

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

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

Этот файл располагается на компьютере владельца и по сети не передается. Два открытых ключа и 3-байтный сертификат (на настоящий момент всегда нулевой) образуют 387-байтный идентификатор узла, под которым узел становится известен в I2P. Поскольку полный 387-байтный идентификатор довольно неэффективен для сравнения, сортировки и передачи данных, то для обозначения узла используется 32-байтный SHA-256 хеш от идентификатора.

Строковое Base32 представление этого хеша и является адресом в .b32.i2p-адресах. А что делать, если известен только хеш, а нужно знать публичные ключи, содержащиеся в идентификаторе, например для шифрования или проверки подписи? Для этого существует сетевая база данных (netDb) — не очень удачное название, правильнее было бы назвать базой данных о сети, но такова уже устоявшаяся терминология.

Официальный клиент I2P нас обманывает
Официальный клиент I2P нас обманывает

Когда нельзя открыть порт меньше 1024, но очень хочется, то можно

Очень спорный рецепт. В общем случае, так делать не надо. Но если очень хочется, то можно. Я проделал это для прощупывания возможностей I2P. То есть just for fun

Приключения начались с вопроса «так где же java?»

which java | xargs file --mime-type
/usr/bin/java: inode/symlink

Окей

which java | xargs readlink | xargs file --mime-type
/etc/alternatives/java: inode/symlink

Больше симлинков богу симлинков!

which java | xargs readlink | xargs readlink | xargs file --mime-type
/usr/lib/jvm/java-11-openjdk-amd64/bin/java: application/x-pie-executable

Следует понимать, что конфигурация у меня может не совпадать с конфигурацией у Вас. Идея проста — добавлять в середину секцию xargs readlink до наступления просветления — пока file не скажет application/x-pie-executable.

which java | xargs readlink | xargs readlink | xargs setcap 'cap_net_bind_service= ep'

Возможно, потребуется добавить также возможность открытия сырого сокета setcap ‘cap_net_raw= ep’:

which java | xargs readlink | xargs readlink | xargs setcap 'cap_net_raw= ep'

Но в следующий раз я просто разверну docker с nginx

Настройка браузера. для любителей пожёстче

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

У меня нет лишнего браузера в системе, чтобы полностью выделить его под I2P. Воспользуюсь уже установленным firefox. Следующий вариант работает в Linux:

FIREFOX_PROFILE="firefox-i2p"
FIREFOX_HOME="${HOME}/${FIREFOX_PROFILE}"
mkdir -p "$FIREFOX_HOME"
env HOME="$FIREFOX_HOME" firefox

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

У меня нет ни одной машины с Windows и MacOS. В комментариях, пожалуйста, расскажите, как сделать похожий финт ушами в Windows. А в MacOS этот фокус должен сработать, но я не тестировал

Открываем настройки и находим «Network Settings» / «Настройки Сети»
Открываем настройки и находим «Network Settings» / «Настройки Сети»

Невидимый интернет

Сеть I2P состоит из узлов двух видов: маршрутизаторы, имеющие помимо I2P-адресов обычные IP-адреса и видимые в обычном интернете, и узлы, находящиеся позади маршрутизаторов и собственных IP-адресов не имеющие, — они и образуют тот самый «невидимый интернет».

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

Сейчас ищут техподдержку:  Что такое техническая поддержка сайта

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

Так выглядит файл RouterInfo типичного floodfill’а
Так выглядит файл RouterInfo типичного floodfill’а

«Невидимый интернет» представлен структурами данных LeaseSet, содержащих полный идентификатор, дополнительный ключ шифрования и список тоннелей, ведущих к маршрутизатору с данным узлом. Хотя входящие тоннели имеются и у самих маршрутизаторов, они никогда не формируют LeaseSet’ы: к маршрутизаторам всегда следует обращаться, устанавливая с ними прямые соединения, тоннели же используются только для получения ответов на запросы.

Поскольку продолжительность жизни одного тоннеля десять минут, то LeaseSet’ы также существуют недолгое время и поэтому на диске не сохраняются, а при рестарте перезапрашиваются по новой. Тоннели и ключ шифрования из LeaseSet’а являются единственным способом обращения к «невидимому» узлу, то есть, зная адрес, следует сначала запросить его LeaseSet у ближайшего к нему floodfill’а и потом отправить сообщение в один из тоннелей.

Для получения ответа требуется сформировать собственный LeaseSet, который можно отправить вместе с сообщением или же опубликовать на ближайшем floodfill’е.Невозможность установить, на каком маршрутизаторе располагается тот или иной LeaseSet, является краеугольным камнем технологии обеспечения анонимности в сети I2P.

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

Структура LeaseSet
Структура LeaseSet

Немного истории

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

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

Задачи i2p

Основные задачи I2P следующие:

  1. Скрывать местоположение eepsite’ов.
  2. Скрывать местоположение клиентов, подключающихся к eepsite’ам, в том числе и от самих сайтов.
  3. Сделать невозможным ограничение доступа к сайтам со стороны провайдеров и/или магистральных узлов.

Со временем весь файлообмен переместился в торренты. В результате возникла идея развития Freenet’а в направлении «невидимого интернета» — анонимной сети поверх существующего интернета. Так появился I2P. Долгое время проект был интересен лишь его создателям и некоторому числу гиков. Вскоре борьба уже стала вестись за саму информацию, поскольку, с одной стороны, интернетом стало пользоваться большинство людей, а с другой стороны, интернет оказался местом никем не контролируемого обмена информацией. Стало понятно, что так долго продолжаться не может, и поднялась новая волна интереса к подобным проектам.

Перехватываем тоннели

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

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

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

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

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

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

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

Схема взаимодействия Васи с сайтами в I2P
Схема взаимодействия Васи с сайтами в I2P

Сравнение с другими сетями

Если вы имеете представление о сети Tor и о меш-сетях вроде Yggdrasil Network, после всего сказанного об I2P не имеет большого смысла говорить, чем они различаются. Это абсолютно разные концепции. Однако для начинающих читателей приведу несколько основных пунктов.

Начнем с Tor: Во-первых, он сильно привязан к корневым серверам конторы, к которым осуществляется стартовое обращение для построения рисунка сети. В I2P это явно указанные в коде ресиды, которые можно сменить на свои, либо просто использовать уже готовые адресные книги, отталкиваясь от которых роутер продолжит работу, вовсе минуя стартовые узлы.

Во-вторых, по мнению компетентных пользователей, Tor изначально и до сих пор принадлежит АНБ, поэтому относительно него не стоит строить иллюзий. В-третьих, Тor имеет более простую архитектуру туннелей и меньше возможностей их конфигурации. В-четвертых, Тор изначально предполагает проксирование в обычный интернет, а в I2P это возможно только при дополнительной конфигурации соответствующих узлов и туннелей к ним. Этот пункт по настроению можно отнести к минусам I2P, но мы не согласимся.

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

Пользователи имеют устойчивые двунаправленные зашифрованные туннели, и чем короче — тем лучше. Как видно, у I2P с Тором совсем мало общего, а с распространенными меш-сетями и того меньше. Разве что I2P может свободно работать через Yggdrasil (поддержка в i2pd с версии 2.36.0). Через Тор тоже, кстати говоря. На этом, пожалуй, все.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 4,00 из 5)
Загрузка...

Оставьте комментарий

Adblock
detector