Отдельный зашифрованный контур внутри ассистента нужен не всегда. Если ваша база лежит на зашифрованном диске, машина заблокирована при отходе и посторонних за ней не бывает — большинству записей дополнительного пароля не требуется, и вводить его двадцать раз в день вы всё равно не станете.
Он нужен для узкого набора: десяток записей, которые нельзя потерять и нельзя показать никому, включая того, кто получит доступ к файлу базы. Резервные коды двухфакторной аутентификации, реквизиты, номера документов, черновик заявления, который не должен всплыть в поиске по памяти. Для этого набора цена ввода пароля оправдана.
Прежде чем начинать, прочитайте следующий абзац целиком.
#Предупреждение, которое нельзя пропустить
Забытый мастер-пароль означает потерю данных. Без вариантов, без обходного пути, без обращения в поддержку.
Так устроена схема: ключ шифрования не хранится нигде, он выводится из вашего пароля в момент открытия записи. Восстановление означало бы, что ключ где-то лежит, — а значит, его может достать и посторонний. Механика выведения ключа и то, от каких угроз она защищает, разобраны в статье про шифрование данных ассистента.
Практический вывод: запишите пароль в менеджер паролей до того, как зашифруете первую запись, а не после. «Запомню» здесь не работает — пароль, который вы вводите раз в месяц, забывается за квартал.
#Что понадобится
- Установленная криптографическая библиотека. В Persona шифрование опирается на пакет
cryptography, и он необязательный: если его нет в окружении, операции шифрования не выполняются и возвращают статус об отсутствии зависимости. Проверяется установкойpip install cryptographyв том же окружении, где запущено приложение. - Менеджер паролей — чтобы было куда записать мастер-пароль.
- Пароль, который вы не используете больше нигде. Не вариант пароля от почты и не пароль от входа в систему.
- Понимание, что вы собираетесь туда класть. Чек-лист ниже.
Отдельная оговорка про роли: зашифрованное хранилище секретов доступно владельцу экземпляра. Участник, зарегистрированный на чужом экземпляре, отдельного хранилища не получает — его ключ провайдера и токен бота лежат в базе в открытом виде. Что с этим делать, разобрано в гайде про безопасное хранение API-ключа.
#Чек-лист: что класть в хранилище, а что нет
Ошибка в обе стороны стоит дорого. Слишком много — вы перестанете им пользоваться. Слишком мало — оно бессмысленно.
| Класть | Не класть |
|---|---|
| Резервные коды двухфакторной аутентификации | Пароли от сайтов — им место в менеджере паролей |
| Реквизиты счетов и номера документов | Рабочие файлы, которые нужны каждый день |
| Записи о здоровье и другие особо чувствительные | Всю переписку целиком |
| Черновики, которые не должны попасть в поиск | То, что вы не сможете восстановить, если забудете пароль |
| Данные третьих лиц, попавшие к вам временно | Ключи от инфраструктуры — им место в специализированном хранилище |
Логика правой колонки: хранилище — не резервная копия и не менеджер паролей. Оно решает одну задачу — сделать запись нечитаемой для того, кто открыл файл базы. Всё, для чего есть специализированный инструмент, должно жить в нём.
#Шаг 1. Проверьте, что шифрование доступно
До создания первой записи убедитесь, что криптографическая библиотека установлена в окружении приложения:
python -c "import cryptography; print(cryptography.__version__)"
Команда напечатала версию — можно продолжать. Выдала ошибку импорта — установите пакет и перезапустите приложение, иначе операция шифрования вернёт отказ, а вы решите, что «не работает».
#Шаг 2. Придумайте и сохраните мастер-пароль
Порядок именно такой: сначала записать, потом использовать.
- Сгенерируйте длинную парольную фразу в менеджере паролей.
- Сохраните её там же, с пометкой, к чему она относится и что восстановления нет.
- Если у вас есть бумажный конверт для резервных кодов — положите копию туда же.
Требование к длине важнее требования к экзотическим символам: перебор упирается в длину. Функция выведения ключа с шестьюстами тысячами итераций делает каждую попытку перебора дорогой, но короткий пароль это не спасёт.
#Шаг 3. Зашифруйте первую запись
Создайте заметку с заведомо проверяемым содержимым — например, строкой «проверка хранилища» и текущей датой — и включите для неё шифрование, указав мастер-пароль. После этого тело записи хранится в базе не текстом, а зашифрованным конвертом: версия схемы, случайная соль и сам шифротекст.
Что важно понимать про этот шаг: шифруется тело записи, а не факт её существования. Заголовок, дата создания и признак «зашифровано» остаются видимыми. Если сам факт наличия записи чувствителен, называйте её нейтрально.
#Шаг 4. Перенесите остальное из чек-листа
Пройдите по левой колонке таблицы и перенесите то, что у вас уже лежит в обычных заметках. После переноса удалите исходные незашифрованные версии — включая те, что могли попасть в память ассистента как извлечённые факты. Что вообще имеет смысл пускать в память, разобрано в статье про память и приватность.
#Проверка результата
Три проверки. Первая — что шифрование работает, вторая — что вы не потеряете данные, третья — что старые копии не остались.
- Откройте запись с правильным паролем. Содержимое читается — схема работает.
- Попробуйте открыть с неверным паролем. Должен быть отказ, а не пустое содержимое. Пустое содержимое вместо отказа означает, что что-то пошло не так на этапе шифрования.
- Найдите содержимое поиском по интерфейсу. Зашифрованная запись не должна находиться по тексту тела — если находится, значит в поисковом индексе осталось незашифрованное зеркало, и его нужно перестроить.
- Отдельно поищите старую версию записи. Самая частая ошибка — зашифровали копию, а оригинал остался лежать рядом.
Успешный результат: содержимое открывается только с паролем, поиском по телу не находится, незашифрованных дубликатов нет.
#Что может пойти не так
Пароль записан «потом». Классический сценарий потери данных: человек зашифровал десять записей, отложил сохранение пароля и вернулся к ним через два месяца. Восстановления нет.
Библиотека шифрования не установлена. Операция возвращает отказ, запись остаётся незашифрованной. Проверяйте результат, а не намерение.
Резервная копия сделана до шифрования. В ней лежит открытый текст. Копия — это отдельный носитель со своим сроком жизни; порядок обращения с ней — в разборе резервных копий и приватности, техника снятия — в гайде по резервному копированию и восстановлению SQLite.
Пароль введён на скомпрометированной машине. В момент открытия записи содержимое расшифровано в памяти процесса. Хранилище защищает файл, а не сессию.
Хранилище используется как основное место работы. Через неделю ввод пароля начнёт раздражать, и вы либо перестанете шифровать новое, либо выберете короткий пароль. Держите контур маленьким.
#Частые вопросы
#Чем это отличается от менеджера паролей?
Объёмом записи и дисциплиной блокировки. Менеджер паролей рассчитан на короткие секреты, блокируется по таймауту и обычно проходил внешний аудит. Хранилище внутри ассистента рассчитано на заметки и записи, которые в менеджер не помещаются по смыслу. Пароли и ключи от инфраструктуры разумнее оставить в менеджере.
#Видит ли содержимое администратор экземпляра?
Зашифрованное тело — нет, у него нет вашего пароля. Всё остальное — да: администратор сервера имеет полный технический доступ к файлу базы, включая незашифрованные записи, чаты и извлечённые факты. Это устройство любого self-hosted продукта, и оно названо прямо в политике конфиденциальности.
#Можно ли поменять мастер-пароль?
Смена пароля означает перешифровку каждой записи: старый конверт открывается старым паролем, содержимое шифруется новым. То есть менять пароль можно, только пока старый вам известен. Забытый пароль сменить нельзя — это тот же тупик, что и потеря.
#Попадают ли зашифрованные записи в контекст, который уходит модели?
Не должны: ассистент подмешивает в запрос то, что может прочитать, а зашифрованное тело он прочитать не может без пароля. Но если вы открыли запись и вставили содержимое в чат руками — оно уйдёт провайдеру наравне с остальным текстом. Шифрование не отменяет вашего собственного копирования.
#Стоит ли шифровать всю память вместо отдельных записей?
Обычно нет: поиск по памяти — основная функция ассистента, а зашифрованное не ищется. Разумная граница — общий архив на зашифрованном диске плюс небольшой контур под паролем для исключений. Общая рамка того, что и чем защищается, — в статье про приватный ИИ и локальное хранение.
#Вывод
Заводите отдельный контур, если у вас есть хотя бы пять записей, которые нельзя показать никому и нельзя потерять; для остального хватит шифрования диска и блокировки экрана. Порядок действий не меняйте: сначала пароль в менеджер, потом первая зашифрованная запись, потом удаление незашифрованного оригинала. И держите контур маленьким — хранилище, которым неудобно пользоваться, через месяц перестаёт пополняться, и вы оказываетесь ровно там, откуда начали.