Часть 1: «Всё что вы хотели знать и боялись спросить о I2P»

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

    Если кого то действительно это интересует, прошу под «спойлер».

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

    Официальный источник: i2p2.de

    Оглавление:
    Часть 1: «Всё что вы хотели знать и боялись спросить о I2P»
    Часть 2: Туннельная магия, NetDB и «жонглирование» протоколами
    Часть 3: Цифровой чеснок

    Введение


    I2P — это масштабируемая, самоорганизующаяся, распределяющая пакеты между анонимными сетевыми уровнями сеть, в которой может работать любое количество приложений, при этом будет обеспечиваться высокий уровень безопасности и анонимности. Каждое из этих приложений само по себе, может быть анонимным, иметь свои возможности для управления сетью, не беспокоясь о надлежащем осуществлении контоля работы свободной, распределённой и асинхронной маршрутизации. I2P позволяет им смешивать (прятать — прим. пер.) свою работу среди большого количества уже существующих анонимных пользователей, работающих в сети.
    Приложения могут использовать все возможности обычного интернета, совмещая при этом анонимный веб-сёрфинг, веб-хостинг, анонимный чат, передачу файлов, блоггинг и другие возможности, которые будут добавлены позднее.
    1. Веб-сёрфинг, используя любой браузер, поддерживающий работу через прокси.
    2. Чат: IRC, Jabber, I2P-Messenger.
    3. Файлообмен:
      Torrents: I2PShark, Robert, Imule, PyBit, I2P-bt
      Передача напрямую между ПК: I2Phex
    4. E-mail: susimail and I2P-Bote.
    5. Blog: используя Syndie.
    6. Распределённое хранение данных, сохраняйте свои данные используя облачную Tahoe-LAFS поверх I2P.
    7. Группы новостей, используя любые программу reader, поддерживающую прокси.


    В отличие от веб-сайтов, размещенных в распределительных сетях 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 следующего маршрутизатора, наряду с зашифрованной информацией, которая будет перенаправлена. Каждый туннель имеет начальную точку (первый маршрутизатор, также известный как «шлюз») и конечную точку. Сообщения могут быть отправлены только в одну сторону. Чтобы получить обратное сообщение, требуется еще один туннель.

    image

    Существует два типа туннеля: «исходящий» туннели отправляет сообщения от создателя туннеля, в то время как «входящие» туннели передают сообщение обратно создателю туннеля. Сочетание этих двух туннелей позволяет пользователям отправлять друг другу сообщения. Отправитель («Алиса» на изображении выше) устанавливает исходящий туннель, в то время как приемник («Боб» в картинке) создает входящий туннель. Шлюз во входящем туннеле может получать сообщения от других пользователей и переслать их до конечной точки (в данном случае это «Боб»).
    Конечная точка исходящего туннеля должна будет отправить сообщение на шлюз во входящий туннель. Для этого отправитель («Алиса») добавляет инструкции в зашифрованное сообщение. Как только конечная точка исходящего туннеля расшифровывает сообщение, оно получит инструкцию, чтобы переслать сообщение на правильный входящий шлюз (шлюз «Боб»).

    Третьим важным для понимания пунктом является сетевая база данных NetDB. Несколько алгоритмов, предназначенные для обмена сетевыми метаданными. Существует два типа метаданных: «routerInfo» и «leaseSets»:
    routerInfo дает данные о маршрутизаторах, необходимых для обмена данными частных маршрутизаторов (их открытыми ключами, адресами и т.д.), в то время как leaseSet дает маршрутизаторам информацию, необходимую для связи конкретных точек.
    LeaseSet содержит блок информации «Lease». Каждое поле определяет туннель из шлюзов, который позволяет достичь получателя. Полная информация, содержащаяся в Lease:
    Входящий шлюз для туннеля, который позволяет достичь получателя.
    Время, когда туннель устарел.
    Пара открытых ключей, чтобы иметь возможность шифрования сообщений (для отправки через туннель и для получателя в пункте назначения).

    Маршрутизаторы пересылают свои routerInfo в netDb напрямую, а leaseSets направляются через исходящий туннель (leaseSets должны быть отправлены анонимно, чтобы избежать корреляции маршрутизатора с его leaseSets).
    Мы можем объединить вышеуказанные концепции для создания успешно работающей сети.

    Для создания собственных входящих и исходящих туннелей, Алиса производит поиск в netDb для сбора routerInfo. Таким образом, она собирает списки пиров, которые она может использовать в качестве Hop (Промежуточных точек) в ее туннелях. Она может отправить сообщение для первого прыжка с просьбой о создании тоннеля и просить, чтобы маршрутизатор отправил запрос на создание туннеля, до того как туннель будет построен.

    image

    Когда Алиса хочет послать сообщение Бобу, она сначала выполняет поиск в netDb, чтобы найти leaseSet Боба и получить информацию о текущих входящих туннелях Боба. Затем она выбирает один из своих исходящих туннелей и отправляет сообщение по нему с инструкциями для конечной точки исходящего туннеля, чтобы переслать сообщение на один из шлюзов входящего туннеля Боба.
    Когда в исходящем туннеле конечная точка получает эти инструкции, она передает сообщение с запросом и когда входящий шлюз туннеля Боба получает запрос, он направляется вниз по туннелю к маршрутизатору Боба.
    Если Алиса хочет чтобы Боб ответил на сообщение, она должна передать инструкцию явно, как часть самого сообщения. Это может быть сделано путем создания более высокого слоя, создание которого осуществляется в потоковой библиотеке. Алиса может также сократить время отклика, вкладывая ее последний leaseSet в сообщение, так что Бобу не нужно делать поиск по netDb для обращения, когда он решит ответить, но это не обязательно.

    image

    В то время как сами туннели имеют имеют многослойное шифрования для предотвращения несанкционированного доступа к пирам внутри сети («транспортный слой» зашифрован сам по себе, для предотвращения несанкционированного доступа к участникам сети).
    Так же необходимо добавить дополнительный слой шифрования, чтобы скрыть сообщение от исходящей до конечной точки туннеля и шлюза входящего туннеля. Это «чесное шифрование» позволяет маршрутизатору Алисы обернуть несколько сообщений в одно „чеснок сообщение“ (это четвёртый аспект), зашифрованные вместе с открытым ключом, так что посредник не может определить количество сообщений и что они содержат.
    Для типичного соединения между Алисой и Бобом, сообщение будет зашифровано с открытым ключом, опубликованным в leaseSet Боба, позволяющий читать шифрованное сообщение на маршрутизаторе Боба, не выдавая открытый ключ

    Еще один важный факт. Нужно иметь в виду, что I2P полностью основан на сообщениях, и что некоторые сообщения могут быть утеряны по пути.
    Приложения в сети I2P, могут использовать в сообщении собственный интерфейс и заботиться о своем собственном контроле передаче и надёжности, но большинство приложений может адекватно работать используя стандартные библиотеках для передачи данных в сети i2p.
    Share post

    Similar posts

    Comments 21

      +8
      Спасибо, что взялись переводить тексты по I2P! Вероятно, стоит отправить перевод на сайт I2P, чтобы дополнить им русский языковой раздел.

      Добавьте, пожалуйста, ссылку на оригинал (подозреваю, это).

      Хотелось бы услышать про систему именования узлов в I2P: Base32, DNS и пр. В частности, можно ли сохранить постоянный Base32 узла? (Это как раз то, что я «боялся спросить о I2P».)

      Нельзя просто написать статью о I2P и ни словом не упомянуть о TOR. К примеру, для торрентов I2P лучше подходит, для доступа к обычным сайтам — TOR. Справедливо ли I2P считается более децентрализованной системой, чем TOR? Обе системы позволяют создавать скрытые сайты; насколько стабильны эти сайты и насколько сложно (и возможно ли) насильно прекратить к ним доступ? Интересно было бы как следует сравнить эти две системы (потянет на отдельную статью).

      Стоит также упомянуть об операционной системе tails, созданной для увеличения безопасности при использовании I2P или TOR.

      Хотелось бы сказать, что реализация I2P написана на Java. Часть критики I2P основано на том, что Java — не лучший выбор для анонимных систем. Исходные коды основной реализации Java-машины закрыты. Это вызывает недовольство со стороны пользователей, всерьез озабоченных своей безопасностью. I2P ставит перед ними неприятный выбор: доверять основной реализации с закрытым кодом или использовать стороннюю реализацию, что грозит снижением производительности.

      В свете последних событий возникает вопрос: насколько I2P является устойчивой к блокировке со стороны властей? Мне в этом плане представляется, что пользователей TOR проще обнаружить и заблокировать (что уже сделано в нескольких странах, в России подобные меры обсуждаются). Насколько сложно скрыть факт использования I2P?
        +2
        Учитывая то что это перевод и все мои имеющиеся знания подчёркнуты из личного опыта и уже имевших место статей. Я не смогу ответить на все эти вопросы прежде чем закончу с переводом официальной документации.
        Дальше, когда это будет сделано можно будет попытаться провести тесты и проанализировать, всё что я пока могу это просто заниматься переводом.
        Да, вы угадали, это именно и есть оригинал, сейчас добавлю и подумаю как это поместить в официальный русскоязычный раздел.
          0
          Адрес base32 — это всего лишь хэш основной (полной) записи об адресате (анонимной цели принимающего туннеля). Адресат состоит из двух открытых ключей (и, возможно, сертификата). Владелец закрытых ключей контролирует этот туннель и, следовательно, base32-адрес.

          Зачем в переводе документации I2P рассказывать про Tor? И потом, разве о нём ещё кто-то не знает? А их сравнение давно есть на сайте.

          I2P не на Java у нас для вас нет.

          Все публичные сети (opennet) одинаково уязвимы к блокировке и деанонимизирующим действиям достаточно организованной и богатой ресурсами стороны, о чём тщетно твердят специалисты уже много лет. F2F сети (darknet) много лучше, но в условиях Великого Китайского Файрвола и им хреновато.
            0
            Все публичные сети (opennet) одинаково уязвимы к блокировке и деанонимизирующим действиям достаточно организованной и богатой ресурсами стороны

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

            F2F сети (darknet) много лучше

            Разве сайты, размещенные в I2P и TOR, не относятся к darknet? Проясните, пожалуйста, в чем принципиальная разница и почему F2F-сети лучше.
              0
              Полный список узлов получается объединением неполных списков узлов, полученных с нескольких участников netDb экстенсивными запросами. Блокировать всё целиком необязательно, при случайном выборе участников для построения туннелей поиск рабочих пиров среди нерабочих займёт значительное время. Кроме того, первоначальный список узлов при запуске загружается с небольшого числа известных серверов в открытом виде. Конечно, запрет подключения к ним можно обойти по защищённому каналу, если он есть, но это уже вручную.

              Впрочем, это всё технические подробности. Если у нас есть открытая сеть, участником которой может стать любой установивший у себя клиент пользователь, по определению это точно так же могут делать и подставные узлы, которые в дальнейшем могут использоваться для сбора данных как внутри сети (наблюдение за потоками данных, их сопоставление и т. п.), так и снаружи (IP-адреса и т. п.). От технологий это не зависит. Участники Friend-to-Friend топологии не сообщают о своём участии в сети никому, кроме кроме непосредственных пиров. Для блокировки соединения требуется каким-то путём узнать либо про одного, либо про другого участника. Это и есть darknet в техническом плане. А под общее понятие «скрытой сети» можно при желании подвести не только сайтики в Tor и I2P, но и обычный форум с закрытой регистрацией и доступом по https.
                0
                Насколько я понял, суть Friend-to-Friend в том, что прямые соединения (то есть, соединения, разоблачающие IP второй стороны) возможны только между пользователями, доверяющими друг другу. Информация передается только по цепочке «друзей».

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

                С другой стороны, как пользователю определить, кого считать другом в такой сети? Если доверять только людям, знакомым в реальной жизни, то в сети будет мало прямых связей и она будет, скорее всего, состоять из нескольких связных компонент. Новые пользователи, не имеющие друзей среди старых пользователей, не смогут подключиться.

                Несмотря на это, идея замечательная. Возможно ли с технической точки зрения сделать такую опцию в I2P или TOR?
                  0
                  Под «доверием» можно понимать многое, в зависимости от того, какая сеть и для чего будет использоваться, но даже простейший вариант «знакомый из компьютерной среды» намного усложняет мониторинг изнутри сети по сравнению с открытым доступом, где все и всё как на ладони.

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

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

                  Безопасность I2P и Tor основывается в том числе на выборе случайных промежуточных узлов из многих известных клиенту, следовательно, публичность заложена в них изначально. Можно прятать соединения пользователей с клиентом, но это напрямую к данным сетям уже не относится.
            0
            Что значит основная реализация java? Начиная с 7-й версии именно openjdk с открытым кодом считается референсной. Основная в смысле, что самая распространённая среди пользователей windows? Так «пользователи, всерьез озабоченные своей безопасностью» если уже с тором и I2P разобрались, так может и про openjdk должны быть в курсе?
            Openjdk и не надо вводить людей в заблуждение :-)
              0
              Не знал, что OpenJDK референсная. Спасибо, что сказали!
          • UFO just landed and posted this here
              0
              Ну как же, говорят, там очень много детского порно разного контента, и торговцев наркотиками, но я то, конечно, лично этого не проверял.
                +2
                rus.i2p/ вики на русском в I2P
                tracker2.postman.i2p/ торрент-трекер в I2P
                torrent.repo.i2p/ ещё один торрент-трекер
                hideblogs.i2p/ блоги
                chess.i2p/ чемпионат по шахматам среди завсегдатаев TOR и I2P
                hiddenchan.i2p/ анонимный имиджборд на русском в I2P
                gop4u4wtlludld6zxergsa6yllduwppjfvo3jxh4ltzmcu7hr3uq.b32.i2p/ зеркало TorChan'а в I2P
                ( zw3crggtadila2sg.onion/imageboard/ сам TorChan )
                  0
                  Открыл Eclipse.
                  Ну и где все эти ваши сложные многомодульные программы, автоматическая контекстная подстановка, генераторы шаблонов из UI и кода из шаблонов, динамическая компиляция и тестирование, отладчики и встроенные системы контроля версий?
                  Пусто.
                  Закрыл Eclipse.
                    +1
                    forum.i2p — официальный форум. Работает сейчас с перебоями почему-то.
                    forum.rus.i2p — русский форум, работает намного шустрее.
                    freezone.i2p — движок аналогичный хабровскому

                    Есть IRC, о методе подключения можно прочитать в документации и в самом клиенте. Там есть канал #ru с кодировкой koi8-r.
                    +5
                    Начинание хорошее, но присутствует вагон стилистических ошибок и некоторое количество опечаток. Может стоит перед публикацией внимательно вычитывать статью? Готов оказать помощь в вычитке и редактуре, при условии, что до финальной готовности текста работать будем на чем-нибудь более предназначенном для совместного редактирования текстов, чем хабр, а именно вики-движок (есть свой, если что). По достижению готовности, хоть на хабр, хоть на оф. сайт i2p.
                      0
                      Гуглодоки что ли…
                      +4
                      Начинание хорошее, но перевод оставляет желать лучшего. Текст там не из простых, но, по-моему, первый абзац

                      I2P is a scalable, self organizing, resilient packet switched anonymous network layer, upon which any number of different anonymity or security conscious applications can operate. Each of these applications may make their own anonymity, latency, and throughput tradeoffs without worrying about the proper implementation of a free route mixnet, allowing them to blend their activity with the larger anonymity set of users already running on top of I2P.

                      даже с моими скудными познаниями в англ. яз. переводится где-то так:

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

                      а не

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

                      Вам, как и мне, ещё нужно учиться. А то, что вы выложили — не достойно перевода, который можно выложить куда-либо. Легче перевести заново.

                      Извиняюсь за правду.
                        +1
                        Поправлю себя:
                        mixnet — это не смешанная сеть, это «перемешивающая сеть», «микс-сеть». В русском языке нет устоявшегося перевода, поэтому пишут как-то так:

                        бла-бла-бла «перемешивающая сеть» (mix network) бла-бла-бла
                          +1
                          Только «…поверх которого может работать любое число различных приложений, требующих анонимности или безопасности» и «…может выбирать нужное соотношение анонимности, задержек и пропускной способности, не беспокоясь…». Однородные члены и у conscious, и у tradeoffs
                            0
                            Просто посмотрел в Lingvo.Pro, что:
                            security — conscious terminal — терминал со средствами обеспечения безопасности

                            может все же
                            security conscious application — приложение со средствами обеспечения безопасности (самозащищенное приложение)?
                              0
                              Да, честно говоря, понятия не имею. Раз I2P обеспечивает анонимность и безопасность передачи, то логично поверх него строить приложения, которым нужна анонимность и/или безопасность. «Приложение» здесь в общем смысле, как «сервис», а не конкретная техническая имплементация.

                        Only users with full accounts can post comments. Log in, please.