# Спецификация Ospab Stealth Transport Protocol (OSTP)

**Версия:** 1.0 (Май 2026)  
**Авторы:** Георгий С., Ospab Foundation
**Статус:** Стабильный, Информационный  

---

## 1. Введение

**Ospab Stealth Transport Protocol (OSTP)** — это высокоэнтропийный мультиплексируемый транспортный протокол 4-го уровня, разработанный для безопасной и отказоустойчивой передачи данных между распределенными узлами в сетях с сильными помехами и агрессивным глубоким анализом трафика (DPI).

Стандартные туннельные протоколы (такие как OpenVPN, WireGuard) генерируют паттерны трафика, которые легко распознаются системами DPI по статичным «магическим байтам», фиксированным размерам рукопожатий или предсказуемым последовательностям. OSTP решает эту проблему, применяя математическое маскирование состояния и рандомизированное выравнивание границ пакетов перед отправкой в сеть. Главная цель архитектуры — достижение **максимальной равномерной энтропии**, при которой UDP-датаграммы статистически неотличимы от чистого белого шума.

---

## 2. Криптографические примитивы

OSTP построен исключительно на базе стандартизированных современных криптографических алгоритмов:

| Компонент | Примитив / Стандарт | Назначение |
|---|---|---|
| **Рукопожатие (Handshake)** | Noise Protocol Framework (`Noise_NNpsk0`) | Взаимная аутентификация и обмен ключами с прямой секретностью (Forward Secrecy). |
| **Обмен ключами** | X25519 (RFC 7748) | Эфемерный протокол Диффи-Хеллмана на эллиптических кривых. |
| **Симметричное шифрование** | ChaCha20-Poly1305 (RFC 8439) | Аутентифицированное шифрование (AEAD) для всех полезных данных. |
| **Хеширование** | BLAKE2s (RFC 7693) | Внутреннее хеширование состояний в рамках фреймворка Noise. |
| **Маскирование заголовков** | HMAC-SHA-256 (RFC 2104) | Динамическое искажение заголовков каждого пакета для устранения статических сигнатур. |

---

## 3. Архитектура протокола

OSTP работает в парадигме клиент-сервер поверх одного двунаправленного UDP-сокета:
*   **Relay Bridge (Клиент / Инициатор):** Устанавливает соединения, генерирует идентификаторы сессий (Session ID) и инициирует криптографическое рукопожатие.
*   **Collector Node (Сервер / Отвечающий):** Принимает соединения, проверяет ключи доступа и ретранслирует трафик прикладного уровня.

OSTP поддерживает **внутреннее криптографическое мультиплексирование**, позволяя передавать несколько логических потоков данных через единый сокет без эффекта блокировки начала очереди (Head-of-Line blocking).

---

## 4. Формат кадра (Спецификация заголовков)

Сериализованный пакет OSTP соответствует физическим ограничениям MTU. Кадр состоит из предварительно замаскированного заголовка и зашифрованной полезной нагрузки с выравнивающим отступом (padding). Все многобайтовые поля используют сетевой порядок байт (big-endian).

```text
 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|          Замаскированный Session ID (32 бита)                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
+                    Открытый Nonce (64 бита)                   +
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                                                               |
~               AEAD-шифротекст (Переменная длина)              ~
|                                                               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    16-байтный тег Poly1305                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
```

### 4.1 Описание полей

*   **Замаскированный Session ID (32 бита):** Идентификатор сессии, замаскированный операцией XOR с использованием псевдослучайного потока, сгенерированного через HMAC-SHA-256.
*   **Открытый Nonce (64 бита):** Монотонно возрастающий счетчик, используемый для отслеживания пакетов в ARQ и в качестве вектора инициализации (IV) для шифра AEAD. Передается в открытом виде, но полностью защищен от подмены (аутентифицирован как AAD в AEAD).
*   **AEAD-шифротекст:** Внутренняя полезная нагрузка, зашифрованная ChaCha20-Poly1305.
*   **Тег аутентификации (MAC):** 16-байтный код, гарантирующий целостность шифротекста и заголовков.

---

## 5. Обфускация трафика (IPMS)

