398 lines
18 KiB
Markdown
398 lines
18 KiB
Markdown
# MY Network v3.0 - Требования к децентрализации для миграции на FastAPI
|
||
|
||
## 🎯 Исполнительное резюме
|
||
|
||
MY Network v3.0 представляет собой **революционную децентрализованную архитектуру БЕЗ КОНСЕНСУСА**, где каждая нода принимает независимые решения. Миграция на FastAPI **КРИТИЧЕСКИ ВАЖНА** для корректной работы децентрализованной сети и предотвращения split сети.
|
||
|
||
### ⚠️ КРИТИЧЕСКОЕ ПРЕДУПРЕЖДЕНИЕ
|
||
**Нарушение протоколов децентрализации может привести к полному расколу сети MY Network v3.0!**
|
||
|
||
---
|
||
|
||
## 🏗️ Анализ принципов децентрализации
|
||
|
||
### 1. Основные принципы MY Network v3.0
|
||
|
||
#### ❌ ЧТО ПОЛНОСТЬЮ УДАЛЕНО:
|
||
- **Кворумная система консенсуса** - нет голосования
|
||
- **Централизованное управление** - нет центральных нод
|
||
- **Обязательная репликация** - добровольное участие
|
||
- **Голосование за контент** - индивидуальные решения
|
||
|
||
#### ✅ НОВЫЕ ПРИНЦИПЫ:
|
||
- **Автономность нод** - каждая нода решает самостоятельно
|
||
- **Индивидуальная фильтрация** - настраиваемые правила на уровне ноды
|
||
- **Устойчивость к цензуре** - контент доступен пока есть хотя бы одна нода
|
||
- **Гибкая топология** - публичные, приватные, bootstrap ноды
|
||
|
||
### 2. Архитектура синхронизации
|
||
|
||
```
|
||
┌─────────────────┐ анонс ┌─────────────────┐
|
||
│ Нода A │ ──────────→ │ Нода B │
|
||
│ (новый контент)│ │ (фильтрация) │
|
||
└─────────────────┘ └─────────────────┘
|
||
│
|
||
▼
|
||
┌────────────────┐
|
||
│ Индивидуальное │
|
||
│ решение │
|
||
│ (НЕТ консенсуса)│
|
||
└────────────────┘
|
||
│
|
||
▼
|
||
┌────────────────┐
|
||
│ Принять/Отклонить│
|
||
│ контент │
|
||
└────────────────┘
|
||
```
|
||
|
||
---
|
||
|
||
## 🔐 Анализ криптографических протоколов
|
||
|
||
### 1. Ed25519 подписи в межузловом общении
|
||
|
||
#### ✅ ТЕКУЩАЯ РЕАЛИЗАЦИЯ ПОЛНОСТЬЮ СОВМЕСТИМА:
|
||
|
||
**Ed25519Manager** ([`ed25519_manager.py:28`](uploader-bot/app/core/crypto/ed25519_manager.py:28)):
|
||
```python
|
||
class Ed25519Manager:
|
||
def sign_message(self, message: Dict[str, Any]) -> str:
|
||
"""Подписать сообщение ed25519 ключом"""
|
||
# ✅ SHA-256 хэширование
|
||
# ✅ Ed25519 подпись
|
||
# ✅ Base64 кодирование
|
||
|
||
def verify_signature(self, message: Dict[str, Any], signature: str, public_key_hex: str) -> bool:
|
||
"""Проверить подпись сообщения"""
|
||
# ✅ Проверка подлинности
|
||
# ✅ Защита от подделки
|
||
```
|
||
|
||
#### 🔒 КРИТИЧНЫЕ ТРЕБОВАНИЯ БЕЗОПАСНОСТИ:
|
||
1. **Обязательная подпись** всех межузловых сообщений
|
||
2. **Проверка временных меток** (защита от replay-атак)
|
||
3. **NODE_ID генерация** из публичного ключа
|
||
4. **Детерминированное хэширование** для поиска в сети
|
||
|
||
### 2. Система шифрования контента
|
||
|
||
```
|
||
Контент → AES-256-GCM → encrypted_content_hash (детерминированный)
|
||
↓
|
||
Unique encryption_key
|
||
↓
|
||
preview_id (изолированный)
|
||
```
|
||
|
||
**КРИТИЧНО:** Детерминированные хэши должны быть одинаковыми на всех нодах!
|
||
|
||
---
|
||
|
||
## 🌐 Анализ протоколов синхронизации
|
||
|
||
### 1. Протокол без консенсуса
|
||
|
||
#### НОВЫЙ АЛГОРИТМ V3.0:
|
||
```python
|
||
async def handle_content_announcement(peer_id: str, announcement: dict) -> bool:
|
||
"""Обработка анонса БЕЗ консенсуса"""
|
||
|
||
# 1. Получение анонса от пира
|
||
content_hash = announcement.get("content_hash")
|
||
|
||
# 2. ИНДИВИДУАЛЬНОЕ решение (НЕТ голосования!)
|
||
should_accept = await self.content_filter.should_accept_content(
|
||
content_hash, metadata, peer_id
|
||
)
|
||
|
||
# 3. Принятие решения только для себя
|
||
if should_accept:
|
||
await self.sync_manager.queue_content_sync(peer_id, content_hash)
|
||
|
||
return should_accept # НЕТ консенсуса!
|
||
```
|
||
|
||
### 2. Типы P2P сообщений v3.0
|
||
|
||
#### КРИТИЧНЫЕ ТИПЫ СООБЩЕНИЙ:
|
||
- `CONTENT_ANNOUNCEMENT` - анонс нового контента
|
||
- `SYNC_REQUEST` - запрос синхронизации
|
||
- `ACCESS_REQUEST` - запрос доступа к контенту
|
||
- `HANDSHAKE` - установка соединения
|
||
- `VERSION_INFO` - проверка совместимости
|
||
|
||
---
|
||
|
||
## 📊 Критически важные эндпоинты
|
||
|
||
### 1. Обязательные для работы сети
|
||
|
||
#### 🔗 МЕЖУЗЛОВОЕ ОБЩЕНИЕ:
|
||
```
|
||
POST /api/node/handshake # Установка соединений
|
||
POST /api/node/content/sync # Синхронизация БЕЗ консенсуса
|
||
POST /api/node/network/ping # Проверка доступности
|
||
POST /api/node/network/discover # Обнаружение нод
|
||
GET /api/node/network/status # Статус ноды
|
||
```
|
||
|
||
#### 🌐 API V3.0:
|
||
```
|
||
POST /api/v3/sync/announce # Анонс контента в сеть
|
||
GET /api/v3/sync/pending # Ожидающие синхронизации
|
||
POST /api/v3/sync/accept/{hash} # Принять контент
|
||
GET /api/v3/node/status # Статус ноды v3.0
|
||
GET /api/v3/network/stats # Статистика сети
|
||
```
|
||
|
||
#### 🔐 БЕЗОПАСНОСТЬ КОНТЕНТА:
|
||
```
|
||
GET /api/v3/content/{hash}/preview/{preview_id} # Получение preview
|
||
POST /api/v3/content/{hash}/request-key # Запрос ключа
|
||
```
|
||
|
||
### 2. Заголовки для межузлового общения
|
||
|
||
#### ОБЯЗАТЕЛЬНЫЕ ЗАГОЛОВКИ:
|
||
```
|
||
X-Node-Communication: true
|
||
X-Node-ID: node-abc123...
|
||
X-Node-Public-Key: ed25519_public_key_hex
|
||
X-Node-Signature: base64_ed25519_signature
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Совместимость FastAPI с требованиями безопасности
|
||
|
||
### 1. ✅ ПОЛОЖИТЕЛЬНЫЕ ФАКТОРЫ
|
||
|
||
#### Ed25519 криптография:
|
||
- ✅ **Полностью совместима** с FastAPI
|
||
- ✅ **cryptography** библиотека поддерживается
|
||
- ✅ **Асинхронная работа** без проблем
|
||
|
||
#### Middleware система:
|
||
- ✅ **CryptographicMiddleware** ([`middleware.py:276`](uploader-bot/app/api/middleware.py:276)) готов для FastAPI
|
||
- ✅ **Проверка подписей** реализована
|
||
- ✅ **Межузловые заголовки** поддерживаются
|
||
|
||
#### Существующая реализация:
|
||
- ✅ **FastAPI маршруты** уже реализованы ([`fastapi_node_routes.py`](uploader-bot/app/api/fastapi_node_routes.py:1))
|
||
- ✅ **Дублируют функциональность** Sanic версии
|
||
- ✅ **API v3.0** готов ([`fastapi_v3_routes.py`](uploader-bot/app/api/fastapi_v3_routes.py:1))
|
||
|
||
### 2. 🔧 ТРЕБУЕМЫЕ АДАПТАЦИИ
|
||
|
||
#### Middleware для FastAPI:
|
||
```python
|
||
# Нужно адаптировать из Sanic в FastAPI
|
||
from fastapi import Request, HTTPException
|
||
|
||
async def verify_node_signature(request: Request) -> Dict[str, Any]:
|
||
"""Адаптация для FastAPI"""
|
||
# Получение заголовков
|
||
signature = request.headers.get("x-node-signature")
|
||
node_id = request.headers.get("x-node-id")
|
||
public_key = request.headers.get("x-node-public-key")
|
||
|
||
# Чтение body
|
||
body = await request.body()
|
||
message_data = json.loads(body.decode())
|
||
|
||
# Проверка подписи
|
||
crypto_manager = get_ed25519_manager()
|
||
is_valid = crypto_manager.verify_signature(message_data, signature, public_key)
|
||
|
||
if not is_valid:
|
||
raise HTTPException(status_code=403, detail="Invalid signature")
|
||
```
|
||
|
||
---
|
||
|
||
## 🛡️ Детальный анализ требований для миграции
|
||
|
||
### 1. КРИТИЧЕСКИЕ КОМПОНЕНТЫ
|
||
|
||
#### 🔐 Криптографические требования:
|
||
- **Ed25519 подписи** - ✅ Готово
|
||
- **AES-256-GCM шифрование** - ⚠️ Требует проверки
|
||
- **Детерминированные хэши** - ⚠️ Требует тестирования
|
||
- **NODE_ID генерация** - ✅ Готово
|
||
|
||
#### 🌐 Сетевые требования:
|
||
- **P2P протокол** - ✅ Реализован
|
||
- **Handshake между нодами** - ✅ Готово
|
||
- **Discovery протокол** - ✅ Реализован
|
||
- **Rate limiting** - ✅ Готово
|
||
|
||
#### 🔄 Протоколы синхронизации:
|
||
- **Индивидуальные решения** - ⚠️ Требует адаптации
|
||
- **Контент фильтрация** - ⚠️ Заглушка (будущее)
|
||
- **Анонс контента** - ✅ Реализован
|
||
- **Очистка контента** - ⚠️ Требует адаптации
|
||
|
||
### 2. ТОЧКИ ОТКАЗА ПРИ МИГРАЦИИ
|
||
|
||
#### 🚨 ВЫСОКИЙ РИСК:
|
||
1. **Несовместимость хэшей** между Sanic и FastAPI
|
||
2. **Различия в обработке JSON** (сериализация)
|
||
3. **Middleware порядок выполнения**
|
||
4. **Асинхронная обработка** межузловых запросов
|
||
|
||
#### ⚠️ СРЕДНИЙ РИСК:
|
||
1. **Rate limiting** конфигурация
|
||
2. **CORS заголовки** для межузлового общения
|
||
3. **Логирование** межузловых операций
|
||
4. **Error handling** для криптографических ошибок
|
||
|
||
### 3. ЗАВИСИМОСТИ МЕЖДУ УЗЛАМИ
|
||
|
||
#### Цепочка зависимостей:
|
||
```
|
||
Bootstrap Node → Discovery → Handshake → Content Sync → Individual Decision
|
||
```
|
||
|
||
#### Fallback механизмы:
|
||
1. **Multiple bootstrap nodes** - для отказоустойчивости
|
||
2. **Peer discovery** - через несколько источников
|
||
3. **Content redundancy** - множественные источники
|
||
4. **Graceful degradation** - работа при недоступности некоторых нод
|
||
|
||
---
|
||
|
||
## 🎯 Рекомендации по сохранению децентрализованных функций
|
||
|
||
### 1. НЕМЕДЛЕННЫЕ ДЕЙСТВИЯ (КРИТИЧНО)
|
||
|
||
#### 🔥 Приоритет 1 - Криптография:
|
||
```python
|
||
# 1. Адаптировать CryptographicMiddleware для FastAPI
|
||
from fastapi import Depends, HTTPException
|
||
|
||
async def verify_inter_node_request(request: Request):
|
||
"""FastAPI dependency для проверки межузлового запроса"""
|
||
if request.headers.get("x-node-communication") != "true":
|
||
return None # Не межузловой запрос
|
||
|
||
# Проверка ed25519 подписи
|
||
crypto_manager = get_ed25519_manager()
|
||
# ... проверка подписи
|
||
|
||
return {"node_id": node_id, "public_key": public_key}
|
||
|
||
# 2. Использовать в маршрутах
|
||
@router.post("/api/node/handshake")
|
||
async def handshake(
|
||
request: Request,
|
||
node_info: dict = Depends(verify_inter_node_request)
|
||
):
|
||
# Гарантированно проверенный межузловой запрос
|
||
```
|
||
|
||
#### 🔥 Приоритет 2 - Детерминированные хэши:
|
||
```python
|
||
# Обеспечить одинаковые хэши на всех нодах
|
||
def calculate_deterministic_hash(content_data: bytes) -> str:
|
||
"""КРИТИЧНО: должно быть одинаково на всех нодах"""
|
||
return hashlib.sha256(content_data).hexdigest()
|
||
|
||
# Тестирование совместимости
|
||
async def test_hash_compatibility():
|
||
"""Тест совместимости хэшей между Sanic и FastAPI"""
|
||
test_data = b"test content"
|
||
sanic_hash = sanic_calculate_hash(test_data)
|
||
fastapi_hash = fastapi_calculate_hash(test_data)
|
||
assert sanic_hash == fastapi_hash, "Hash incompatibility detected!"
|
||
```
|
||
|
||
### 2. ПЛАН ПОЭТАПНОЙ МИГРАЦИИ
|
||
|
||
#### Этап 1 - Подготовка (1-2 дня):
|
||
1. **Тестирование совместимости** ed25519 между Sanic и FastAPI
|
||
2. **Проверка детерминированных хэшей**
|
||
3. **Адаптация middleware** для FastAPI
|
||
4. **Unit tests** для криптографических функций
|
||
|
||
#### Этап 2 - Миграция ядра (2-3 дня):
|
||
1. **Перенос межузловых маршрутов** на FastAPI
|
||
2. **Тестирование handshake** между нодами
|
||
3. **Проверка синхронизации** контента
|
||
4. **Мониторинг сетевых операций**
|
||
|
||
#### Этап 3 - Валидация (1-2 дня):
|
||
1. **Интеграционные тесты** с реальными нодами
|
||
2. **Проверка децентрализованной фильтрации**
|
||
3. **Stress testing** межузлового общения
|
||
4. **Мониторинг целостности сети**
|
||
|
||
### 3. КОНТРОЛЬНЫЕ ТОЧКИ БЕЗОПАСНОСТИ
|
||
|
||
#### ✅ Чек-лист перед запуском:
|
||
- [ ] Ed25519 подписи работают идентично
|
||
- [ ] Детерминированные хэши совпадают
|
||
- [ ] Handshake протокол функционирует
|
||
- [ ] Content sync без ошибок
|
||
- [ ] Node discovery работает
|
||
- [ ] Rate limiting настроен
|
||
- [ ] Логирование межузловых операций
|
||
- [ ] Error handling для всех сценариев
|
||
|
||
#### 🚨 Red flags (немедленная остановка):
|
||
- **Различия в хэшах** между нодами
|
||
- **Ошибки подписей** в межузловом общении
|
||
- **Split network** - разделение сети на группы
|
||
- **Consensus errors** - попытки создать консенсус
|
||
|
||
### 4. МОНИТОРИНГ И ДИАГНОСТИКА
|
||
|
||
#### Ключевые метрики:
|
||
```python
|
||
# Критичные метрики для мониторинга
|
||
CRITICAL_METRICS = {
|
||
"inter_node_handshakes": "Успешные handshake",
|
||
"signature_verification_rate": "Процент валидных подписей",
|
||
"content_sync_success": "Успешная синхронизация контента",
|
||
"network_split_detection": "Обнаружение разделения сети",
|
||
"node_discovery_rate": "Скорость обнаружения новых нод"
|
||
}
|
||
```
|
||
|
||
#### Алерты для DevOps:
|
||
1. **Signature verification < 95%** - КРИТИЧНО
|
||
2. **Network split detected** - НЕМЕДЛЕННОЕ ВМЕШАТЕЛЬСТВО
|
||
3. **Content sync failures > 10%** - ВЫСОКИЙ ПРИОРИТЕТ
|
||
4. **Node discovery degradation** - МОНИТОРИНГ
|
||
|
||
---
|
||
|
||
## 🎉 Заключение
|
||
|
||
### ✅ ГОТОВНОСТЬ К МИГРАЦИИ: 85%
|
||
|
||
MY Network v3.0 имеет **отличную основу** для миграции на FastAPI:
|
||
- ✅ **Ed25519 криптография** полностью совместима
|
||
- ✅ **FastAPI маршруты** уже реализованы
|
||
- ✅ **Middleware система** готова к адаптации
|
||
- ✅ **Децентрализованные принципы** четко определены
|
||
|
||
### ⚠️ КРИТИЧНЫЕ ЗАДАЧИ:
|
||
1. **Тестирование совместимости** хэшей и подписей
|
||
2. **Адаптация middleware** для FastAPI
|
||
3. **Валидация межузлового общения**
|
||
4. **Мониторинг целостности сети**
|
||
|
||
### 🚀 РЕЗУЛЬТАТ МИГРАЦИИ:
|
||
При правильном выполнении миграции MY Network v3.0 получит:
|
||
- 🌐 **Полную децентрализацию** без единых точек отказа
|
||
- 🔒 **Надежную безопасность** с ed25519 подписями
|
||
- 📈 **Улучшенную производительность** FastAPI
|
||
- 🛡️ **Устойчивость к цензуре** через множественные источники
|
||
|
||
**MY Network v3.0 + FastAPI = Будущее децентрализованной дистрибьюции контента!**
|
||
|
||
---
|
||
|
||
*Документ подготовлен для обеспечения корректной работы децентрализованной сети MY Network v3.0 при миграции на FastAPI | 2025* |