Модель безопасности
Обзор
Kontinuum защищает три категории данных:
| Категория | Что защищает | Механизм |
|---|---|---|
| Файлы | Содержимое синхронизируемых файлов | E2E шифрование (ChaCha20Poly1305) |
| Identity | Ключи пользователя, профиль | Ed25519, Vault + Stronghold |
| Транспорт | P2P трафик между устройствами | Noise protocol (libp2p) |
Цепочка доверия
Каждый уровень зависит от предыдущего:
- Identity — корень доверия. Ed25519 keypair генерируется при первом запуске
- Device — привязан к identity. Каждое устройство имеет свой Ed25519 keypair
- Vault — хранит зашифрованные ключи. PIN-код через Argon2 → master key → ChaCha20Poly1305
- Stronghold — долгосрочное хранение приватных ключей в защищённой памяти (guard pages, mlock)
- Signing — Ed25519 подпись выполняется внутри Stronghold, ключ не покидает защищённую память
Криптографические примитивы
| Примитив | Алгоритм | Библиотека | Применение |
|---|---|---|---|
| Подпись | Ed25519 | ed25519_dalek | Identity/device ключи, аутентификация |
| Key agreement | X25519 (ECDH) | x25519_dalek | Ephemeral ключи для приватного sharing |
| AEAD шифрование | ChaCha20Poly1305 | chacha20poly1305 | Vault secrets, P2P sharing payload |
| KDF (PIN) | Argon2id | argon2 | PIN → master key (64 MB, 3 iter, 4 threads) |
| KDF (sharing) | BLAKE3 derive_key | blake3 | ECDH shared secret → symmetric key |
| Hashing | BLAKE3 | blake3 | State hash, файловые контрольные суммы |
| Recovery phrase | BIP39 | bip39 | 12/24 слова → seed → master key |
| Transport | Noise XX | libp2p::noise | P2P аутентификация + шифрование |
| Key conversion | Ed25519 → X25519 | curve25519_dalek | CompressedEdwardsY → Montgomery |
| Memory protection | Stronghold Vault | iota_stronghold | Guard pages, mlock, non-contiguous memory |
| Zeroizing | Zeroize | zeroize | Зануление sensitive данных при drop |
Архитектура хранения ключей
Проект использует два менеджера для криптографических операций (см. ADR-4):
| VaultManager | StrongholdManager | |
|---|---|---|
| Хранение | SQLite (encrypted secrets) | IOTA Stronghold snapshot |
| Защита памяти | Zeroizing (зануление при drop) | Guard pages, mlock, mprotect, non-contiguous memory |
| Модель доступа | Секреты расшифровываются в RAM | Write-only vault, операции через Procedures |
| KDF | Argon2id (64 MB, 3 iter) | Scrypt (production) |
| UX-фичи | PIN, auto-lock, rate limiting, recovery phrase | Пароль |
Workflow подписи:
Шифрование P2P sharing
Для приватного расшаривания используется ephemeral ECDH + ChaCha20Poly1305 (подробнее: P2P Protocol):
- Sender конвертирует recipient Ed25519 pubkey → X25519
- Генерирует ephemeral X25519 keypair
- ECDH(ephemeral_sk, recipient_x25519_pk) → shared_secret
- BLAKE3.derive_key("kontinuum-sharing-v1", shared_secret) → symmetric_key
- ChaCha20Poly1305.encrypt(payload, symmetric_key, random_nonce)
- Отправляет: ephemeral_public_key + nonce + ciphertext
Recipient выполняет обратную операцию с использованием своего приватного ключа.
Noise protocol (transport encryption)
Все P2P соединения зашифрованы через Noise XX handshake поверх libp2p:
- Аутентификация: каждый пир аутентифицируется Ed25519 ключом устройства
- Forward secrecy: ephemeral DH ключи генерируются при каждом handshake
- Integrity: встроенная MAC-защита (Noise protocol гарантирует AEAD)
Стек: TCP → Noise → Yamux → Request-Response (JSON codec).
Правила для разработчиков
Обязательные
- Zeroize все sensitive данные (
Zeroizing<Vec<u8>>,pin_bytes.zeroize()) - Никогда не логируй PIN, ключи, recovery phrase, master key
- Только одобренные библиотеки — не изобретай криптографию
- Constant-time comparison для верификации PIN/hash (
subtle::ConstantTimeEq) - Rate limiting для всех auth-операций (PIN unlock, pairing)
Запрещённые
- MD5, SHA1, RC4, DES, 3DES, PBKDF2 с низкими iterations
- Hardcoded ключи или пароли
- Логирование
log::info!("PIN: {}", pin)илиdebug!("key: {:?}", key) unwrap()/expect()в production crypto-коде- Хранение паролей в plaintext
Ссылки
- ADR-4: Гибридное хранилище
- VaultManager — PIN, auto-lock, ChaCha20, recovery
- StrongholdManager — защищённая память, Ed25519
- P2P Protocol — Noise, ECDH, sharing encryption
- AGENTS.md: Security Guidelines — правила для AI агентов