Что именно шифруется

Только облачная копия базы в 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. Порядок:

  1. Если в облаке есть открытая запись db, шифруется именно она.
  2. Если облако пустое, берётся локальный кэш браузера.
  3. Если пусто и там, создаётся пустая база.

Слияния нет: при различии облака и кэша побеждает облако. Если в браузере есть более новые карты, сначала выгрузите их в облако, затем включайте шифрование.

После успеха сервер сохраняет конверт и ставит флаг. Текущая вкладка остаётся открытой, другие устройства попросят пароль. Локальный кэш не меняется и остаётся открытым.

Кнопка включения доступна только после загрузки облака — это защита от случайной замены существующего облака локальным кэшем.

Снятие защиты и сброс

«Снять защиту (расшифровать)» — нормальный путь. Сначала откройте облако паролем, затем нажмите кнопку. Сервер заменит конверт открытой базой и очистит флаг, хэш и соль. Данные сохраняются, облако снова читается без пароля на всех устройствах.

«Забыл пароль — сбросить шифрование» — аварийный путь. Он очищает только флаг, хэш и соль. Шифроблоб в облаке остаётся, сервер его не расшифровывает и не удаляет. После сброса нужна живая копия базы в этом браузере: нажмите «Выгрузить базу в облако», чтобы заменить шифроблоб открытой базой. Если копии нет, карты восстановить нельзя.

Не путайте эти две кнопки. Сброс не расшифровывает облако и не возвращает карты без локальной копии.

Что будет при смене пароля

Старый пароль проверяется по сохранённому хэшу, затем база заново шифруется с новой солью и новым паролем. Данные сохраняются, старый пароль перестаёт работать. Другим устройствам нужно ввести новый пароль.

Если пароль потерян

  • Если в браузере осталась открытая копия базы — выгрузите её в облако после сброса шифрования.
  • Если открытой копии нет — восстановить облако нельзя. Поддержка не хранит пароль и не может обойти шифрование.
  • Перед включением шифрования сохраните базу в файл или проверьте, что в браузере есть актуальная копия.

Что не защищено

  • локальный кэш localStorage.db;
  • скачанные JSON-файлы;
  • открытая база в памяти, пока облако разблокировано;
  • доступ к уже разблокированной вкладке.

Для слабого пароля сохраняется риск перебора: сервер хранит быстрый SHA-1-верификатор для смены пароля. Используйте длинный уникальный пароль.