Перейти к основному контенту
NGPP
Кабинет
🔐 Zero-Knowledge Architecture

Архитектура
конфиденциальности

Мы построили систему, в которой даже сами не можем получить доступ к вашим личным данным и паролям. Это не декларация намерений — это математическая гарантия.

Четыре гарантии

🗝️

Ключ только у вас

Ваша фраза восстановления (12 слов BIP39) генерируется в браузере. Она никогда не покидает ваш браузер и не отправляется на сервер. Без неё никто не откроет ваши зашифрованные данные.

🔒

Приватный ключ зашифрован

P-256 приватный ключ хранится на сервере, но зашифрован AES-256-GCM ключом, производным от вашей фразы. Взломать без фразы — вычислительно невозможно (2¹²⁸ вариантов).

🚫

Admin не может сбросить пароль

Для аккаунтов с ключом восстановления сброс пароля через admin panel заблокирован. Смена пароля требует cryptographic challenge-response подписи вашим приватным ключом.

📂

Vault и Credentials зашифрованы

Пароли в хранилище и учётные данные проектов зашифрованы в браузере до отправки. Сервер хранит только зашифрованный blob — расшифровать без мастер-пароля невозможно.

Что хранит сервер

Честная таблица: что мы храним и может ли admin увидеть это в открытом виде.

ДанныеЧто хранится на сервереAdmin видит?
EmailEmail в открытом виде (нужен для входа и уведомлений)да
Имя / АватарПубличные метаданные профиляда
Пароль аккаунтаbcrypt-хеш (необратимый, алгоритм стоимостью 12)да
Фраза восстановленияНЕ хранится — только в вашем браузере / на бумаге❌ Нет (E2E)
Приватный ключ P-256JWK зашифрован AES-256-GCM ключом из вашей фразы❌ Нет (E2E)
Публичный ключ P-256SPKI base64url (только для верификации подписей)да
Vault (пароли)AES-256-GCM зашифрованный blob (ключ из мастер-пароля)❌ Нет (E2E)
Учётные данные проектовAES-256-GCM зашифрованный blob (ключ из мастер-пароля)❌ Нет (E2E)
Секреты 2FA (генератор кодов)Шифротекст AES-256-GCM, ключ из окружения приложения (не из вашего пароля)нет, пока не утёк ключ приложения
Контент проектов / задачОткрытый текст (access-controlled)да
Файлы проектовОбъектное хранилище на том же сервере, открытый видда
Аккаунты мессенджеровТолько метаданные: платформа, название, логин. Пароли и сессии — на вашем устройстведа
Статистика посещенийМаршрут, реферер, user-agent, хеш IP (сырой IP не хранится)да

* «Admin видит: Да» означает, что технически доступно при компрометации сервера. Мы это честно указываем — частичная прозрачность лучше ложных обещаний. Контент проектов (задачи, доки) — следующая стадия E2E (roadmap).

Как работает восстановление

1

Регистрация / Setup

В браузере генерируется случайная P-256 ключевая пара. Из вашей фразы (PBKDF2 × 200 000 итераций, SHA-256) выводится AES-ключ. Приватный ключ шифруется этим AES-ключом. На сервер отправляется: публичный ключ (открыто) + зашифрованный приватный ключ. Фраза остаётся только у вас.

2

Восстановление пароля

Вы вводите email → сервер возвращает зашифрованный приватный ключ + одноразовый nonce (10 минут). В браузере: фраза → AES-ключ → расшифровать приватный ключ → подписать nonce алгоритмом ECDSA P-256. Подпись отправляется на сервер. Сервер проверяет подпись публичным ключом. При успехе — разрешается смена пароля.

3

Admin Panel

Для ZK-защищённых аккаунтов кнопка «Сбросить пароль» в admin panel заменена на «🔐 Сброс заблокирован». Admin технически может поменять поле password_hash в БД напрямую — но зашифрованные данные останутся нечитаемыми без фразы восстановления.

Технический стек

Генерация ключей

Web Crypto API (нативный браузер, не библиотека)

Алгоритм подписи

ECDSA P-256 / SHA-256

Шифрование ключа

AES-256-GCM (12-байт IV, 128-бит тег)

Деривация фразы → ключ

PBKDF2-SHA256, 200 000 итераций

Vault / Creds шифрование

AES-256-GCM (PBKDF2 от мастер-пароля)

Хеш пароля аккаунта

bcrypt, стоимость 12

Фраза восстановления

BIP39, 12 слов = 128 бит энтропии

Challenge TTL

10 минут, одноразовый, помечается usedAt

Что мы не делаем и почему

✗

Не логируем расшифрованные данные

Логи сервера содержат только метаданные (ID, время). Зашифрованные blob-ы не декодируются на сервере — это технически невозможно без вашего ключа.

✗

Не предлагаем email-восстановление для ZK-аккаунтов

Email-коды можно перехватить (admin контролирует почтовый сервис). Фраза восстановления не проходит через наши серверы вообще.

✗

Не храним мастер-пароль vault

Мастер-пароль вводится в браузере → PBKDF2 → AES-ключ. Сервер видит только зашифрованный blob. Забытый мастер-пароль = потеря vault (это намеренно).

✗

Не делаем «сброс по запросу» для admin

Для ZK-аккаунтов это архитектурно заблокировано. Admin может изменить пароль в БД напрямую, но после входа пользователь увидит только зашифрованные данные.

Честные ограничения

Мы строим прозрачную систему, но не хотим вводить вас в заблуждение. Вот что не защищает ZK-модель на текущем этапе:

  • ⚠Контент проектов и задач хранится в открытом виде в БД. При компрометации сервера он читаем. E2E-шифрование контента — в roadmap.
  • ⚠Email и имя видны admin-у — они нужны для работы сервиса (уведомления, идентификация).
  • ⚠Потеря фразы = необратимая потеря зашифрованных данных. Бэкапа на нашей стороне нет. Храните фразу надёжно.
  • ⚠Компрометация браузера (вредоносные расширения, XSS) может позволить прочитать ключи в памяти. Используйте надёжный браузер.

Хотите защититься прямо сейчас?

Настройте ключ восстановления в личном кабинете. Это займёт 2 минуты.