1226 lines
77 KiB
HTML
1226 lines
77 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="ru">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||
<title>Архитектура - Phantom Protocol</title>
|
||
<meta name="description" content="Техническая архитектура Phantom Protocol - 5 слоев анонимности, DHT, маршрутизация и безопасность">
|
||
|
||
<!-- Bootstrap CSS -->
|
||
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/css/bootstrap.min.css" rel="stylesheet">
|
||
|
||
<!-- Font Awesome -->
|
||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css">
|
||
|
||
<!-- Google Fonts -->
|
||
<link href="https://fonts.googleapis.com/css2?family=Orbitron:wght@400;500;600;700;900&family=Rajdhani:wght@300;400;500;600;700&display=swap" rel="stylesheet">
|
||
|
||
<!-- Custom CSS -->
|
||
<link rel="stylesheet" href="css/style.css">
|
||
<link rel="stylesheet" href="css/desktop-fix.css">
|
||
<link rel="stylesheet" href="css/responsive.css">
|
||
<link rel="stylesheet" href="css/vendor-prefixes.css">
|
||
<link rel="stylesheet" href="css/visual-fixes.css">
|
||
|
||
<!-- Prism.js for code highlighting -->
|
||
<link href="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/themes/prism-tomorrow.min.css" rel="stylesheet">
|
||
</head>
|
||
<body data-theme="dark">
|
||
|
||
<!-- Animated Background Canvas -->
|
||
<canvas id="phantomBackground"></canvas>
|
||
|
||
<!-- Navigation -->
|
||
<nav class="navbar navbar-expand-lg navbar-dark fixed-top glass-nav">
|
||
<div class="container">
|
||
<a class="navbar-brand" href="index.html">
|
||
<i class="fas fa-ghost"></i> <span class="brand-text">Phantom Protocol</span>
|
||
</a>
|
||
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarNav">
|
||
<span class="navbar-toggler-icon"></span>
|
||
</button>
|
||
<div class="collapse navbar-collapse" id="navbarNav">
|
||
<ul class="navbar-nav ms-auto">
|
||
<li class="nav-item"><a class="nav-link" href="index.html">Главная</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="docs.html">Документация</a></li>
|
||
<li class="nav-item"><a class="nav-link active" href="architecture.html">Архитектура</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="download.html">Скачать</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="community.html">Сообщество</a></li>
|
||
<li class="nav-item"><a class="nav-link" href="about.html">О проекте</a></li>
|
||
<li class="nav-item">
|
||
<a class="nav-link btn-gradient ms-lg-2" href="download.html">
|
||
<i class="fas fa-download me-1"></i> Начать
|
||
</a>
|
||
</li>
|
||
<li class="nav-item">
|
||
<button class="btn btn-sm theme-toggle" id="themeToggle">
|
||
<i class="fas fa-moon"></i>
|
||
</button>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- Hero Section -->
|
||
<section class="hero-section d-flex align-items-center" style="padding-top: 120px; padding-bottom: 60px; min-height: 40vh;">
|
||
<div class="container">
|
||
<div class="row justify-content-center text-center">
|
||
<div class="col-lg-10">
|
||
<div class="animate-fade-in-up">
|
||
<h1 class="display-3 fw-bold mb-4">
|
||
<i class="fas fa-project-diagram text-primary me-3"></i>
|
||
Архитектура Протокола
|
||
</h1>
|
||
<p class="lead text-muted mb-4">
|
||
Глубокое погружение в техническую архитектуру Phantom Protocol: 5 слоев защиты,
|
||
распределенная маршрутизация и криптографическая безопасность
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Main Content -->
|
||
<section class="py-5">
|
||
<div class="container">
|
||
<div class="row">
|
||
<!-- Sidebar Navigation -->
|
||
<div class="col-lg-3 mb-4">
|
||
<div class="sticky-top" style="top: 100px;">
|
||
<div class="card glass-card">
|
||
<div class="card-body">
|
||
<h5 class="card-title mb-3">
|
||
<i class="fas fa-list me-2"></i>Содержание
|
||
</h5>
|
||
<nav class="nav flex-column">
|
||
<a class="nav-link text-light" href="#overview">
|
||
<i class="fas fa-eye me-2"></i>Обзор
|
||
</a>
|
||
<a class="nav-link text-light" href="#layers">
|
||
<i class="fas fa-layer-group me-2"></i>5 Слоев Защиты
|
||
</a>
|
||
<a class="nav-link text-light" href="#routing">
|
||
<i class="fas fa-route me-2"></i>Маршрутизация
|
||
</a>
|
||
<a class="nav-link text-light" href="#dht">
|
||
<i class="fas fa-network-wired me-2"></i>DHT Система
|
||
</a>
|
||
<a class="nav-link text-light" href="#cryptography">
|
||
<i class="fas fa-shield-alt me-2"></i>Криптография
|
||
</a>
|
||
<a class="nav-link text-light" href="#comparison">
|
||
<i class="fas fa-balance-scale me-2"></i>Сравнение
|
||
</a>
|
||
<a class="nav-link text-light" href="#performance">
|
||
<i class="fas fa-tachometer-alt me-2"></i>Производительность
|
||
</a>
|
||
</nav>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Main Content Area -->
|
||
<div class="col-lg-9">
|
||
|
||
<!-- Overview Section -->
|
||
<div id="overview" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-eye text-primary me-2"></i>
|
||
Обзор Архитектуры
|
||
</h2>
|
||
|
||
<p class="lead">
|
||
Phantom Protocol представляет собой многоуровневую систему обеспечения анонимности,
|
||
основанную на принципах децентрализации, криптографической защиты и распределенной маршрутизации.
|
||
</p>
|
||
|
||
<div class="row mt-4">
|
||
<div class="col-md-6 mb-3">
|
||
<div class="feature-card p-3 h-100">
|
||
<h5><i class="fas fa-network-wired text-success me-2"></i>Распределенная Архитектура</h5>
|
||
<p class="mb-0 small">Нет центральных серверов или точек контроля. Каждая нода является равноправным участником сети.</p>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-3">
|
||
<div class="feature-card p-3 h-100">
|
||
<h5><i class="fas fa-layer-group text-info me-2"></i>Многослойная Защита</h5>
|
||
<p class="mb-0 small">5 независимых слоев безопасности создают множественные барьеры для атакующих.</p>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-3">
|
||
<div class="feature-card p-3 h-100">
|
||
<h5><i class="fas fa-random text-warning me-2"></i>Динамическая Маршрутизация</h5>
|
||
<p class="mb-0 small">Маршруты меняются постоянно, предотвращая анализ трафика и корреляционные атаки.</p>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-3">
|
||
<div class="feature-card p-3 h-100">
|
||
<h5><i class="fas fa-lock text-danger me-2"></i>Квантово-Устойчивое Шифрование</h5>
|
||
<p class="mb-0 small">Защита от квантовых компьютеров через решеточную криптографию и хеш-цепочки.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="alert alert-info mt-4">
|
||
<i class="fas fa-info-circle me-2"></i>
|
||
<strong>Философия дизайна:</strong> Безопасность через децентрализацию,
|
||
анонимность через избыточность, надежность через отсутствие доверия.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 5 Layers Section -->
|
||
<div id="layers" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-layer-group text-primary me-2"></i>
|
||
5 Слоев Защиты
|
||
</h2>
|
||
|
||
<p class="mb-4">
|
||
Каждый слой обеспечивает независимую защиту, создавая оборону в глубину.
|
||
Компрометация одного слоя не приводит к раскрытию пользователя.
|
||
</p>
|
||
|
||
<!-- Layer 1 -->
|
||
<div class="layer-card mb-4 p-4">
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="layer-number">1</div>
|
||
<div class="ms-3">
|
||
<h4 class="mb-2">Транспортный Слой</h4>
|
||
<span class="badge bg-primary">Transport Layer</span>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
<strong>Функция:</strong> Обфускация сетевого трафика и защита от DPI (Deep Packet Inspection).
|
||
</p>
|
||
<ul>
|
||
<li><strong>TLS 1.3</strong> с имитацией обычного HTTPS трафика</li>
|
||
<li><strong>WebSocket tunneling</strong> для прохождения через файрволы</li>
|
||
<li><strong>Pluggable transports</strong>: obfs4, meek, snowflake</li>
|
||
<li><strong>Domain fronting</strong> через CDN сервисы</li>
|
||
<li><strong>Трафик padding</strong> для защиты от анализа размеров пакетов</li>
|
||
</ul>
|
||
<div class="mt-3">
|
||
<pre><code class="language-javascript">// Пример конфигурации транспорта
|
||
{
|
||
"transport": {
|
||
"type": "obfs4",
|
||
"bridge": "auto",
|
||
"cert": "...",
|
||
"iatMode": 1, // Inter-Arrival Time obfuscation
|
||
"padding": true
|
||
}
|
||
}</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Layer 2 -->
|
||
<div class="layer-card mb-4 p-4">
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="layer-number" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">2</div>
|
||
<div class="ms-3">
|
||
<h4 class="mb-2">Слой Маршрутизации</h4>
|
||
<span class="badge" style="background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);">Routing Layer</span>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
<strong>Функция:</strong> Многоходовая луковая маршрутизация через случайные ноды.
|
||
</p>
|
||
<ul>
|
||
<li><strong>3-5 hop routing</strong> через географически распределенные ноды</li>
|
||
<li><strong>Guard nodes</strong> защищают точку входа пользователя</li>
|
||
<li><strong>Exit nodes</strong> с политиками фильтрации</li>
|
||
<li><strong>Route rotation</strong> каждые 10 минут или по требованию</li>
|
||
<li><strong>Path selection</strong> на основе bandwidth, latency и reputation</li>
|
||
</ul>
|
||
<div class="mt-3 text-center">
|
||
<div class="routing-diagram p-3" style="background: rgba(102, 126, 234, 0.1); border-radius: 8px;">
|
||
<strong>Клиент</strong>
|
||
<i class="fas fa-arrow-right mx-2"></i>
|
||
<strong>Guard</strong>
|
||
<i class="fas fa-arrow-right mx-2"></i>
|
||
<strong>Middle 1</strong>
|
||
<i class="fas fa-arrow-right mx-2"></i>
|
||
<strong>Middle 2</strong>
|
||
<i class="fas fa-arrow-right mx-2"></i>
|
||
<strong>Exit</strong>
|
||
<i class="fas fa-arrow-right mx-2"></i>
|
||
<strong>Destination</strong>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Layer 3 -->
|
||
<div class="layer-card mb-4 p-4">
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="layer-number" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);">3</div>
|
||
<div class="ms-3">
|
||
<h4 class="mb-2">Криптографический Слой</h4>
|
||
<span class="badge" style="background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);">Cryptographic Layer</span>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
<strong>Функция:</strong> Множественное шифрование и защита целостности данных.
|
||
</p>
|
||
<ul>
|
||
<li><strong>Onion encryption</strong>: каждый hop добавляет слой шифрования</li>
|
||
<li><strong>ChaCha20-Poly1305</strong> для симметричного шифрования</li>
|
||
<li><strong>X25519</strong> для обмена ключами (ECDH)</li>
|
||
<li><strong>Ed25519</strong> для цифровых подписей</li>
|
||
<li><strong>Kyber-768</strong> для пост-квантовой защиты</li>
|
||
</ul>
|
||
<div class="mt-3">
|
||
<pre><code class="language-plaintext">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]
|
||
→ Передача в сеть</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Layer 4 -->
|
||
<div class="layer-card mb-4 p-4">
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="layer-number" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);">4</div>
|
||
<div class="ms-3">
|
||
<h4 class="mb-2">Слой Обнаружения</h4>
|
||
<span class="badge" style="background: linear-gradient(135deg, #4facfe 0%, #00f2fe 100%);">Discovery Layer</span>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
<strong>Функция:</strong> Распределенное обнаружение нод через DHT без центральных серверов.
|
||
</p>
|
||
<ul>
|
||
<li><strong>Kademlia DHT</strong> для поиска и хранения информации о нодах</li>
|
||
<li><strong>Bootstrap nodes</strong> жестко закодированы в клиенте</li>
|
||
<li><strong>Peer exchange</strong> между нодами для расширения списка</li>
|
||
<li><strong>Node reputation system</strong> на основе uptime и performance</li>
|
||
<li><strong>Sybil attack protection</strong> через proof-of-work и rate limiting</li>
|
||
</ul>
|
||
<div class="mt-3">
|
||
<pre><code class="language-javascript">// DHT запрос ноды
|
||
{
|
||
"method": "findNode",
|
||
"target": "a8f3c9e2...",
|
||
"k": 20, // возвращает 20 ближайших нод
|
||
"signature": "ed25519_sig..."
|
||
}</code></pre>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Layer 5 -->
|
||
<div class="layer-card mb-4 p-4">
|
||
<div class="d-flex align-items-start mb-3">
|
||
<div class="layer-number" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);">5</div>
|
||
<div class="ms-3">
|
||
<h4 class="mb-2">Прикладной Слой</h4>
|
||
<span class="badge" style="background: linear-gradient(135deg, #fa709a 0%, #fee140 100%);">Application Layer</span>
|
||
</div>
|
||
</div>
|
||
<p>
|
||
<strong>Функция:</strong> Анонимные сервисы и end-to-end защита приложений.
|
||
</p>
|
||
<ul>
|
||
<li><strong>Hidden services</strong> (.phantom адреса) с rendezvous points</li>
|
||
<li><strong>End-to-end encryption</strong> между клиентом и сервисом</li>
|
||
<li><strong>Stream isolation</strong> для разных приложений</li>
|
||
<li><strong>DNS over Phantom</strong> для предотвращения утечек DNS</li>
|
||
<li><strong>Application-level padding</strong> и timing obfuscation</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="alert alert-warning mt-4">
|
||
<i class="fas fa-exclamation-triangle me-2"></i>
|
||
<strong>Важно:</strong> Все слои работают независимо. Компрометация одного слоя не влияет на безопасность других.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Routing Section -->
|
||
<div id="routing" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-route text-primary me-2"></i>
|
||
Система Маршрутизации
|
||
</h2>
|
||
|
||
<h4 class="mt-4">Выбор Пути (Path Selection)</h4>
|
||
<p>
|
||
Phantom использует сложный алгоритм выбора пути, учитывающий множество факторов:
|
||
</p>
|
||
|
||
<div class="table-responsive">
|
||
<table class="table table-dark table-hover">
|
||
<thead>
|
||
<tr>
|
||
<th>Фактор</th>
|
||
<th>Вес</th>
|
||
<th>Описание</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><i class="fas fa-tachometer-alt text-primary me-2"></i>Bandwidth</td>
|
||
<td>40%</td>
|
||
<td>Пропускная способность ноды</td>
|
||
</tr>
|
||
<tr>
|
||
<td><i class="fas fa-clock text-success me-2"></i>Latency</td>
|
||
<td>25%</td>
|
||
<td>Задержка соединения</td>
|
||
</tr>
|
||
<tr>
|
||
<td><i class="fas fa-star text-warning me-2"></i>Reputation</td>
|
||
<td>20%</td>
|
||
<td>История надежности</td>
|
||
</tr>
|
||
<tr>
|
||
<td><i class="fas fa-globe text-info me-2"></i>Geography</td>
|
||
<td>10%</td>
|
||
<td>Географическое разнообразие</td>
|
||
</tr>
|
||
<tr>
|
||
<td><i class="fas fa-chart-line text-danger me-2"></i>Uptime</td>
|
||
<td>5%</td>
|
||
<td>Время работы без сбоев</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Типы Нод</h4>
|
||
<div class="row">
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card bg-dark h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-success"><i class="fas fa-shield-alt me-2"></i>Guard Node</h5>
|
||
<p class="small mb-2">Точка входа в сеть. Знает IP пользователя, но не знает назначение.</p>
|
||
<ul class="small mb-0">
|
||
<li>Высокая стабильность</li>
|
||
<li>Долгосрочное соединение</li>
|
||
<li>Меняется раз в 2-3 месяца</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card bg-dark h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-info"><i class="fas fa-network-wired me-2"></i>Middle Node</h5>
|
||
<p class="small mb-2">Промежуточные ноды. Не знают ни источник, ни назначение.</p>
|
||
<ul class="small mb-0">
|
||
<li>Максимальная анонимность</li>
|
||
<li>Случайный выбор</li>
|
||
<li>Меняется каждые 10 минут</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-4 mb-3">
|
||
<div class="card bg-dark h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-warning"><i class="fas fa-door-open me-2"></i>Exit Node</h5>
|
||
<p class="small mb-2">Точка выхода в интернет. Знает назначение, но не знает источник.</p>
|
||
<ul class="small mb-0">
|
||
<li>Фильтрация контента</li>
|
||
<li>Политики безопасности</li>
|
||
<li>Exit node families</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Circuit Building</h4>
|
||
<pre><code class="language-javascript">// Построение цепи маршрутизации
|
||
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;
|
||
}</code></pre>
|
||
|
||
<div class="alert alert-info mt-4">
|
||
<i class="fas fa-lightbulb me-2"></i>
|
||
<strong>Совет:</strong> Для максимальной безопасности используйте настройку
|
||
<code>strictNodes</code> для контроля географии нод в вашем маршруте.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- DHT Section -->
|
||
<div id="dht" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-network-wired text-primary me-2"></i>
|
||
DHT Система (Distributed Hash Table)
|
||
</h2>
|
||
|
||
<p class="lead">
|
||
Phantom использует модифицированный Kademlia DHT для децентрализованного обнаружения нод
|
||
и хранения метаданных сети без центральных серверов.
|
||
</p>
|
||
|
||
<h4 class="mt-4">Архитектура DHT</h4>
|
||
<p>
|
||
Каждая нода в сети имеет уникальный 160-битный идентификатор (Node ID),
|
||
генерируемый как <code>SHA-1(публичный_ключ)</code>.
|
||
</p>
|
||
|
||
<div class="row mb-4">
|
||
<div class="col-md-6">
|
||
<h5><i class="fas fa-database text-success me-2"></i>Хранимые Данные</h5>
|
||
<ul>
|
||
<li>IP адреса и порты нод</li>
|
||
<li>Публичные ключи</li>
|
||
<li>Характеристики нод (bandwidth, flags)</li>
|
||
<li>Hidden service дескрипторы</li>
|
||
<li>Introduction points</li>
|
||
</ul>
|
||
</div>
|
||
<div class="col-md-6">
|
||
<h5><i class="fas fa-search text-info me-2"></i>Операции DHT</h5>
|
||
<ul>
|
||
<li><strong>FIND_NODE</strong> - поиск ближайших нод</li>
|
||
<li><strong>STORE</strong> - сохранение данных</li>
|
||
<li><strong>FIND_VALUE</strong> - получение данных</li>
|
||
<li><strong>PING</strong> - проверка доступности</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Расстояние в DHT (XOR Metric)</h4>
|
||
<p>
|
||
Kademlia использует XOR метрику для определения "расстояния" между нодами:
|
||
</p>
|
||
<pre><code class="language-javascript">// Вычисление расстояния между двумя 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;
|
||
}</code></pre>
|
||
|
||
<h4 class="mt-4">K-Buckets (Routing Table)</h4>
|
||
<p>
|
||
Каждая нода поддерживает routing table из 160 k-buckets (k обычно = 20):
|
||
</p>
|
||
<div class="table-responsive">
|
||
<table class="table table-dark table-sm">
|
||
<thead>
|
||
<tr>
|
||
<th>Bucket #</th>
|
||
<th>Диапазон расстояний</th>
|
||
<th>Количество нод</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>0</td>
|
||
<td>2<sup>0</sup> - 2<sup>1</sup></td>
|
||
<td>≤ k (20)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>1</td>
|
||
<td>2<sup>1</sup> - 2<sup>2</sup></td>
|
||
<td>≤ k (20)</td>
|
||
</tr>
|
||
<tr>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
<td>...</td>
|
||
</tr>
|
||
<tr>
|
||
<td>159</td>
|
||
<td>2<sup>159</sup> - 2<sup>160</sup></td>
|
||
<td>≤ k (20)</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Защита от Атак</h4>
|
||
<div class="row">
|
||
<div class="col-md-6 mb-3">
|
||
<div class="card bg-danger bg-opacity-10 border-danger h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-danger"><i class="fas fa-user-secret me-2"></i>Sybil Attack</h5>
|
||
<p class="small">Атакующий создает множество фейковых нод.</p>
|
||
<p class="small mb-0"><strong>Защита:</strong></p>
|
||
<ul class="small mb-0">
|
||
<li>Proof-of-Work для регистрации</li>
|
||
<li>Rate limiting на запросы</li>
|
||
<li>Reputation system</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-3">
|
||
<div class="card bg-warning bg-opacity-10 border-warning h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-warning"><i class="fas fa-moon me-2"></i>Eclipse Attack</h5>
|
||
<p class="small">Изоляция ноды от остальной сети.</p>
|
||
<p class="small mb-0"><strong>Защита:</strong></p>
|
||
<ul class="small mb-0">
|
||
<li>Множественные bootstrap nodes</li>
|
||
<li>Peer diversity requirements</li>
|
||
<li>Periodic refresh от разных IP</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="alert alert-success mt-4">
|
||
<i class="fas fa-check-circle me-2"></i>
|
||
DHT обеспечивает полную децентрализацию: нет центральных серверов,
|
||
которые можно заблокировать или скомпрометировать.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Cryptography Section -->
|
||
<div id="cryptography" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-shield-alt text-primary me-2"></i>
|
||
Криптографическая Защита
|
||
</h2>
|
||
|
||
<h4 class="mt-3">Криптографические Примитивы</h4>
|
||
<div class="table-responsive">
|
||
<table class="table table-dark table-striped">
|
||
<thead>
|
||
<tr>
|
||
<th>Назначение</th>
|
||
<th>Алгоритм</th>
|
||
<th>Размер ключа</th>
|
||
<th>Описание</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td>Симметричное шифрование</td>
|
||
<td><strong>ChaCha20-Poly1305</strong></td>
|
||
<td>256 бит</td>
|
||
<td>AEAD cipher, быстрее AES на мобильных</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Обмен ключами</td>
|
||
<td><strong>X25519</strong></td>
|
||
<td>256 бит</td>
|
||
<td>Elliptic Curve Diffie-Hellman</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Цифровые подписи</td>
|
||
<td><strong>Ed25519</strong></td>
|
||
<td>256 бит</td>
|
||
<td>EdDSA на Curve25519</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Хеш-функции</td>
|
||
<td><strong>BLAKE3</strong></td>
|
||
<td>256 бит</td>
|
||
<td>Быстрее SHA-256, параллелизуемый</td>
|
||
</tr>
|
||
<tr>
|
||
<td>KDF</td>
|
||
<td><strong>HKDF-SHA256</strong></td>
|
||
<td>-</td>
|
||
<td>Вывод ключей из общего секрета</td>
|
||
</tr>
|
||
<tr>
|
||
<td>Пост-квантовая защита</td>
|
||
<td><strong>Kyber-768</strong></td>
|
||
<td>768 бит</td>
|
||
<td>NIST PQC finalist, решеточная криптография</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Гибридная Криптосистема</h4>
|
||
<p>
|
||
Phantom использует гибридную схему, комбинируя классическую и пост-квантовую криптографию:
|
||
</p>
|
||
<pre><code class="language-javascript">// Гибридный обмен ключами
|
||
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 };
|
||
}</code></pre>
|
||
|
||
<h4 class="mt-4">Onion Encryption (Луковое Шифрование)</h4>
|
||
<p>
|
||
Каждый слой маршрутизации добавляет свой слой шифрования:
|
||
</p>
|
||
<pre><code class="language-javascript">// Создание луковой структуры
|
||
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);
|
||
}</code></pre>
|
||
|
||
<h4 class="mt-4">Perfect Forward Secrecy (PFS)</h4>
|
||
<p>
|
||
Phantom использует эфемерные ключи для каждой сессии. Компрометация долгосрочных ключей
|
||
не раскрывает предыдущие коммуникации.
|
||
</p>
|
||
<div class="card bg-info bg-opacity-10 border-info">
|
||
<div class="card-body">
|
||
<h6 class="text-info"><i class="fas fa-key me-2"></i>Иерархия ключей</h6>
|
||
<ol class="mb-0 small">
|
||
<li><strong>Identity Key</strong> (долгосрочный) - Ed25519, хранится зашифрованным</li>
|
||
<li><strong>Medium-term Key</strong> (неделя) - X25519, используется для DH</li>
|
||
<li><strong>Ephemeral Session Key</strong> (10 минут) - производный от DH</li>
|
||
<li><strong>Per-hop Keys</strong> (одноразовые) - для каждого hop в цепи</li>
|
||
</ol>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Comparison Section -->
|
||
<div id="comparison" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-balance-scale text-primary me-2"></i>
|
||
Сравнение с Другими Системами
|
||
</h2>
|
||
|
||
<div class="table-responsive">
|
||
<table class="table table-dark table-hover">
|
||
<thead>
|
||
<tr>
|
||
<th>Характеристика</th>
|
||
<th>Phantom Protocol</th>
|
||
<th>Tor</th>
|
||
<th>I2P</th>
|
||
<th>VPN</th>
|
||
</tr>
|
||
</thead>
|
||
<tbody>
|
||
<tr>
|
||
<td><strong>Слои маршрутизации</strong></td>
|
||
<td class="text-success">3-5 hops</td>
|
||
<td class="text-success">3 hops</td>
|
||
<td class="text-warning">Переменное</td>
|
||
<td class="text-danger">1 hop</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Децентрализация</strong></td>
|
||
<td class="text-success">Полная (DHT)</td>
|
||
<td class="text-warning">Частичная (directory authorities)</td>
|
||
<td class="text-success">Полная</td>
|
||
<td class="text-danger">Централизованная</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Пост-квантовая защита</strong></td>
|
||
<td class="text-success">Да (Kyber-768)</td>
|
||
<td class="text-danger">Нет</td>
|
||
<td class="text-danger">Нет</td>
|
||
<td class="text-danger">Нет</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Транспортная обфускация</strong></td>
|
||
<td class="text-success">obfs4, meek, snowflake</td>
|
||
<td class="text-success">pluggable transports</td>
|
||
<td class="text-warning">Базовая</td>
|
||
<td class="text-warning">Зависит от провайдера</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Скорость</strong></td>
|
||
<td class="text-success">Высокая (оптимизированная маршрутизация)</td>
|
||
<td class="text-warning">Средняя</td>
|
||
<td class="text-warning">Средняя-Низкая</td>
|
||
<td class="text-success">Высокая</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Hidden services</strong></td>
|
||
<td class="text-success">.phantom домены</td>
|
||
<td class="text-success">.onion домены</td>
|
||
<td class="text-success">.i2p адреса</td>
|
||
<td class="text-danger">Нет</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Защита от корреляции трафика</strong></td>
|
||
<td class="text-success">Padding + timing randomization</td>
|
||
<td class="text-warning">Базовая</td>
|
||
<td class="text-success">Хорошая</td>
|
||
<td class="text-danger">Нет</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Устойчивость к цензуре</strong></td>
|
||
<td class="text-success">Высокая (domain fronting, DHT)</td>
|
||
<td class="text-success">Высокая (bridges)</td>
|
||
<td class="text-warning">Средняя</td>
|
||
<td class="text-warning">Средняя</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Модель угроз</strong></td>
|
||
<td class="text-success">Государственный уровень</td>
|
||
<td class="text-success">Государственный уровень</td>
|
||
<td class="text-success">Государственный уровень</td>
|
||
<td class="text-warning">Корпоративный/ISP</td>
|
||
</tr>
|
||
<tr>
|
||
<td><strong>Open Source</strong></td>
|
||
<td class="text-success">Да (MIT)</td>
|
||
<td class="text-success">Да (BSD)</td>
|
||
<td class="text-success">Да</td>
|
||
<td class="text-warning">Редко</td>
|
||
</tr>
|
||
</tbody>
|
||
</table>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Когда использовать Phantom?</h4>
|
||
<div class="row">
|
||
<div class="col-md-6 mb-3">
|
||
<div class="card bg-success bg-opacity-10 border-success h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-success"><i class="fas fa-check-circle me-2"></i>Лучший выбор</h5>
|
||
<ul class="small mb-0">
|
||
<li>Журналисты и активисты в авторитарных странах</li>
|
||
<li>Whistleblowers и источники конфиденциальной информации</li>
|
||
<li>Защита от квантовых компьютеров</li>
|
||
<li>Максимальная устойчивость к цензуре</li>
|
||
<li>Хостинг anonymous hidden services</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-6 mb-3">
|
||
<div class="card bg-warning bg-opacity-10 border-warning h-100">
|
||
<div class="card-body">
|
||
<h5 class="text-warning"><i class="fas fa-exclamation-triangle me-2"></i>Альтернативы</h5>
|
||
<ul class="small mb-0">
|
||
<li><strong>VPN</strong> - для простого обхода гео-блокировок</li>
|
||
<li><strong>Tor</strong> - более зрелая экосистема и больше exit nodes</li>
|
||
<li><strong>I2P</strong> - для peer-to-peer приложений внутри сети</li>
|
||
<li><strong>Proxy</strong> - для базовой приватности без особых требований</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Performance Section -->
|
||
<div id="performance" class="mb-5">
|
||
<div class="card glass-card">
|
||
<div class="card-body p-4">
|
||
<h2 class="card-title mb-4">
|
||
<i class="fas fa-tachometer-alt text-primary me-2"></i>
|
||
Производительность и Оптимизация
|
||
</h2>
|
||
|
||
<h4 class="mt-3">Метрики Производительности</h4>
|
||
<div class="row">
|
||
<div class="col-md-3 mb-3">
|
||
<div class="stat-card p-3 text-center">
|
||
<div class="stat-value text-success">~150ms</div>
|
||
<div class="stat-label">Средняя латентность</div>
|
||
<small class="text-muted">3-hop circuit</small>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-3 mb-3">
|
||
<div class="stat-card p-3 text-center">
|
||
<div class="stat-value text-info">50-100 Mbps</div>
|
||
<div class="stat-label">Пропускная способность</div>
|
||
<small class="text-muted">Типичная для guard node</small>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-3 mb-3">
|
||
<div class="stat-card p-3 text-center">
|
||
<div class="stat-value text-warning">2-3 сек</div>
|
||
<div class="stat-label">Построение circuit</div>
|
||
<small class="text-muted">Включая crypto handshake</small>
|
||
</div>
|
||
</div>
|
||
<div class="col-md-3 mb-3">
|
||
<div class="stat-card p-3 text-center">
|
||
<div class="stat-value text-danger">~20 MB</div>
|
||
<div class="stat-label">Использование RAM</div>
|
||
<small class="text-muted">Phantom клиент</small>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Оптимизации</h4>
|
||
<div class="accordion" id="optimizationsAccordion">
|
||
<!-- Optimization 1 -->
|
||
<div class="accordion-item bg-dark border-secondary">
|
||
<h2 class="accordion-header">
|
||
<button class="accordion-button bg-dark text-light collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#opt1">
|
||
<i class="fas fa-bolt text-warning me-2"></i>
|
||
Circuit Preemption
|
||
</button>
|
||
</h2>
|
||
<div id="opt1" class="accordion-collapse collapse" data-bs-parent="#optimizationsAccordion">
|
||
<div class="accordion-body">
|
||
<p>Phantom заранее строит несколько circuits в фоне, чтобы новые соединения были мгновенными.</p>
|
||
<pre><code class="language-javascript">// Настройка preemptive circuits
|
||
{
|
||
"circuits": {
|
||
"preemptive": {
|
||
"count": 3, // Количество готовых circuits
|
||
"renewBefore": 120 // Обновлять за 2 минуты до истечения
|
||
}
|
||
}
|
||
}</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Optimization 2 -->
|
||
<div class="accordion-item bg-dark border-secondary">
|
||
<h2 class="accordion-header">
|
||
<button class="accordion-button bg-dark text-light collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#opt2">
|
||
<i class="fas fa-compress text-info me-2"></i>
|
||
Protocol Compression
|
||
</button>
|
||
</h2>
|
||
<div id="opt2" class="accordion-collapse collapse" data-bs-parent="#optimizationsAccordion">
|
||
<div class="accordion-body">
|
||
<p>Сжатие данных на прикладном уровне уменьшает размер передаваемых пакетов без компрометации безопасности.</p>
|
||
<ul>
|
||
<li>LZ4 для быстрого сжатия текстовых данных</li>
|
||
<li>Brotli для HTML/CSS/JS контента</li>
|
||
<li>Selective compression - только compressible data</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Optimization 3 -->
|
||
<div class="accordion-item bg-dark border-secondary">
|
||
<h2 class="accordion-header">
|
||
<button class="accordion-button bg-dark text-light collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#opt3">
|
||
<i class="fas fa-microchip text-success me-2"></i>
|
||
Hardware Acceleration
|
||
</button>
|
||
</h2>
|
||
<div id="opt3" class="accordion-collapse collapse" data-bs-parent="#optimizationsAccordion">
|
||
<div class="accordion-body">
|
||
<p>Использование аппаратных инструкций CPU для криптографических операций:</p>
|
||
<ul>
|
||
<li><strong>AES-NI</strong> для AES операций (fallback)</li>
|
||
<li><strong>SHA extensions</strong> для хеш-функций</li>
|
||
<li><strong>AVX2/AVX-512</strong> для параллельных вычислений</li>
|
||
<li><strong>ARM Crypto Extensions</strong> на мобильных устройствах</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Optimization 4 -->
|
||
<div class="accordion-item bg-dark border-secondary">
|
||
<h2 class="accordion-header">
|
||
<button class="accordion-button bg-dark text-light collapsed" type="button" data-bs-toggle="collapse" data-bs-target="#opt4">
|
||
<i class="fas fa-stream text-primary me-2"></i>
|
||
Stream Multiplexing
|
||
</button>
|
||
</h2>
|
||
<div id="opt4" class="accordion-collapse collapse" data-bs-parent="#optimizationsAccordion">
|
||
<div class="accordion-body">
|
||
<p>Множественные TCP соединения мультиплексируются через один circuit, экономя overhead на построении новых.</p>
|
||
<pre><code class="language-javascript">// Один circuit обслуживает множество streams
|
||
const circuit = await buildCircuit();
|
||
|
||
// Создаем streams для разных приложений
|
||
const httpStream = circuit.openStream(80);
|
||
const httpsStream = circuit.openStream(443);
|
||
const dnsStream = circuit.openStream(53);</code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<h4 class="mt-4">Мониторинг Производительности</h4>
|
||
<p>Phantom предоставляет встроенные метрики для отслеживания производительности:</p>
|
||
<pre><code class="language-bash"># Просмотр метрик через 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</code></pre>
|
||
|
||
<div class="alert alert-info mt-4">
|
||
<i class="fas fa-lightbulb me-2"></i>
|
||
<strong>Совет:</strong> Для максимальной производительности выбирайте guard node
|
||
географически близко к вам, а exit node близко к целевому серверу.
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- Footer -->
|
||
<!-- Единый Footer для всех страниц Phantom Protocol -->
|
||
<footer class="footer py-5 mt-5">
|
||
<div class="container">
|
||
<div class="row">
|
||
<!-- Колонка 1: Логотип и описание -->
|
||
<div class="col-lg-4 col-md-6 mb-4 mb-lg-0">
|
||
<h5 class="mb-3">
|
||
<i class="fas fa-ghost text-gradient"></i> Phantom Protocol
|
||
</h5>
|
||
<p class="text-muted">
|
||
Децентрализованная приватная сеть нового поколения с постквантовой криптографией.
|
||
</p>
|
||
<div class="social-links mt-3">
|
||
<a href="https://github.com/phantom-protocol" target="_blank" class="me-2">
|
||
<i class="fab fa-github"></i>
|
||
</a>
|
||
<a href="https://twitter.com/PhantomProtocol" target="_blank" class="me-2">
|
||
<i class="fab fa-twitter"></i>
|
||
</a>
|
||
<a href="https://t.me/phantomprotocol" target="_blank" class="me-2">
|
||
<i class="fab fa-telegram"></i>
|
||
</a>
|
||
<a href="https://discord.gg/phantom" target="_blank">
|
||
<i class="fab fa-discord"></i>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Колонка 2: Продукт -->
|
||
<div class="col-lg-2 col-md-6 mb-4 mb-lg-0">
|
||
<h6 class="mb-3">Продукт</h6>
|
||
<ul class="list-unstyled">
|
||
<li class="mb-2"><a href="architecture.html" class="footer-link">Архитектура</a></li>
|
||
<li class="mb-2"><a href="download.html" class="footer-link">Скачать</a></li>
|
||
<li class="mb-2"><a href="index.html#comparison" class="footer-link">Сравнение</a></li>
|
||
<li class="mb-2"><a href="index.html#demo" class="footer-link">Демо</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- Колонка 3: Ресурсы -->
|
||
<div class="col-lg-2 col-md-6 mb-4 mb-lg-0">
|
||
<h6 class="mb-3">Ресурсы</h6>
|
||
<ul class="list-unstyled">
|
||
<li class="mb-2"><a href="docs.html" class="footer-link">Документация</a></li>
|
||
<li class="mb-2"><a href="docs.html#api" class="footer-link">API Reference</a></li>
|
||
<li class="mb-2"><a href="docs.html#faq" class="footer-link">FAQ</a></li>
|
||
<li class="mb-2"><a href="https://github.com/phantom-protocol" target="_blank" class="footer-link">GitHub</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- Колонка 4: Сообщество -->
|
||
<div class="col-lg-2 col-md-6 mb-4 mb-lg-0">
|
||
<h6 class="mb-3">Сообщество</h6>
|
||
<ul class="list-unstyled">
|
||
<li class="mb-2"><a href="community.html" class="footer-link">Сообщество</a></li>
|
||
<li class="mb-2"><a href="https://github.com/phantom-protocol/discussions" target="_blank" class="footer-link">Обсуждения</a></li>
|
||
<li class="mb-2"><a href="https://t.me/PhantomProtocol" target="_blank" class="footer-link">Telegram</a></li>
|
||
<li class="mb-2"><a href="https://discord.gg/phantom" target="_blank" class="footer-link">Discord</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- Колонка 5: О проекте -->
|
||
<div class="col-lg-2 col-md-6">
|
||
<h6 class="mb-3">О проекте</h6>
|
||
<ul class="list-unstyled">
|
||
<li class="mb-2"><a href="about.html" class="footer-link">О нас</a></li>
|
||
<li class="mb-2"><a href="https://github.com/phantom-protocol/phantom/blob/main/LICENSE" target="_blank" class="footer-link">Лицензия MIT</a></li>
|
||
<li class="mb-2"><a href="https://github.com/phantom-protocol/phantom/blob/main/CONTRIBUTING.md" target="_blank" class="footer-link">Контрибуция</a></li>
|
||
<li class="mb-2"><a href="about.html" class="footer-link">Контакты</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<hr class="my-4">
|
||
|
||
<!-- Footer Bottom -->
|
||
<div class="footer-bottom">
|
||
<div class="row align-items-center">
|
||
<div class="col-md-6">
|
||
<p class="mb-0">© 2025 Phantom Protocol. Open Source под лицензией MIT.</p>
|
||
</div>
|
||
<div class="col-md-6 text-md-end">
|
||
<p class="mb-0">
|
||
<i class="fas fa-code"></i> Сделано с <i class="fas fa-heart text-danger"></i> для открытого интернета
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
|
||
<!-- jQuery -->
|
||
<script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
|
||
|
||
<!-- Bootstrap JS -->
|
||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.2/dist/js/bootstrap.bundle.min.js"></script>
|
||
|
||
<!-- Prism.js -->
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/prism.min.js"></script>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-javascript.min.js"></script>
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/prism/1.29.0/components/prism-bash.min.js"></script>
|
||
|
||
<!-- Main JavaScript -->
|
||
<script src="js/background.js" defer></script>
|
||
<script src="js/main.js" defer></script>
|
||
|
||
<!-- Smooth scroll for sidebar -->
|
||
<script>
|
||
document.querySelectorAll('.nav-link[href^="#"]').forEach(anchor => {
|
||
anchor.addEventListener('click', function (e) {
|
||
e.preventDefault();
|
||
const target = document.querySelector(this.getAttribute('href'));
|
||
if (target) {
|
||
target.scrollIntoView({
|
||
behavior: 'smooth',
|
||
block: 'start'
|
||
});
|
||
}
|
||
});
|
||
});
|
||
</script>
|
||
|
||
</body>
|
||
</html> |