Шифрование облака карт: как работает и что будет с базой
Что именно шифруется
Только облачная копия базы в PocketBase. Браузер шифрует базу целиком
перед отправкой: AES-GCM-256, ключ из пароля через PBKDF2-SHA256 (210 000
итераций), случайная соль и новый IV на каждое сохранение. В облаке лежит
конверт {v, alg, kdf, iter, salt, iv, ct}, а не JSON с картами.
Пароль на сервер не передаётся. Сервер хранит флаг, соль и SHA-1-хэш для проверки старого пароля при смене. Поэтому поддержка не может расшифровать облако и не может восстановить забытый пароль.
Важно: локальный кэш браузера, оперативная память и скачанные JSON-файлы не шифруются. Шифрование защищает облачную копию, а не компьютер пользователя.
Как открывается база
- В радиксе, транзитах, синастрии и календаре используется локальная база
localStorage.db— она всегда открытая. - В кабинете облако после загрузки страницы закрыто. Нужно ввести пароль; после этого база расшифровывается в памяти, а каждое сохранение снова шифруется. После перезагрузки или новой вкладки пароль нужно ввести заново.
- Кнопка «Загрузить базу из облака» записывает расшифрованную базу в
localStorage.db. С этого момента она открыта на всех страницах сайта. - Если на новом устройстве открыть радикс, облачных карт там не будет: сначала нужно зайти в кабинет, открыть облако паролем и загрузить его в кэш.
Можно ли скачать JSON без шифрования
Да. После разблокировки облака пункт «Сохранить БД в файл» выгружает
обычный astrocalcdb.json — без шифрования. Локальная панель выгружает
JSON так же всегда. Отдельного зашифрованного JSON сейчас нет.
Если облако закрыто, загрузка из облака не выполняется и просит пароль. Сырой payload из API — это конверт, но в интерфейсе он не предлагается как файл базы.
Включение шифрования, когда облако уже есть
Нужен Pro. Порядок:
- Если в облаке есть открытая запись
db, шифруется именно она. - Если облако пустое, берётся локальный кэш браузера.
- Если пусто и там, создаётся пустая база.
Слияния нет: при различии облака и кэша побеждает облако. Если в браузере есть более новые карты, сначала выгрузите их в облако, затем включайте шифрование.
После успеха сервер сохраняет конверт и ставит флаг. Текущая вкладка остаётся открытой, другие устройства попросят пароль. Локальный кэш не меняется и остаётся открытым.
Кнопка включения доступна только после загрузки облака — это защита от случайной замены существующего облака локальным кэшем.
Снятие защиты и сброс
«Снять защиту (расшифровать)» — нормальный путь. Сначала откройте облако паролем, затем нажмите кнопку. Сервер заменит конверт открытой базой и очистит флаг, хэш и соль. Данные сохраняются, облако снова читается без пароля на всех устройствах.
«Забыл пароль — сбросить шифрование» — аварийный путь. Он очищает только флаг, хэш и соль. Шифроблоб в облаке остаётся, сервер его не расшифровывает и не удаляет. После сброса нужна живая копия базы в этом браузере: нажмите «Выгрузить базу в облако», чтобы заменить шифроблоб открытой базой. Если копии нет, карты восстановить нельзя.
Не путайте эти две кнопки. Сброс не расшифровывает облако и не возвращает карты без локальной копии.
Что будет при смене пароля
Старый пароль проверяется по сохранённому хэшу, затем база заново шифруется с новой солью и новым паролем. Данные сохраняются, старый пароль перестаёт работать. Другим устройствам нужно ввести новый пароль.
Если пароль потерян
- Если в браузере осталась открытая копия базы — выгрузите её в облако после сброса шифрования.
- Если открытой копии нет — восстановить облако нельзя. Поддержка не хранит пароль и не может обойти шифрование.
- Перед включением шифрования сохраните базу в файл или проверьте, что в браузере есть актуальная копия.
Что не защищено
- локальный кэш
localStorage.db; - скачанные JSON-файлы;
- открытая база в памяти, пока облако разблокировано;
- доступ к уже разблокированной вкладке.
Для слабого пароля сохраняется риск перебора: сервер хранит быстрый SHA-1-верификатор для смены пароля. Используйте длинный уникальный пароль.