Как LifeVeil защищает ваши файлы
Здесь простыми словами объясняется, что делает LifeVeil, а также чего приложение сделать не может. Мы хотим, чтобы вы знали об ограничениях, а не верили слишком громким обещаниям.
Коротко
- Все шифрование происходит на вашем телефоне. У LifeVeil нет сервера и нет аккаунтов.
- Ваши файлы зашифрованы случайным ключом. Открыть этот ключ можно только вашим графическим ключом, фразой восстановления или отпечатком пальца.
- У нас, разработчиков, никогда нет вашего графического ключа, фразы или ключей шифрования. Мы не можем открыть ваши файлы и не можем сбросить ваш графический ключ.
- Мы используем шифрование, встроенное в 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, который нельзя скопировать с телефона.
- Копия графического ключа нигде не хранится. Приложение проверяет графический ключ, пытаясь открыть им ключ шифрования.
- После 5 неверных попыток подряд нужно подождать 30 секунд. После каждой следующей ошибки время ожидания удваивается, вплоть до 16 минут.
Как шифруются файлы
- У каждого хранилища есть случайный 256-битный главный ключ. Ключ из графического ключа и ключ восстановления только «оборачивают» (шифруют) этот главный ключ.
- Файлы, миниатюры и список ваших объектов (исходные имена файлов, даты, размеры) шифруются с помощью AES-256-GCM, встроенного в Android. GCM также обнаруживает, если файл был изменен или подменен.
- Файлы внутри приложения имеют случайные имена. Большие файлы шифруются частями по 1 МиБ, поэтому видео воспроизводятся без записи незашифрованной копии в память устройства.
- Для фото в формате JPEG скрытые сведения (EXIF, например камера и дата) хранятся отдельно, тоже в зашифрованном виде.
- Когда приложение блокируется, оно перезаписывает нулями ключи, которые держит в оперативной памяти.
Фраза восстановления
- Когда вы создаете хранилище, надежный генератор случайных чисел телефона выбирает 9 английских слов. Они берутся из двух списков по 1024 распространенных слова в одном из 4 фиксированных порядков. Это 92 бита случайности. Слова английские на любом языке приложения.
- Фраза проходит через Argon2id с теми же параметрами и сама по себе открывает главный ключ. Ей не нужна соль устройства, поэтому она работает, даже если графический ключ уже не работает.
- Копия фразы хранится на телефоне, зашифрованная дважды: главным ключом и ключом из Android Keystore. Ее можно посмотреть в настройках, снова нарисовав графический ключ.
- Когда вы меняете графический ключ или входите с помощью фразы, вы получаете новую фразу. Старая перестает работать.
Отпечаток пальца
Разблокировка по отпечатку пальца необязательна. Отпечаток проверяет Android, а не LifeVeil; приложение никогда не получает ваш отпечаток. Главный ключ открывается ключом в Android Keystore, который работает только сразу после надежной биометрической проверки. Если кто-то добавит на телефон новый отпечаток, этот ключ перестанет работать и вам нужно будет снова использовать графический ключ.
Файл резервной копии
- Резервная копия — это один файл
.lvb. В нем ваши объекты в том виде, в котором они уже зашифрованы, плюс две обернутые копии главного ключа: одна для графического ключа, который вы нарисовали при создании копии, и одна для фразы восстановления, которая была у вас в тот момент. - Копия для графического ключа использует новую случайную соль для каждой резервной копии, а не соль устройства. Именно поэтому резервную копию можно открыть на новом телефоне.
- Заголовок файла защищен, поэтому изменения или подмена частей обнаруживаются.
- Вы сами выбираете, где сохранить файл, на стандартном экране сохранения Android. Через нас он никогда не проходит.
- Чтобы восстановить данные, откройте файл его графическим ключом или его фразой. Затем вы нарисуете новый графический ключ и получите новую фразу восстановления.
Другие меры защиты в приложении
- Скриншоты, запись экрана и предпросмотр в списке недавних приложений заблокированы на всех экранах.
- По умолчанию приложение блокируется сразу, как только вы из него выходите. Вместо этого можно выбрать 30 секунд или 1 минуту.
- Встроенное облачное резервное копирование Android и перенос данных между телефонами не включают данные LifeVeil. Используйте вместо этого файл резервной копии.
- Приложение не запрашивает доступ к местоположению, контактам или «всем файлам».
- Пустое хранилище при неверном ключе. Ключ, который не открывает ни одно хранилище, вместо ошибки открывает пустое хранилище. Тот, кто заставляет вас открыть приложение, не узнает, что ещё в нём есть. Неудачные попытки по-прежнему считаются, фото злоумышленника по-прежнему делается, ожидание по-прежнему действует. Отключить это можно в разделе Настройки > Безопасность > Пустое хранилище при неверном ключе.
ИИ и подбор графического ключа
- ИИ не может обойти математику. Каждая попытка все равно требует выполнить Argon2id с 64 МиБ памяти. ИИ не взламывает Argon2id или AES, поэтому ни одна попытка не становится дешевле.
- ИИ меняет порядок попыток. Он может выучить фигуры, которые нравятся людям (буквы, квадраты, любимые начальные углы), и пробовать их первыми. Он также может помочь распознать графический ключ по видео, снятому у вас из-за плеча, или по следам пальцев на экране.
- Поэтому защита строится вокруг графического ключа, а не математики. Индикатор надежности предупреждает о распространенных фигурах. Графический ключ + PIN добавляет PIN-код из 4–6 цифр, так что графического ключа, подсмотренного на видео, недостаточно. Скрыть линию ключа не оставляет линии, которую можно снять. Соль устройства в Android Keystore не дает подбирать ключ вне телефона.
Ограничения, о которых стоит знать
Ни одно приложение не защищает от всего. Вот честные ограничения LifeVeil.
Простые графические ключи можно угадать
Короткие или распространенные фигуры (буква L, буква Z, прямая линия) можно угадать, подсмотрев за вами, по следам пальцев на экране или за несколько попыток. Реальные графические ключи угадать гораздо проще, чем можно подумать по числу возможных вариантов. Используйте больше точек и больше поворотов. Приложение предупреждает о слишком простых графических ключах.
Сколько времени может занять подбор
В самом приложении каждая попытка занимает около секунды, а после 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 лет |
Это оценки, а не измерения. Числа графических ключей указаны по верхней границе; реальных ключей гораздо меньше. Больше оборудования или более быстрое оборудование ускоряет подбор пропорционально.
Храните файл резервной копии в тайне
Файл резервной копии не содержит соль устройства, поэтому любой, кто его получит, может перебирать графические ключи офлайн, как показано выше. Храните его только там, где доступ есть только у вас, например в своем облачном аккаунте, и используйте более длинный графический ключ.
Телефоны с root-доступом или вирусами
Если кто-то может выполнять код с разрешениями приложения (например, на телефоне с root-доступом или с помощью вредоносной программы, получившей полный контроль), он может открыть соль устройства и подбирать ключ офлайн. Пока хранилище открыто, ключи находятся в оперативной памяти, и их можно прочитать с root-доступом или отладчиком. Некоторые копии, создаваемые внутри Android и Flutter, а также фото на экране нельзя сразу стереть из памяти.
Некоторые сведения видны
Число зашифрованных файлов в памяти приложения, их примерный размер, а также время их создания или изменения не скрываются. Как и то, что LifeVeil установлено.
Пустое хранилище обманывает только экран
Тот, кто может читать файлы приложения (например, на телефоне с root-доступом), может посчитать папки хранилищ и увидеть, что эта настройка включена. А после 5 неверных ключей приложение заставляет ждать, и это показывает, что предыдущие ключи ничего не открыли.
Маскировка меняет только главный экран
- Меняются только значок и название в лаунчере. В списке «Настройки > Приложения», в сведениях о приложении и на экранах памяти устройства по-прежнему отображается LifeVeil.
- Программы чтения с экрана могут по-прежнему произносить «LifeVeil». Например, лаунчер Samsung One UI передает TalkBack настоящее название приложения, и приложение не может это изменить.
- Меню «Поделиться» в Android всегда показывает настоящее название приложения, поэтому при смене значка LifeVeil убирает себя из него. Вы можете снова включить его.
- В запросах разрешений Android показывает настоящее название, поэтому приложение запрашивает разрешения до смены значка.
- Пока значок изменен, приложение не отправляет уведомления.
- Код маскировки (от 4 до 8 цифр) только открывает экран блокировки. Он не открывает ваши файлы. Код хранится в виде хеша с солью, но вариантов так мало, что его легко найти, если кто-то получит файл.
Отпечаток пальца — менее надежный способ
При разблокировке по отпечатку пальца Argon2id не используется. Ее надежность зависит от сканера отпечатков вашего телефона и Android Keystore. Ее можно в любой момент отключить в настройках.
Фото посторонних
Приложение не воспроизводит звук затвора, но телефоны, продаваемые в некоторых странах, например в Японии и Корее, воспроизводят его всегда. Снимок не делается, если камера занята другим приложением или фронтальной камеры нет. Пока вы не разблокируете первое созданное вами хранилище, фото защищены ключом из Android Keystore.
Сведения о фото
- Для фото в форматах HEIC, PNG и WebP скрытые сведения (EXIF) остаются внутри файла. Весь файл при этом все равно зашифрован.
- На Android 10 и новее Android удаляет GPS-координаты из фото, которые читает LifeVeil, потому что приложение не запрашивает доступ к местоположению. Когда оригинал удаляется из галереи, эти координаты пропадают.
- Фото, добавленные через средство выбора фото Android, получают новые имена по дате, потому что средство выбора не передает исходное имя.
Блокировка приостанавливается на системных экранах
Пока открыт системный экран (запрос разрешения, подтверждение удаления, выбор фото или файла, запрос отпечатка пальца) и пока идет импорт или экспорт, приложение откладывает блокировку. Если вы вышли из приложения, оно заблокируется через 2 секунды после этого.
У всех хранилищ одна соль устройства
Все хранилища на телефоне используют одну и ту же соль устройства. Если у кого-то есть эта соль, одна попытка проверяет сразу все хранилища. Стоимость атаки на одно хранилище при этом не меняется.
То, что не может предотвратить ни одно приложение
Человек, который смотрит, как вы рисуете графический ключ, или камера, снимающая ваш экран.
Если вы потеряете и то и другое, никто не поможет
Если вы потеряете и графический ключ, и фразу восстановления, никто не сможет восстановить ваши файлы. Даже мы.