Как LifeVeil защищает ваши файлы
Здесь простыми словами объясняется, что делает LifeVeil, а также чего приложение сделать не может. Мы хотим, чтобы вы знали об ограничениях, а не верили слишком громким обещаниям.
Коротко
- Все шифрование происходит на вашем телефоне. У LifeVeil нет сервера и нет аккаунтов.
- Файлы каждого хранилища зашифрованы случайным ключом. Открыть этот ключ можно только графическим ключом этого хранилища (вместе с его PIN-кодом на максимальном уровне), его фразой восстановления, если вы ее добавили, или вашим отпечатком пальца, если вы его включили.
- Каждый графический ключ открывает хранилище. Ключ, который не подходит ни к одному сохраненному хранилищу, открывает пустое, и ничего не записывается, пока вы не добавите в него файл.
- У нас, разработчиков, никогда нет вашего графического ключа, PIN-кода, фразы или ключей шифрования. Мы не можем открыть ваши файлы и не можем сбросить ваш графический ключ.
- Мы используем шифрование, встроенное в Android, и известную библиотеку libsodium. Собственное шифрование мы не писали.
- LifeVeil еще не проходило независимую проверку безопасности.
Как графический ключ превращается в ключ шифрования
Вы рисуете графический ключ на сетке 5×5, не проходя через одну точку дважды. Новый графический ключ, который вы задаете, должен содержать минимум 6 точек. LifeVeil превращает графический ключ в ключ шифрования с помощью Argon2id из libsodium (версия 1.0.20 на Android).
- Параметры: 64 МиБ памяти, 3 прохода, 1 поток, ключ длиной 256 бит.
- Argon2id намеренно работает медленно и требует много памяти для каждой попытки. Из-за этого подбор на видеокартах обходится намного дороже.
- На наших тестовых телефонах одна разблокировка занимает примерно 0,6–0,9 секунды.
- Графический ключ смешивается со случайной 16-байтовой солью устройства. Соль хранится в приложении в зашифрованном виде, под ключом из Android Keystore, который нельзя скопировать с телефона.
- Копия графического ключа нигде не хранится, кроме той, что хранится вместе с фразой восстановления (см. ниже). Приложение проверяет графический ключ, пытаясь открыть им ключ шифрования.
- Все, что вы вводите в поле PIN-кода над точками, участвует в том же получении ключа, что и графический ключ. Пустое поле означает только графический ключ.
Уровни защиты
У каждого хранилища один уровень. Вы выбираете его в начале и можете изменить позже в разделе Настройки > Хранилище > Уровень защиты, снова нарисовав графический ключ.
- Максимальная защита (Ultra): графический ключ и PIN-код из 6–8 цифр, оба только в вашей голове. Надежно даже против подбора с помощью ИИ. Если вы забудете что-то одно, хранилище восстановить нельзя.
- Уровень 1 (рекомендуется): только графический ключ. Надежно, если вы избегаете распространенных фигур. Если вы его забудете, хранилище восстановить нельзя.
- Уровень 2: графический ключ и фраза восстановления, записанная на бумаге. Вы сможете войти, если забудете ключ, но тот, кто найдет бумагу, тоже сможет открыть хранилище.
- Уровень 3: графический ключ и отпечаток пальца. Самый удобный, но кто-то может силой приложить ваш палец к сканеру. Отпечаток работает только для одного хранилища.
Как шифруются файлы
- У каждого хранилища есть случайный 256-битный главный ключ. Ключ из графического ключа и ключ восстановления только «оборачивают» (шифруют) этот главный ключ.
- Файлы, миниатюры и список ваших объектов (исходные имена файлов, даты, размеры) шифруются с помощью AES-256-GCM, встроенного в Android. GCM также обнаруживает, если файл был изменен или подменен.
- Файлы внутри приложения имеют случайные имена. Большие файлы шифруются частями по 1 МиБ, поэтому видео воспроизводятся без записи незашифрованной копии в память устройства.
- Для фото в формате JPEG скрытые сведения (EXIF, например камера и дата) хранятся отдельно, тоже в зашифрованном виде.
- Когда приложение блокируется, оно перезаписывает нулями ключи, которые держит в оперативной памяти.
Фраза восстановления
- Фраза восстановления необязательна. Хранилище получает ее, только если вы выбираете Уровень 2, и она сохраняется после короткой проверки.
- Надежный генератор случайных чисел телефона выбирает 9 английских слов. Они берутся из двух списков по 1024 распространенных слова в одном из 4 фиксированных порядков. Это 92 бита случайности. Слова английские на любом языке приложения.
- Фраза проходит через Argon2id с теми же параметрами и сама по себе открывает главный ключ. Ей не нужна соль устройства, поэтому она работает, даже если графический ключ уже не работает.
- Копия фразы и копия графического ключа хранилища (и PIN-кода) хранятся на телефоне, каждая зашифрована дважды: главным ключом и ключом из Android Keystore. Когда фраза открывает хранилище, приложение один раз показывает графический ключ. Он забывается, когда приложение блокируется.
- Фраза не меняется, когда вы меняете графический ключ. У хранилища без фразы нет пути назад, если графический ключ забыт.
Отпечаток пальца
Разблокировка по отпечатку пальца необязательна и работает для одного хранилища. Отпечаток проверяет Android, а не LifeVeil; приложение никогда не получает ваш отпечаток. Главный ключ открывается ключом в Android Keystore, который работает только сразу после надежной биометрической проверки. Если кто-то добавит на телефон новый отпечаток, этот ключ перестанет работать и вам нужно будет снова использовать графический ключ.
Файл резервной копии
- Резервная копия — это один файл
.lvb. В нем ваши объекты в том виде, в котором они уже зашифрованы, плюс обернутые копии главного ключа: одна для графического ключа, который вы нарисовали при создании копии, и одна для фразы восстановления, если она была у хранилища. - Копия для графического ключа использует новую случайную соль для каждой резервной копии, а не соль устройства. Именно поэтому резервную копию можно открыть на новом телефоне.
- Заголовок файла защищен, поэтому изменения или подмена частей обнаруживаются.
- Вы сами выбираете, где сохранить файл, на стандартном экране сохранения Android. Через нас он никогда не проходит.
- Чтобы восстановить данные, откройте файл его графическим ключом или его фразой. Затем вы нарисуете новый графический ключ. Восстановленное хранилище начинает работу без фразы восстановления.
Другие меры защиты в приложении
- Скриншоты, запись экрана и предпросмотр в списке недавних приложений заблокированы на всех экранах.
- По умолчанию приложение блокируется сразу, как только вы из него выходите. Вместо этого можно выбрать 30 секунд или 1 минуту.
- Встроенное облачное резервное копирование Android и перенос данных между телефонами не включают данные LifeVeil. Используйте вместо этого файл резервной копии.
- Приложение не запрашивает доступ к местоположению, контактам или «всем файлам».
- Пустое хранилище для каждого нового ключа. Хранилище без файлов выглядит одинаково, сохранено оно или нет, поэтому тот, кто заставляет вас открыть приложение, не узнает, что ещё в нём есть. Это можно отключить в разделе Настройки > Безопасность, и тогда ключ, который ничего не открывает, покажет ошибку.
Замедление подбора
Поскольку каждый графический ключ открывает хранилище, подбор выглядит как открытие множества пустых хранилищ. LifeVeil замедляет это, ничего не сообщая на экране, и ожидание одинаково для любого ключа, включая правильный.
- За 24 часа 10 открытий хранилищ без файлов добавляют 10 секунд к каждой разблокировке, 20 — 60 секунд, а 30 — 5 минут, это максимум.
- Признаки автоматизации сразу дают максимум: три раза подряд ключи, завершенные с интервалом меньше 2 секунд, или касания от служб специальных возможностей либо искусственного ввода вместо пальца.
- Каждые 24 часа без открытия пустого хранилища ослабляют замедление на одну ступень. Перевод часов телефона назад его не сокращает.
- Это работает только внутри приложения. Подбор на компьютере по скопированному файлу это не замедляет (см. ограничения ниже).
ИИ и подбор графического ключа
- ИИ не может обойти математику. Каждая попытка все равно требует выполнить Argon2id с 64 МиБ памяти. ИИ не взламывает Argon2id или AES, поэтому ни одна попытка не становится дешевле.
- ИИ меняет порядок попыток. Он может выучить фигуры, которые нравятся людям (буквы, квадраты, любимые начальные углы), и пробовать их первыми. Он также может помочь распознать графический ключ по видео, снятому у вас из-за плеча, или по следам пальцев на экране.
- Поэтому защита строится вокруг графического ключа, а не математики. Приложение предупреждает о распространенных фигурах. Максимальный уровень защиты добавляет PIN-код из 6–8 цифр, так что графического ключа, подсмотренного на видео, недостаточно. Скрывать линию ключа не оставляет линии, которую можно снять. Соль устройства в Android Keystore не дает подбирать ключ вне телефона.
Ограничения, о которых стоит знать
Ни одно приложение не защищает от всего. Вот честные ограничения LifeVeil.
Простые графические ключи можно угадать
Короткие или распространенные фигуры (буква L, буква Z, прямая линия) можно угадать, подсмотрев за вами, по следам пальцев на экране или за несколько попыток. Реальные графические ключи угадать гораздо проще, чем можно подумать по числу возможных вариантов. Используйте больше точек и больше поворотов. Приложение предупреждает о слишком простых графических ключах, а также перед сохранением хранилища, ключ которого содержит меньше 6 точек.
Сколько времени может занять подбор
В самом приложении каждая попытка занимает около секунды, а повторный подбор замедляет каждую разблокировку, вплоть до 5 минут. Но тот, у кого есть ваш файл резервной копии или кто извлек соль устройства с телефона с root-доступом, может подбирать ключ на компьютере, без всякого ожидания. Argon2id замедляет это, но у графического ключа гораздо меньше вариантов, чем у длинного пароля. Примерные оценки для одной мощной видеокарты (класса RTX 4090) при скорости около 1000 попыток в секунду:
| Что подбирается | Вариантов | Время на одной видеокарте |
|---|---|---|
| 10 000 самых распространенных графических ключей | 104 | около 10 секунд |
| Все ключи из 6 точек | 1,28 × 108 | около 1,5 дня |
| Все ключи из 7 точек | 2,42 × 109 | около 28 дней |
| Все ключи из 8 точек | 4,36 × 1010 | около 1,4 года |
| Фраза восстановления (92 бита) | 4,95 × 1027 | около 1,6 × 1017 лет |
Это оценки, а не измерения. Числа графических ключей указаны по верхней границе; реальных ключей гораздо меньше. Больше оборудования или более быстрое оборудование ускоряет подбор пропорционально. PIN-код на максимальном уровне умножает эти числа вплоть до 108 раз.
Храните файл резервной копии в тайне
Файл резервной копии не содержит соль устройства, поэтому любой, кто его получит, может перебирать графические ключи офлайн, как показано выше. Храните его только там, где доступ есть только у вас, например в своем облачном аккаунте, и используйте более длинный графический ключ.
Фраза восстановления показывает и графический ключ
Тот, у кого есть фраза восстановления хранилища, может открыть это хранилище, и приложение затем покажет ему его графический ключ и PIN-код. Если вы используете тот же ключ где-то еще, например для блокировки экрана телефона, он узнает и его. Храните бумагу так же надежно, как сами файлы.
Телефоны с root-доступом или вирусами
Если кто-то может выполнять код с разрешениями приложения (например, на телефоне с root-доступом или с помощью вредоносной программы, получившей полный контроль), он может открыть соль устройства и подбирать ключ офлайн. Пока хранилище открыто, ключи находятся в оперативной памяти, и их можно прочитать с root-доступом или отладчиком. Некоторые копии, создаваемые внутри Android и Flutter, а также фото на экране нельзя сразу стереть из памяти.
Некоторые сведения видны
Число зашифрованных файлов в памяти приложения, их примерный размер, а также время их создания или изменения не скрываются. Как и то, что LifeVeil установлено.
Пустое хранилище обманывает только экран
Тот, кто может читать файлы приложения (например, на телефоне с root-доступом), может посчитать папки хранилищ и увидеть, что эта настройка включена. Замедление одинаково учитывает сохраненные и несохраненные пустые хранилища, поэтому само ожидание не позволяет их различить.
Маскировка меняет только главный экран
- Меняются только значок и название в лаунчере. В списке «Настройки > Приложения», в сведениях о приложении и на экранах памяти устройства по-прежнему отображается LifeVeil.
- Программы чтения с экрана могут по-прежнему произносить «LifeVeil». Например, лаунчер Samsung One UI передает TalkBack настоящее название приложения, и приложение не может это изменить.
- Меню «Поделиться» в Android всегда показывает настоящее название приложения, поэтому при смене значка LifeVeil убирает себя из него. Вы можете снова включить его.
- В запросах разрешений Android показывает настоящее название, поэтому приложение запрашивает разрешения до смены значка.
- Пока значок изменен, приложение не отправляет уведомления.
- Код маскировки (от 4 до 8 цифр) только открывает экран блокировки. Он не открывает ваши файлы. Код хранится в виде хеша с солью, но вариантов так мало, что его легко найти, если кто-то получит файл.
Отпечаток пальца — менее надежный способ
При разблокировке по отпечатку пальца Argon2id не используется. Ее надежность зависит от сканера отпечатков вашего телефона и Android Keystore. Ее можно в любой момент отключить в настройках.
Сведения о фото
- Для фото в форматах HEIC, PNG и WebP скрытые сведения (EXIF) остаются внутри файла. Весь файл при этом все равно зашифрован.
- На Android 10 и новее Android удаляет GPS-координаты из фото, которые читает LifeVeil, потому что приложение не запрашивает доступ к местоположению. Когда оригинал удаляется из галереи, эти координаты пропадают.
- Фото, добавленные через средство выбора фото Android, получают новые имена по дате, потому что средство выбора не передает исходное имя.
Блокировка приостанавливается на системных экранах
Пока открыт системный экран (запрос разрешения, подтверждение удаления, выбор фото или файла, запрос отпечатка пальца) и пока идет импорт или экспорт, приложение откладывает блокировку. Если вы вышли из приложения, оно заблокируется через 2 секунды после этого.
У всех хранилищ одна соль устройства
Все хранилища на телефоне используют одну и ту же соль устройства. Если у кого-то есть эта соль, одна попытка проверяет сразу все хранилища. Стоимость атаки на одно хранилище при этом не меняется.
То, что не может предотвратить ни одно приложение
Человек, который смотрит, как вы рисуете графический ключ, или камера, снимающая ваш экран.
Без фразы никто не поможет
Если вы забудете графический ключ хранилища без фразы восстановления или потеряете и ключ, и фразу, никто не сможет восстановить его файлы. Даже мы.