Анонимный P2P-обменник файлов и сообщений. Без регистрации, без лимитов на размер файлов, с полным сквозным шифрованием.
Сервер никогда не видит plaintext — только зашифрованные байты. Нет аккаунтов, нет базы данных с пользователями. Всё, что хранится на сервере — эфемерные ключи в Redis с автоматическим TTL.
Peer A Серверный кластер Peer B
┌──────┐ ┌──────────────────┐ ┌──────┐
│Client│──TLS/TCP─────────│ Gateway │─────────TLS/TCP──│Client│
│ │ │ (conn manager) │ │ │
│ │ ├──────────────────┤ │ │
│ │ │ Signaling │ │ │
│ │ │ (peer discovery) │ │ │
│ │ ├──────────────────┤ │ │
│ │ │ Relay │ │ │
│ │ │ (TURN fallback) │ │ │
│ │ └──────────────────┘ │ │
│ │ │ │
│ │◄══════ Direct P2P · UDP hole punch · DTLS ════════════►│ │
│ │◄══════ или Relay (если оба за Symmetric NAT) ══════════►│ │
└──────┘ └──────┘
- Peer A создаёт комнату, получает код
- Peer B вводит код, подключается к тому же Gateway
- Через Signaling происходит обмен ICE-кандидатами и X3DH prekeys
- Устанавливается прямое P2P-соединение (UDP hole punching + DTLS)
- Если NAT не позволяет — трафик идёт через Relay
- Файлы и сообщения шифруются Double Ratchet (каждое сообщение — уникальный ключ)
- E2EE: X3DH key agreement (с SPK для forward secrecy) + Double Ratchet + AES-256-GCM
- Anonymous inbox transport: signed inbox responses, two-phase fetch with ACK recovery, relay bootstrap from signaling, typed runtime config for anonymous transport
- Persistent identity: BIP39 мнемоника (24 слова), детерминистичная деривация ключей через HKDF
- Encrypted storage: SQLite + AES-256-GCM + zstd (desktop), IndexedDB + Web Crypto API (PWA) — сообщения и ratchet-состояния шифруются at rest
- P2P: STUN/ICE, UDP hole punching, DTLS-like secure framing
- Relay fallback: TURN-подобный форвардинг с ограничением bandwidth
- Chunked transfer: файлы любого размера, sliding window + ACK, resume после обрыва
- Сжатие: zstd level 3, автоопределение (trial-compress, порог 10%)
- SHA-256 integrity: проверка целостности файлов на обоих сторонах (отправитель + получатель)
- Кастомный протокол: бинарный wire format с IDL-кодогенерацией (аналог MTProto)
- CSP: Content Security Policy на всех клиентах
- Метрики: Prometheus на всех сервисах, Grafana dashboards
crates/
cypher-common/ — типы (PeerId, LinkId, FileId), конфиг, трейсинг, метрики, rate limiting
cypher-proto/ — IDL-парсер (nom) + кодогенерация, бинарный wire format, Message enum
cypher-crypto/ — Ed25519/X25519, X3DH, Double Ratchet, AES-256-GCM, BIP39 identity
cypher-tls/ — TLS-конфигурация (rustls), self-signed для dev
cypher-transport/ — Frame codec (tokio_util), TransportSession, TransportListener
cypher-nat/ — STUN client, IceAgent, HolePuncher, DtlsSession, RelayClient
cypher-transfer/ — FileChunker, FileAssembler, zstd-сжатие
cypher-client-core/ — высокоуровневый API: подключение, сессия, P2P, передача файлов, identity store, encrypted persistence (SQLite)
services/
gateway/ — TLS connection manager, WebSocket, DashMap сессий, NATS routing
signaling/ — NATS subscriber, Redis (prekeys/links/ICE), STUN server
relay/ — TLS TURN-like forwarder, bandwidth limiting
clients/
desktop/ — Tauri 2.0 + SolidJS (TypeScript strict), identity management, encrypted history
pwa/ — SolidJS + Vite (TypeScript strict), PWA (installable, offline), identity management, encrypted IndexedDB
tools/
load-test/ — нагрузочное тестирование Gateway (clap CLI)
Текущая реализация anonymous inbox transport синхронизирована с production-подходом:
- клиент получает transport bootstrap от signaling
- Tor bridges задаются через runtime settings приложения
- signaling подписывает inbox responses, клиент проверяет подпись до
InboxAck - unacked inbox claims восстанавливаются recovery worker'ом
- relay и signaling используют persisted local key material вместо process-level fallback secrets
Production key files:
data/relay/onion_identity.bindata/signaling/inbox_signing.bindata/signaling/inbox_hmac.bin
Важно: эти файлы должны храниться на persistent volume и входить в стратегию backup/restore. Они являются частью криптографической идентичности сервисов.
# Клонировать и запустить
git clone <repo-url> && cd p2p
cp .env.example .env # настроить пароли
docker compose up -d
# Проверить что сервисы поднялись
curl http://localhost:9090/metrics # gateway
curl http://localhost:9091/metrics # signaling
curl http://localhost:9092/metrics # relayGateway слушает на :9100 (native TLS) и :9101 (WebSocket).
docker compose -f docker-compose.yml -f docker-compose.prod.yml up -dCaddy автоматически получает TLS-сертификаты через Let's Encrypt. Подробнее — в DEPLOY.md.
В production-окружении Prometheus, Grafana, Loki и Promtail поднимаются автоматически.
- Grafana:
https://<DOMAIN>/grafana/— дашборды провизионируются автоматически:- Cypher Overview — метрики Gateway, Signaling, Relay
- Cypher Logs — централизованные логи с фильтрацией по сервису и уровню
- Loki + Promtail: сбор логов контейнеров через Docker socket
- Prometheus: скрейпинг метрик каждые 15 сек, retention 30 дней
Для локальной разработки (опционально):
docker compose -f docker-compose.yml -f docker-compose.monitoring.yml up -dPrometheus на :9190, Grafana на :3000.
Сервисы в контейнерах автоматически пишут логи в JSON-формате (LOG_FORMAT=json), что позволяет Loki парсить structured fields (level, target, span и т.д.).
# Зависимости
rustup install stable
cargo install cargo-deny cargo-fuzz
# Запустить инфраструктуру (Redis + NATS)
docker compose up redis nats -d
# Собрать и запустить тесты
cargo build --workspace
cargo test --workspace
# Запустить сервисы локально
cargo run -p cypher-gateway
cargo run -p cypher-signaling
cargo run -p cypher-relay
# Клиент (PWA)
cd clients/pwa && npm install && npm run dev
# Клиент (Desktop)
cd clients/desktop && npm install && npm run tauri devПолный список команд — в COMMANDS.md.
| Платформа | Технология | Статус |
|---|---|---|
| Desktop (Win/Linux/macOS) | Tauri 2.0 + SolidJS (TypeScript strict) | Готов |
| Web (PWA) | SolidJS + Vite + Service Worker (TypeScript strict) | Готов |
| Android | Tauri 2.0 mobile (Kotlin/JNI) | Готов |
| iOS | PWA (Add to Home Screen) | Готов |
63 теста, 0 failures. cargo clippy --workspace — 0 warnings.
19 crypto — X3DH (с SPK), Double Ratchet, AES-GCM, BIP39, identity
11 client-core — identity store, SQLite persistence, encryption
10 proto — кодогенерация, сериализация, dispatch
7 transport — frame codec, sessions
4 nat — STUN, DTLS
3 ratelimit — token bucket
3 compress — zstd auto-detection
3 signaling — STUN IPv4/IPv6, roundtrip
2 transfer — chunker, assembler
1 tls — doctest
Fuzz targets (5): proto dispatch/decode, crypto aead/ratchet, nat stun — CI прогоняет 60 секунд на каждый.
- ARCHITECTURE.md — детальное описание архитектуры и реализации
- DEPLOY.md — руководство по развёртыванию
- COMMANDS.md — справочник команд
- ROADMAP.md — план развития
MIT — LICENSE