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

Спецификация сообщений tunnel

Спецификация формата tunnel сообщений в I2P

Обзор

В этом документе указан формат сообщений tunnel. Для получения общей информации о tunnel см. документацию по tunnel .

Предварительная обработка сообщений

Tunnel gateway — это вход или первый переход туннеля. Для исходящего туннеля gateway является создателем туннеля. Для входящего туннеля gateway находится на противоположном конце от создателя туннеля.

Шлюз предварительно обрабатывает сообщения I2NP , фрагментируя и объединяя их в сообщения туннелей.

Хотя сообщения I2NP имеют переменный размер от 0 до почти 64 КБ, сообщения tunnel имеют фиксированный размер, приблизительно 1 КБ. Фиксированный размер сообщений ограничивает несколько типов атак, которые возможны при наблюдении за размером сообщений.

После создания сообщений tunnel они шифруются, как описано в документации по tunnel .

Сообщение туннеля (зашифрованное)

Это содержимое сообщения данных tunnel после шифрования.

+----+----+----+----+----+----+----+----+
|    Tunnel ID      |       IV          |
+----+----+----+----+                   +
|                                       |
+                   +----+----+----+----+
|                   |                   |
+----+----+----+----+                   +
|                                       |
+           Encrypted Data              +
~                                       ~
|                                       |
+                   +-------------------+
|                   |
+----+----+----+----+

Tunnel ID :: TunnelId : 4 байта. ID следующего перехода, ненулевой.

IV :: : 16 байт. Вектор инициализации.

Зашифрованные данные :: : 1008 байт. Зашифрованное сообщение tunnel.

Общий размер: 1028 байт

Сообщение Tunnel (Расшифрованное)

Это содержимое сообщения данных tunnel после расшифровки.

+----+----+----+----+----+----+----+----+
|    Tunnel ID      |       IV          |
+----+----+----+----+                   +
|                                       |
+                   +----+----+----+----+
|                   |     Checksum      |
+----+----+----+----+----+----+----+----+
|          nonzero padding...           |
~                                       ~
|                                       |
+                                  +----+
|                                  |zero|
+----+----+----+----+----+----+----+----+
|                                       |
|       Delivery Instructions  1        |
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|                                       |
+       I2NP Message Fragment 1         +
|                                       |
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|                                       |
|       Delivery Instructions 2...      |
~                                       ~
|                                       |
+----+----+----+----+----+----+----+----+
|                                       |
+       I2NP Message Fragment 2...      +
|                                       |
~                                       ~
|                                       |
+                   +-------------------+
|                   |
+----+----+----+----+

Tunnel ID :: TunnelId : 4 байта. ID следующего перехода, ненулевой.

IV :: : 16 байт. Вектор инициализации.

Checksum :: : 4 байта. Первые 4 байта SHA256-хеша (содержимого сообщения (после нулевого байта) + IV).

Ненулевое заполнение :: : 0 или более байт. Случайные ненулевые данные для заполнения.

Zero :: : 1 байт. Значение 0x00.

Инструкции доставки :: TunnelMessageDeliveryInstructions : Длина варьируется, но обычно составляет 7, 39, 43 или 47 байт. Указывает фрагмент и маршрутизацию для фрагмента.

Фрагмент сообщения :: : от 1 до 996 байт, фактический максимум зависит от размера инструкции доставки. Частичное или полное I2NP сообщение.

Общий размер: 1028 байт

Примечания

  • Заполнение, если оно есть, должно быть перед парами инструкция/сообщение. Не предусмотрено заполнение в конце.
  • Контрольная сумма НЕ покрывает заполнение или нулевой байт. Возьмите сообщение, начиная с первых инструкций доставки, объедините с IV и вычислите Hash от этого.

Инструкции доставки сообщений tunnel

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

Данная спецификация предназначена только для инструкций доставки внутри tunnel сообщений. Обратите внимание, что “инструкции доставки” также используются внутри garlic cloves, где формат значительно отличается. Подробности смотрите в документации I2NP . НЕ используйте следующую спецификацию для инструкций доставки garlic clove!

Инструкции доставки первого фрагмента

Если старший бит первого байта равен 0, это начальный фрагмент I2NP сообщения или полное (нефрагментированное) I2NP сообщение, и инструкции следующие:

+----+----+----+----+----+----+----+----+
|flag|  Tunnel ID (opt)  |              |
+----+----+----+----+----+              +
|                                       |
+                                       +
|         To Hash (optional)            |
+                                       +
|                                       |
+                        +--------------+
|                        |dly | Message
+----+----+----+----+----+----+----+----+
 ID (opt) |extended opts (opt)|  size   |
+----+----+----+----+----+----+----+----+

flag :: : 1 байт. Порядок битов: 76543210 - бит 7: 0 для указания начального фрагмента или нефрагментированного сообщения - биты 6-5: тип доставки

