Приватность и ваши данные
Что защищает пароль профиля, а что нет
Stonqs держит портфель в одном файле на вашем диске. Если задать профилю пароль, этот файл шифруется SQLCipher под случайным 256-битным ключом, который пароль только отпирает. Это закрывает украденный ноутбук и скопированный бэкап. И не закрывает ещё четыре вещи.
Ваш пароль не шифрует базу. Звучит как недостаток, а на деле наоборот.
Когда вы задаёте профилю пароль, приложение создаёт случайный 256-битный ключ и отдаёт его SQLCipher. Пароль растягивается Argon2id во второй ключ, и этот второй запечатывает первый в маленьком файле рядом с базой. Смена пароля перепечатывает 32 байта. Она не переписывает портфель, который может весить сотню мегабайт операций, и не оставляет наполовину переделанный файл, если посреди операции выключат свет.
Параметры, потому что их обычно не пишут
Argon2id, 64 МиБ памяти, 3 прохода, 1 полоса, на выходе 32 байта. Это заметно выше минимума, который рекомендует OWASP, и стоимость хранится в самом профиле, а не зашита в программу, так что её можно поднять позже, не ломая существующие файлы. Запечатанные блоки — XChaCha20-Poly1305, каждый привязан к своему назначению и своему профилю: ключ, скопированный из одной папки профиля в другую, отвергается, а не принимается молча.
Ключ базы случайный и уже 256-битный, поэтому SQLCipher получает его сырым и собственного вывода ключа не делает. Угадывать там нечего. Атаковать имеет смысл только пароль, и именно там стоят 64 МиБ и три прохода.
Самый короткий принимаемый пароль — восемь символов, без требований к составу. Ровно этого просит NIST SP 800-63B и ничего сверх, потому что требования к заглавной букве и цифре в основном рождают пароли, которые никто не помнит и записывает на бумажке.
От чего защищает
- Потерянный или украденный компьютер в выключенном состоянии.
- Копирование папки профиля из бэкапа, синхронизируемой папки или с внешнего диска.
- Взгляд на общем компьютере от того, кто не может зайти под вашей учётной записью.
Пока профиль заперт, его база вообще не открыта. Если разрешить машине запомнить профиль, в связке ключей операционной системы лежит ключ данных, а не пароль.
От чего не защищает
Страница про безопасность, которая обещает всё, не стоит чтения, поэтому вот границы — в том порядке, в каком они беспокоят нас.
- Вредоносная программа, запущенная от вашего имени при отпертом профиле. База открыта, ключ в памяти. Шифрование на диске не спасает от кода, который работает внутри сессии и законно держит ключ.
- Любой за клавиатурой отпертой сессии. Автоматической блокировки по бездействию пока нет. Это пробел, и назвать его честнее, чем сделать вид, что он закрыт.
- Профиль без пароля. Его база — обычный файл, который откроет что угодно. В списке профилей видно, какие защищены.
- Слабый пароль. Argon2id делает перебор дорогим, а не невозможным. Запоминающаяся фраза из нескольких слов лучше короткого пароля со спецсимволом.
Что остаётся незашифрованным намеренно
Язык интерфейса, тема, раскладка дашборда и ваши раскладки импорта лежат рядом с базой в открытом виде: экран блокировки должен нарисоваться до того, как вы что-то ввели. Операции, позиции, остатки, названия счетов, заметки, цели и планы лежат внутри зашифрованного файла.
Если этот размен важен, стоит знать: раскладка импорта помнит, какая колонка файла брокера что означала, и ничего о ваших позициях.
Если пароль забыт
Данные потеряны. Сброса, файла восстановления и чёрного хода нет, и приложение говорит об этом на том же экране, где пароль задают.
Две привычки делают это переносимым: держать пароль там же, где другие важные, и время от времени копировать папку профиля в надёжное место. Зашифрованный файл копируется как любой другой, и копия зашифрована так же, как оригинал.
Что всё-таки уходит с компьютера
Шифрование на диске ничего не говорит про сеть, поэтому остальная часть картины. Запросы уходят за котировками, курсами валют, данными по инфляции и поиском бумаг — к тем источникам, которые вы включили, а у нового профиля выключены все, пока вы не выберете. Кроме этого есть ежедневная проверка обновления на странице релизов, которую можно отключить, и ИИ-ассистент, если вы его подключите. Запросы котировок и курсов несут тикер или валютную пару и ничего о вас.
Ваши позиции не уходят никому. Исключение — ассистент, и только те части, которые вы разрешили, но это отдельная тема.
Источники
- Stonqs: хранилище ключей профиля · Вывод ключа и запечатанные ключи так, как это сделано в приложении.
- SQLCipher design · Как устроена зашифрованная база SQLite.
- RFC 9106: Argon2
- NIST SP 800-63B, Digital Identity Guidelines · Почему единственное правило к паролю — минимальная длина.
- OWASP Password Storage Cheat Sheet