Безопасность
OpenKey спроектирован так, чтобы сервер не мог прочитать ваш сейф.
Вывод ключей
Argon2id(email + master_password, salt)создаёт мастер-ключ.- Мастер-ключ выводит auth hash (отправляется на сервер) и оборачивает ключ сейфа.
- Ключ сейфа шифрует имена коллекций и payload'ы записей (AES-256-GCM).
- Ключ шифрования локальной БД выводится из ключа сейфа.
- Мастер-пароль никогда не покидает устройство.
Что хранит сервер
| Хранит | Не хранит |
|---|---|
auth_hash | Мастер-пароль |
| Соль и параметры KDF | Открытый ключ сейфа |
| Обёрнутый (зашифрованный) ключ сейфа | Расшифрованные имена коллекций |
| Непрозрачный шифротекст данных, вложений, орг. и шаринга | Открытые payload'ы записей |
Токены
- Access JWT короткоживущие.
- Refresh-токены хешируются при хранении и ротируются при использовании.
- Эндпоинты аутентификации ограничены по частоте на IP.
Практические правила
- Выберите сильный мастер-пароль — это корень доверия.
- Держите
JWT_SECRET(сервер) длинным и уникальным; плейсхолдеры отклоняются при старте. - В продакшене предпочитайте HTTPS и ограничьте
CORS_ORIGINS(без*). - Храните офлайн-резерв экспорта сейфа / материалов восстановления.
Подробности API — в README openkey_server и на /docs работающего сервера.
Модель угроз
Полная модель на английском / арабском: English · العربية
Кратко
- Сервер синхронизации не доверен для конфиденциальности (только шифротекст).
- Восстановления мастер-пароля нет.
- Sync — LWW по revision (не CRDT).
- LAN Pro только на платформах без магазинного IAP.
- HTTPS, сильный
JWT_SECRET, явныйCORS_ORIGINS(никогда*).
Сообщайте об уязвимостях приватно — [email protected].