Глубокое погружение в техническую архитектуру Phantom Protocol: 5 слоев защиты, распределенная маршрутизация и криптографическая безопасность
Phantom Protocol представляет собой многоуровневую систему обеспечения анонимности, основанную на принципах децентрализации, криптографической защиты и распределенной маршрутизации.
Нет центральных серверов или точек контроля. Каждая нода является равноправным участником сети.
5 независимых слоев безопасности создают множественные барьеры для атакующих.
Маршруты меняются постоянно, предотвращая анализ трафика и корреляционные атаки.
Защита от квантовых компьютеров через решеточную криптографию и хеш-цепочки.
Каждый слой обеспечивает независимую защиту, создавая оборону в глубину. Компрометация одного слоя не приводит к раскрытию пользователя.
Функция: Обфускация сетевого трафика и защита от DPI (Deep Packet Inspection).
// Пример конфигурации транспорта
{
"transport": {
"type": "obfs4",
"bridge": "auto",
"cert": "...",
"iatMode": 1, // Inter-Arrival Time obfuscation
"padding": true
}
}
Функция: Многоходовая луковая маршрутизация через случайные ноды.
Функция: Множественное шифрование и защита целостности данных.
Original Data
↓ Encrypt with Exit key
[Layer 3: Exit encryption]
↓ Encrypt with Middle2 key
[Layer 2: Middle2 encryption]
↓ Encrypt with Middle1 key
[Layer 1: Middle1 encryption]
↓ Encrypt with Guard key
[Layer 0: Guard encryption]
→ Передача в сеть
Функция: Распределенное обнаружение нод через DHT без центральных серверов.
// DHT запрос ноды
{
"method": "findNode",
"target": "a8f3c9e2...",
"k": 20, // возвращает 20 ближайших нод
"signature": "ed25519_sig..."
}
Функция: Анонимные сервисы и end-to-end защита приложений.
Phantom использует сложный алгоритм выбора пути, учитывающий множество факторов:
| Фактор | Вес | Описание |
|---|---|---|
| Bandwidth | 40% | Пропускная способность ноды |
| Latency | 25% | Задержка соединения |
| Reputation | 20% | История надежности |
| Geography | 10% | Географическое разнообразие |
| Uptime | 5% | Время работы без сбоев |
Точка входа в сеть. Знает IP пользователя, но не знает назначение.
Промежуточные ноды. Не знают ни источник, ни назначение.
Точка выхода в интернет. Знает назначение, но не знает источник.
// Построение цепи маршрутизации
async function buildCircuit() {
// 1. Выбор Guard node
const guard = await selectGuardNode();
// 2. Установка соединения с Guard
const guardConnection = await connectToNode(guard);
// 3. Выбор Middle nodes через Guard
const middle1 = await selectMiddleNode(guardConnection);
const middle2 = await selectMiddleNode(guardConnection);
// 4. Выбор Exit node
const exit = await selectExitNode(guardConnection);
// 5. Создание цепи: Guard -> Middle1 -> Middle2 -> Exit
const circuit = await createCircuit([
guard, middle1, middle2, exit
]);
// 6. Обмен ключами с каждым hop
await exchangeKeys(circuit);
return circuit;
}
strictNodes для контроля географии нод в вашем маршруте.
Phantom использует модифицированный Kademlia DHT для децентрализованного обнаружения нод и хранения метаданных сети без центральных серверов.
Каждая нода в сети имеет уникальный 160-битный идентификатор (Node ID),
генерируемый как SHA-1(публичный_ключ).
Kademlia использует XOR метрику для определения "расстояния" между нодами:
// Вычисление расстояния между двумя Node ID
function distance(nodeId1, nodeId2) {
// XOR между двумя 160-битными ID
return nodeId1.xor(nodeId2);
}
// Пример: поиск 20 ближайших нод
async function findClosestNodes(targetId, k = 20) {
const closestNodes = [];
const queriedNodes = new Set();
// Начинаем с нод из routing table
let candidates = routingTable.getClosestNodes(targetId, k);
while (candidates.length > 0) {
const node = candidates.shift();
if (queriedNodes.has(node.id)) continue;
queriedNodes.add(node.id);
// Спрашиваем ноду о её ближайших соседях
const neighbors = await node.findNode(targetId);
// Добавляем новые кандидаты
for (const neighbor of neighbors) {
if (!queriedNodes.has(neighbor.id)) {
candidates.push(neighbor);
closestNodes.push(neighbor);
}
}
// Сортируем по расстоянию до targetId
closestNodes.sort((a, b) =>
distance(a.id, targetId) - distance(b.id, targetId)
);
// Оставляем только k ближайших
closestNodes.splice(k);
}
return closestNodes;
}
Каждая нода поддерживает routing table из 160 k-buckets (k обычно = 20):
| Bucket # | Диапазон расстояний | Количество нод |
|---|---|---|
| 0 | 20 - 21 | ≤ k (20) |
| 1 | 21 - 22 | ≤ k (20) |
| ... | ... | ... |
| 159 | 2159 - 2160 | ≤ k (20) |
Атакующий создает множество фейковых нод.
Защита:
Изоляция ноды от остальной сети.
Защита:
| Назначение | Алгоритм | Размер ключа | Описание |
|---|---|---|---|
| Симметричное шифрование | ChaCha20-Poly1305 | 256 бит | AEAD cipher, быстрее AES на мобильных |
| Обмен ключами | X25519 | 256 бит | Elliptic Curve Diffie-Hellman |
| Цифровые подписи | Ed25519 | 256 бит | EdDSA на Curve25519 |
| Хеш-функции | BLAKE3 | 256 бит | Быстрее SHA-256, параллелизуемый |
| KDF | HKDF-SHA256 | - | Вывод ключей из общего секрета |
| Пост-квантовая защита | Kyber-768 | 768 бит | NIST PQC finalist, решеточная криптография |
Phantom использует гибридную схему, комбинируя классическую и пост-квантовую криптографию:
// Гибридный обмен ключами
async function hybridKeyExchange(peerPublicKey) {
// 1. Классический X25519 ECDH
const classicSharedSecret = x25519(
myPrivateKey,
peerPublicKey.x25519
);
// 2. Пост-квантовый Kyber KEM
const kyberCiphertext = kyber768.encapsulate(
peerPublicKey.kyber
);
const kyberSharedSecret = kyberCiphertext.sharedSecret;
// 3. Комбинируем оба секрета через KDF
const hybridSecret = hkdf({
ikm: concat(classicSharedSecret, kyberSharedSecret),
salt: "phantom-v1-hybrid-kdf",
info: concat(myPublicKey, peerPublicKey),
length: 32
});
// 4. Выводим ключи для шифрования/MAC
const keys = {
encKey: hkdfExpand(hybridSecret, "encryption", 32),
macKey: hkdfExpand(hybridSecret, "mac", 32)
};
return { keys, kyberCiphertext };
}
Каждый слой маршрутизации добавляет свой слой шифрования:
// Создание луковой структуры
function createOnion(payload, circuit) {
let onion = payload;
// Шифруем в обратном порядке (от exit к guard)
for (let i = circuit.length - 1; i >= 0; i--) {
const node = circuit[i];
// Добавляем padding для скрытия размера
onion = addPadding(onion, CELL_SIZE);
// Шифруем с ключом ноды
onion = chacha20Poly1305Encrypt(
key: node.encryptionKey,
nonce: randomNonce(),
plaintext: onion,
ad: node.id // authenticated data
);
}
return onion;
}
// Каждая нода снимает один слой
function peelOnion(onion, myKey) {
const decrypted = chacha20Poly1305Decrypt(
key: myKey,
ciphertext: onion
);
return removePadding(decrypted);
}
Phantom использует эфемерные ключи для каждой сессии. Компрометация долгосрочных ключей не раскрывает предыдущие коммуникации.
| Характеристика | Phantom Protocol | Tor | I2P | VPN |
|---|---|---|---|---|
| Слои маршрутизации | 3-5 hops | 3 hops | Переменное | 1 hop |
| Децентрализация | Полная (DHT) | Частичная (directory authorities) | Полная | Централизованная |
| Пост-квантовая защита | Да (Kyber-768) | Нет | Нет | Нет |
| Транспортная обфускация | obfs4, meek, snowflake | pluggable transports | Базовая | Зависит от провайдера |
| Скорость | Высокая (оптимизированная маршрутизация) | Средняя | Средняя-Низкая | Высокая |
| Hidden services | .phantom домены | .onion домены | .i2p адреса | Нет |
| Защита от корреляции трафика | Padding + timing randomization | Базовая | Хорошая | Нет |
| Устойчивость к цензуре | Высокая (domain fronting, DHT) | Высокая (bridges) | Средняя | Средняя |
| Модель угроз | Государственный уровень | Государственный уровень | Государственный уровень | Корпоративный/ISP |
| Open Source | Да (MIT) | Да (BSD) | Да | Редко |
Phantom заранее строит несколько circuits в фоне, чтобы новые соединения были мгновенными.
// Настройка preemptive circuits
{
"circuits": {
"preemptive": {
"count": 3, // Количество готовых circuits
"renewBefore": 120 // Обновлять за 2 минуты до истечения
}
}
}
Сжатие данных на прикладном уровне уменьшает размер передаваемых пакетов без компрометации безопасности.
Использование аппаратных инструкций CPU для криптографических операций:
Множественные TCP соединения мультиплексируются через один circuit, экономя overhead на построении новых.
// Один circuit обслуживает множество streams
const circuit = await buildCircuit();
// Создаем streams для разных приложений
const httpStream = circuit.openStream(80);
const httpsStream = circuit.openStream(443);
const dnsStream = circuit.openStream(53);
Phantom предоставляет встроенные метрики для отслеживания производительности:
# Просмотр метрик через CLI
phantom metrics
# Вывод:
# Circuits:
# Active: 3
# Total built: 127
# Avg build time: 2.3s
# Failure rate: 2.1%
#
# Bandwidth:
# Download: 5.2 MB/s
# Upload: 1.8 MB/s
# Total transferred: 1.2 GB
#
# Latency:
# Current: 145ms
# Average: 152ms
# P95: 280ms