Чтобы гарантировать статистическую независимость поля Session ID в последовательных пакетах, OSTP использует метод **In-Place Matrix Scrambling (IPMS)** на базе HMAC-SHA-256.

1.  **Генерация ключа обфускации:**
    Оба узла независимо генерируют 8-байтный ключ обфускации (`K_obf`) из общего ключа доступа перед началом рукопожатия:
    `K_obf = SHA-256(access_key || "obfusca")[0..7]`

2.  **Попакетное маскирование:**
    Session ID маскируется уникальным псевдослучайным значением для каждого пакета:
    `mask[0..3] = HMAC-SHA-256(K_obf, Nonce)[0..3]`
    `Masked_SID = SID_raw XOR mask`

Так как `Nonce` уникален для каждого пакета, маска криптографически независима для каждой датаграммы. Пассивный анализатор (DPI) не может связать пакеты в единую сессию без знания `K_obf`.

---

## 6. Рукопожатие и криптографическая синхронизация

OSTP использует Noise Protocol Framework с паттерном `Noise_NNpsk0_25519_ChaChaPoly_BLAKE2s`.

1.  Регистрационный ключ доступа (`access_key`) преобразуется в 32-байтный строгий предварительно распределенный ключ (PSK) через SHA-256.
2.  PSK применяется на нулевой позиции паттерна, обеспечивая авторизацию и шифрование самой первой датаграммы рукопожатия (Zero-RTT авторизация).
3.  Выполняется эфемерный обмен ключами Curve25519 для создания симметричных ключей передачи данных.

Первичная полезная нагрузка рукопожатия содержит Unix-отметку времени для защиты от атак повторного воспроизведения (Replay Attacks). Сервер контролирует окно синхронизации (±300 секунд) с учётом дрейфа часов и смены сети при роуминге.

---

## 7. Надежность и канал передачи данных

### 7.1 Selective-Repeat ARQ
OSTP обеспечивает надежную доставку поверх UDP с помощью механизма **Selective-Repeat ARQ**:
*   Приемник поддерживает буфер переупорядочивания (по умолчанию: 8192 пакета).
*   Неподтвержденные пакеты отправляются повторно после адаптивного тайм-аута (RTO).
*   Подтверждения (ACK) встраиваются в исходящие кадры данных (piggybacking) для минимизации накладных расходов.
*   Протокол динамически применяет "обратное давление" (backpressure), ограничивая чтение новых данных, если число неподтвержденных кадров в полете слишком велико.

### 7.2 Адаптивный Padding
Для защиты от анализа длин пакетов (Packet Length Analysis, PLA), OSTP добавляет выравнивающий отступ к открытому тексту перед AEAD-шифрованием. Байты отступа берутся из криптографически стойкого генератора псевдослучайных чисел ОС. Протокол поддерживает динамическое выравнивание вплоть до полного размера MTU (например, 1400 байт), сглаживая узнаваемые всплески трафика приложений и превращая их в подобие CBR (Constant Bit Rate) потока.

### 7.3 IP-роуминг (IP Roaming)
Сервер поддерживает бесшовную смену сетей (например, переключение со смартфона с Wi-Fi на LTE). Если сервер получает пакет с новым IP-адресом отправителя, но пакет успешно проходит AEAD-аутентификацию с использованием текущих ключей, сервер автоматически привязывает эту сессию к новому IP-адресу без обрыва соединения.

---

## 8. Безопасность (Security Considerations)

*   **Исчерпание Nonce:** Поле Nonce имеет размер 64 бита. Реализации ОБЯЗАНЫ разрывать сессию до переполнения Nonce, чтобы предотвратить катастрофическое повторное использование гаммы AEAD-шифра.
*   **DDoS и исчерпание ресурсов:** Серверы ДОЛЖНЫ применять жесткий лимит на количество одновременных сессий (например, 1024) и молча отбрасывать запросы на рукопожатие при превышении лимита, предотвращая атаки на исчерпание памяти.
*   **Целостность заголовка:** Механизм маскирования обеспечивает только скрытность, а не целостность. Целостность заголовков математически гарантируется 16-байтным тегом аутентификации Poly1305, который покрывает 12-байтный заголовок как присоединенные данные (AAD).