- 0x0 = LOCAL
- 0x01 = TUNNEL
- 0x02 = ROUTER
- 0x03 = unused, invalid
- Note: LOCAL is used for inbound tunnels only, unimplemented for outbound tunnels
  • бит 4: включена задержка? Не реализовано, всегда 0. Если 1, включен байт задержки.
    • бит 3: фрагментировано? Если 0, сообщение не фрагментировано, далее следует полное сообщение. Если 1, сообщение фрагментировано, и инструкции содержат Message ID.
    • бит 2: расширенные опции? Не реализовано, всегда 0. Если 1, включены расширенные опции.
    • биты 1-0: зарезервированы, устанавливаются в 0 для совместимости с будущими использованиями

Tunnel ID :: TunnelId : 4 байта. Опционально, присутствует если тип доставки TUNNEL. ID tunnel назначения, ненулевой.

To Hash :: : 32 байта. Необязательно, присутствует если тип доставки ROUTER или TUNNEL. Если ROUTER, то SHA256 хеш router’а. Если TUNNEL, то SHA256 хеш gateway router’а.

Delay :: : 1 байт. Необязательный, присутствует если установлен флаг включения задержки. В сообщениях tunnel: Не реализован, никогда не присутствует; оригинальная спецификация: бит 7: тип (0 = строгий, 1 = рандомизированный), биты 6-0: экспонента задержки (2^значение минут).

ID сообщения :: : 4 байта. Необязательное поле, присутствует, если данное сообщение является первым из 2 или более фрагментов (т.е. если бит фрагментации равен 1). Идентификатор, который уникально определяет все фрагменты как принадлежащие одному сообщению (текущая реализация использует I2NPMessageHeader.msg_id).

Расширенные опции :: : 2 или более байт. Необязательные, присутствуют, если установлен флаг расширенных опций. Не реализовано, никогда не присутствует; исходная спецификация: Один байт длины, а затем соответствующее количество байт.

size :: : 2 байта. Длина следующего фрагмента. Допустимые значения: от 1 до примерно 960 в tunnel сообщении.

Общая длина: Типичная длина составляет: - 3 байта для доставки LOCAL (сообщение tunnel) - 35 байт для доставки ROUTER или 39 байт для доставки TUNNEL (нефрагментированное сообщение tunnel) - 39 байт для доставки ROUTER или 43 байта для доставки TUNNEL (первый фрагмент)

Инструкции по доставке последующих фрагментов

Если старший бит первого байта равен 1, это продолжающий фрагмент, и инструкции следующие:

+----+----+----+----+----+----+----+
|frag|     Message ID    |  size   |
+----+----+----+----+----+----+----+

frag :: : 1 байт. Порядок битов: 76543210. Двоичный 1nnnnnnd: - бит 7: 1 указывает, что это продолжающий фрагмент - биты 6-1: nnnnnn это 6-битный номер фрагмента от 1 до 63 - бит 0: d равен 1 для обозначения последнего фрагмента, 0 в противном случае

Message ID :: : 4 байта. Определяет последовательность фрагментов, к которой принадлежит данный фрагмент. Это будет соответствовать message ID начального фрагмента (фрагмента с битом флага 7, установленным в 0, и битом флага 3, установленным в 1).

size :: : 2 байта. Длина следующего фрагмента. Допустимые значения: от 1 до 996.

Общая длина: 7 байт

Примечания

Максимальный размер I2NP сообщения

Хотя максимальный размер I2NP сообщения номинально составляет 64 КБ, размер дополнительно ограничен методом фрагментации I2NP сообщений на несколько tunnel сообщений размером 1 КБ. Максимальное количество фрагментов составляет 64, и начальный фрагмент может быть не идеально выровнен в начале tunnel сообщения. Поэтому сообщение должно номинально помещаться в 63 фрагмента.

Максимальный размер начального фрагмента составляет 956 байт (при условии режима доставки TUNNEL); максимальный размер последующего фрагмента составляет 996 байт. Поэтому максимальный размер составляет приблизительно 956 + (62 * 996) = 62708 байт, или 61,2 КБ.

Упорядочивание, группировка, упаковка

Сообщения tunnel могут быть сброшены или переупорядочены. Шлюз tunnel, который создает сообщения tunnel, может свободно реализовывать любую стратегию группировки, смешивания или переупорядочивания для фрагментации сообщений I2NP и эффективной упаковки фрагментов в сообщения tunnel. В общем случае оптимальная упаковка невозможна (“задача об упаковке”). Шлюзы могут реализовывать различные стратегии задержки и переупорядочивания.

Маскировочный трафик

Tunnel сообщения могут содержать только заполнение (т.е. без инструкций доставки или фрагментов сообщений вообще) для маскировочного трафика. Это не реализовано.

Справочные материалы

Was this page helpful?