Эта страница была обновлена Июль 2011 и содержит сведения для версии маршрутизатора 0.8.7.

Обзор

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

As briefly explained in the introduction, I2P builds virtual "tunnels" - temporary and unidirectional paths through a sequence of routers. These tunnels are classified as either inbound tunnels (where everything given to it goes towards the creator of the tunnel) or outbound tunnels (where the tunnel creator shoves messages away from them). When Alice wants to send a message to Bob, she will (typically) send it out one of her existing outbound tunnels with instructions for that tunnel's endpoint to forward it to the gateway router for one of Bob's current inbound tunnels, which in turn passes it to Bob.

Элис подключается через её исходящий туннель к Бобу через его входящий туннель

A: Выходной шлюз (Alice)
B: Выходной участник
C: Выходная конечная точка
D: Входной шлюз
E: Входной участник
F: Входная конечная точка (Bob)

Tunnel vocabulary

  • Tunnel gateway - первый маршрутизатор в туннеле. Для входящих туннелей это тот, который указан в LeaseSet, опубликованном в базе данных сети. Для исходящих туннелей шлюзом является маршрутизатор отправителя. (например, оба A и D выше)
  • Конечная точка туннеля - последний маршрутизатор в туннеле. (например, оба варианта C и F выше)
  • Участник туннеля - все маршрутизаторы в туннеле, кроме шлюза или конечной точки (например, оба B и E выше)
  • n-Hop tunnel - туннель с определенным количеством межмаршрутных переходов, например:
    • 0-hop tunnel - туннель, в котором шлюз также является конечной точкой
    • 1-hop tunnel - туннель, в котором шлюз общается непосредственно с конечной точкой
    • 2-(или более)-хоп туннель - туннель, в котором есть по крайней мере один промежуточный участник туннеля. (приведенная выше схема включает два 2-хоповых туннеля - один исходящий от Алисы и входящий к Бобу).
  • ID туннеля - 4-байтовое целое число различное для каждого перехода в туннеле и уникальное для всех туннелей на маршрутизаторе. Выбирается случайно создателем туннеля.

Информация о строительстве туннеля

Маршрутизаторы, выполняющие три роли (шлюз, участник, конечная точка), получают различные части данных в начальном сообщении Tunnel Build Message для выполнения своих задач:

  • Туннельный шлюз получает:
    • туннельный ключ шифрования- закрытый ключ AES для шифрования сообщения и инструкции для следующего хопа
    • туннельный IV ключ - закрытый ключ AES для двойного шифрования IV до следующего хопа
    • ключ ответа - открытый ключ AES для шифрования ответ на запрос о создании туннеля
    • reply IV - IV для шифрования ответа на запрос построения туннеля
    • tunnel id - целое число 4 байта (только для входящих шлюзов)
    • next hop - какой маршрутизатор является следующим на пути (если только это не 0-хоп туннель, и шлюз также является конечной точкой)
    • next tunnel id - Идентификатор туннеля в следующем хопе
  • Все участники промежуточного туннеля получают:
    • туннельный ключ шифрования- закрытый ключ AES для шифрования сообщения и инструкции для следующего хопа
    • туннельный IV ключ - закрытый ключ AES для двойного шифрования IV до следующего хопа
    • ключ ответа - открытый ключ AES для шифрования ответ на запрос о создании туннеля
    • reply IV - IV для шифрования ответа на запрос построения туннеля
    • tunnel id - 4 byte integer
    • next hop - what router is the next one in the path
    • next tunnel id - Идентификатор туннеля в следующем хопе
  • The tunnel endpoint gets:
    • tunnel encryption key - an AES private key for encrypting messages and instructions to the the endpoint (itself)
    • tunnel IV key - an AES private key for double-encrypting the IV to the endpoint (itself)
    • reply key - an AES public key for encrypting the reply to the tunnel build request (outbound endpoints only)
    • reply IV - the IV for encrypting the reply to the tunnel build request (outbound endpoints only)
    • tunnel id - 4 byte integer (outbound endpoints only)
    • reply router - the inbound gateway of the tunnel to send the reply through (outbound endpoints only)
    • reply tunnel id - The tunnel ID of the reply router (outbound endpoints only)

Details are in the tunnel creation specification.

Tunnel pooling

Несколько туннелей для определенной цели могут быть объединены в "пул туннелей", как описано в спецификации tunnel specification. Это обеспечивает избыточность и дополнительную пропускную способность. Пулы, используемые самим маршрутизатором, называются "исследовательскими туннелями". Пулы, используемые приложениями, называются "клиентскими туннелями".

Длина туннеля

Как упоминалось выше, каждый клиент просит, чтобы его маршрутизатор обеспечивал туннели, включающие по крайней мере определенное количество переходов. Решение о количестве маршрутизаторов в исходящих и входящих туннелях оказывает важное влияние на задержку, пропускную способность, надежность и анонимность, обеспечиваемые I2P - чем больше пиров, через которые должны пройти сообщения, тем больше времени требуется для их получения и тем выше вероятность преждевременного выхода из строя одного из этих маршрутизаторов. Чем меньше маршрутизаторов в туннеле, тем легче злоумышленникам проводить атаки анализа трафика и нарушать чью-то анонимность. Длина туннеля задается клиентами через опции I2CP. Максимальное количество хопов в туннеле - 7.

0-прыжковые туннели

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

1-прыжковые туннели

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

2-прыжковые туннели

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

3-прыжковые (или более) туннели

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

Длина туннеля по умолчанию

По умолчанию маршрутизатор использует 2-хоповые туннели для своих исследовательских туннелей. Параметры туннеля клиента по умолчанию устанавливаются приложением с помощью I2CP опций. Большинство приложений по умолчанию используют 2 или 3 хопа.

Проверка туннеля

Все туннели периодически тестируются их создателем путем отправки DeliveryStatusMessage из исходящего туннеля и привязки к другому входящему туннелю (тестирование обоих туннелей одновременно). Если один из них не проходит несколько последовательных тестов, он помечается как неработоспособный. Если он использовался для входящего туннеля клиента, создается новый leaseSet. Неудачи при тестировании туннеля также отражаются в рейтинге потенциала в профиле пиров.

Создание туннелей

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

Tunnel encryption

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

Предстоящая работа

  • Можно использовать другие методы испытания туннелей, такие как чесночная упаковка нескольких тестов в зубчики, тестирование отдельных участников туннеля, участников по отдельности и т.д.
  • Переход к 3-хоповым исследовательским туннелям по умолчанию.
  • В одном из будущих релизов могут быть реализованы опции, определяющие параметры объединения, смешивания и чаф генерации.
  • В одном из будущих релизов могут быть введены ограничения на количество и размер сообщений, разрешенных во время жизни туннеля (например, не более 300 сообщений или 1 МБ в минуту).

См. также