Приватность

Хранилище под паролем для действительно чувствительных записей

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

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

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

Прежде чем начинать, прочитайте следующий абзац целиком.

#Предупреждение, которое нельзя пропустить

Забытый мастер-пароль означает потерю данных. Без вариантов, без обходного пути, без обращения в поддержку.

Так устроена схема: ключ шифрования не хранится нигде, он выводится из вашего пароля в момент открытия записи. Восстановление означало бы, что ключ где-то лежит, — а значит, его может достать и посторонний. Механика выведения ключа и то, от каких угроз она защищает, разобраны в статье про шифрование данных ассистента.

Практический вывод: запишите пароль в менеджер паролей до того, как зашифруете первую запись, а не после. «Запомню» здесь не работает — пароль, который вы вводите раз в месяц, забывается за квартал.

#Что понадобится

  • Установленная криптографическая библиотека. В Persona шифрование опирается на пакет cryptography, и он необязательный: если его нет в окружении, операции шифрования не выполняются и возвращают статус об отсутствии зависимости. Проверяется установкой pip install cryptography в том же окружении, где запущено приложение.
  • Менеджер паролей — чтобы было куда записать мастер-пароль.
  • Пароль, который вы не используете больше нигде. Не вариант пароля от почты и не пароль от входа в систему.
  • Понимание, что вы собираетесь туда класть. Чек-лист ниже.

Отдельная оговорка про роли: зашифрованное хранилище секретов доступно владельцу экземпляра. Участник, зарегистрированный на чужом экземпляре, отдельного хранилища не получает — его ключ провайдера и токен бота лежат в базе в открытом виде. Что с этим делать, разобрано в гайде про безопасное хранение API-ключа.

#Чек-лист: что класть в хранилище, а что нет

Ошибка в обе стороны стоит дорого. Слишком много — вы перестанете им пользоваться. Слишком мало — оно бессмысленно.

Класть Не класть
Резервные коды двухфакторной аутентификации Пароли от сайтов — им место в менеджере паролей
Реквизиты счетов и номера документов Рабочие файлы, которые нужны каждый день
Записи о здоровье и другие особо чувствительные Всю переписку целиком
Черновики, которые не должны попасть в поиск То, что вы не сможете восстановить, если забудете пароль
Данные третьих лиц, попавшие к вам временно Ключи от инфраструктуры — им место в специализированном хранилище

Логика правой колонки: хранилище — не резервная копия и не менеджер паролей. Оно решает одну задачу — сделать запись нечитаемой для того, кто открыл файл базы. Всё, для чего есть специализированный инструмент, должно жить в нём.

#Шаг 1. Проверьте, что шифрование доступно

До создания первой записи убедитесь, что криптографическая библиотека установлена в окружении приложения:

python -c "import cryptography; print(cryptography.__version__)"

Команда напечатала версию — можно продолжать. Выдала ошибку импорта — установите пакет и перезапустите приложение, иначе операция шифрования вернёт отказ, а вы решите, что «не работает».

#Шаг 2. Придумайте и сохраните мастер-пароль

Порядок именно такой: сначала записать, потом использовать.

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

Требование к длине важнее требования к экзотическим символам: перебор упирается в длину. Функция выведения ключа с шестьюстами тысячами итераций делает каждую попытку перебора дорогой, но короткий пароль это не спасёт.

#Шаг 3. Зашифруйте первую запись

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

Что важно понимать про этот шаг: шифруется тело записи, а не факт её существования. Заголовок, дата создания и признак «зашифровано» остаются видимыми. Если сам факт наличия записи чувствителен, называйте её нейтрально.

#Шаг 4. Перенесите остальное из чек-листа

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

#Проверка результата

Три проверки. Первая — что шифрование работает, вторая — что вы не потеряете данные, третья — что старые копии не остались.

  1. Откройте запись с правильным паролем. Содержимое читается — схема работает.
  2. Попробуйте открыть с неверным паролем. Должен быть отказ, а не пустое содержимое. Пустое содержимое вместо отказа означает, что что-то пошло не так на этапе шифрования.
  3. Найдите содержимое поиском по интерфейсу. Зашифрованная запись не должна находиться по тексту тела — если находится, значит в поисковом индексе осталось незашифрованное зеркало, и его нужно перестроить.
  4. Отдельно поищите старую версию записи. Самая частая ошибка — зашифровали копию, а оригинал остался лежать рядом.

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

#Что может пойти не так

Пароль записан «потом». Классический сценарий потери данных: человек зашифровал десять записей, отложил сохранение пароля и вернулся к ним через два месяца. Восстановления нет.

Библиотека шифрования не установлена. Операция возвращает отказ, запись остаётся незашифрованной. Проверяйте результат, а не намерение.

Резервная копия сделана до шифрования. В ней лежит открытый текст. Копия — это отдельный носитель со своим сроком жизни; порядок обращения с ней — в разборе резервных копий и приватности, техника снятия — в гайде по резервному копированию и восстановлению SQLite.

Пароль введён на скомпрометированной машине. В момент открытия записи содержимое расшифровано в памяти процесса. Хранилище защищает файл, а не сессию.

Хранилище используется как основное место работы. Через неделю ввод пароля начнёт раздражать, и вы либо перестанете шифровать новое, либо выберете короткий пароль. Держите контур маленьким.

#Частые вопросы

#Чем это отличается от менеджера паролей?

Объёмом записи и дисциплиной блокировки. Менеджер паролей рассчитан на короткие секреты, блокируется по таймауту и обычно проходил внешний аудит. Хранилище внутри ассистента рассчитано на заметки и записи, которые в менеджер не помещаются по смыслу. Пароли и ключи от инфраструктуры разумнее оставить в менеджере.

#Видит ли содержимое администратор экземпляра?

Зашифрованное тело — нет, у него нет вашего пароля. Всё остальное — да: администратор сервера имеет полный технический доступ к файлу базы, включая незашифрованные записи, чаты и извлечённые факты. Это устройство любого self-hosted продукта, и оно названо прямо в политике конфиденциальности.

#Можно ли поменять мастер-пароль?

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

#Попадают ли зашифрованные записи в контекст, который уходит модели?

Не должны: ассистент подмешивает в запрос то, что может прочитать, а зашифрованное тело он прочитать не может без пароля. Но если вы открыли запись и вставили содержимое в чат руками — оно уйдёт провайдеру наравне с остальным текстом. Шифрование не отменяет вашего собственного копирования.

#Стоит ли шифровать всю память вместо отдельных записей?

Обычно нет: поиск по памяти — основная функция ассистента, а зашифрованное не ищется. Разумная граница — общий архив на зашифрованном диске плюс небольшой контур под паролем для исключений. Общая рамка того, что и чем защищается, — в статье про приватный ИИ и локальное хранение.

#Вывод

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

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт