Архитектура безопасности Cryptile, слой за слоем
Cryptile шифрует каждый файл, миниатюру и индекс AES-256-GCM ключами, которые создаются на вашем телефоне из нарисованного вами узора. Нет ни учётной записи, ни сервера, а разработчик никогда не хранит ключи.
Краткое изложение — на странице о безопасности.
Что нужно знать?
- Ваш узор — источник каждого ключа. Без него ничего читаемого не хранится.
- Размеры и число хранилищ размыты. Файлы выравниваются по размеру, а ложные слоты скрывают, сколько хранилищ существует.
- Это можно проверить. Ядро шифрования опубликовано для аудита (исходный код доступен), вместе с моделью угроз и тестовыми векторами: github.com/jasonbrelsford/cryptile-core.
Как узор становится ключом?
- Узор записывается как размер сетки, за которым по порядку идут ячейки, которых вы коснулись.
- К нему примешивается 32-байтовый секрет устройства, который хранится в связке ключей (Keychain) iPhone только для этого устройства.
- PBKDF2-HMAC-SHA512 прогоняется по нему 600 000 раз. Столько же работы стоит каждая попытка подбора.
- HKDF-SHA256 делит результат на ключ поиска и ключ обёртки.
- Ключ поиска задаёт имя файла индекса хранилища. Ключ обёртки его открывает.
Внутри индекса лежит случайный 256-битный мастер-ключ хранилища. HKDF выводит из него отдельные подключи для файлов, миниатюр и индекса. Ни один ключ не используется для двух целей.
Как шифруются файлы?
Небольшие объекты, такие как миниатюры и индекс, запечатываются целиком AES-256-GCM со случайным nonce.
Крупные файлы используют схему STREAM с фрагментами по 1 МБ. У каждого фрагмента свой nonce, и в нём записаны его позиция и то, последний ли он. Если фрагменты обрезать, переставить или подменить, расшифровка не удастся.
GCM также проверяет подлинность каждого заголовка, поэтому изменённый файл отклоняется, а не показывается.
Как скрываются размеры и число хранилищ?
Каждый небольшой блок и каждый последний фрагмент файла дополняется до размера, кратного 64 КиБ. Тот, кто скопировал файлы, видит примерные размеры, а не точные.
Списка хранилищ нет. Приложение держит не меньше 8 слотов в формате индекса, настоящих и ложных, и при каждой записи заново генерирует ложные. Узор, которому не соответствует ни один слот, открывает пустое хранилище.
Как работает восстановление?
Каждое хранилище получает фразу восстановления из 9 слов, это 96 бит случайности. Она открывает отдельную резервную копию хранилища, запечатанную ключом из этой фразы.
Копия в iCloud отражает зашифрованные файлы как есть. Секрета устройства в ней по умолчанию нет, поэтому по одной копии подбирать узоры нельзя.
Что зашифровано, а что нет?
Зашифрованы: фото, видео, файлы, заметки, миниатюры, имена, папки, избранное, распознанный текст и места съёмки фото. Небольшой файл, который отслеживает ложные слоты и счётчики бесплатного тарифа, запечатан ключом устройства.
Не шифруется Cryptile:
- Настройки. Время автоблокировки, порядок сортировки и переключатель копии не содержат секретов.
- Отправленные объекты, ожидающие добавления. Их защищает файловая защита iOS, пока вы не откроете хранилище.
- Общий размер контейнера и время записи. Хранилище на 10 ГБ не выглядит как 10 МБ.
- Всё, что вы экспортируете. Копия, сохранённая в «Фото» или «Файлы», находится вне хранилища.
От чего это защищает?
- От того, кто копирует файлы приложения без вашей связки ключей. Он получит шифртекст и не сможет перебирать узоры.
- От Apple и от утечки в Apple. В iCloud лежит шифртекст и нет ключей.
- От подмены. Изменённые или переставленные данные не расшифруются.
- От нас. У нас нет сервера и нет ключей, поэтому сбросить доступ мы не можем.
От чего это не защищает?
- Короткие узоры. Узор слабее парольной фразы. С вашими файлами и связкой ключей узор из 6 ячеек на сетке 4×4 перебирается на GPU за минуты. Используйте 8 ячеек или больше.
- Вредоносные программы на разблокированном телефоне. Код, который читает память, пока хранилище открыто, не по силам ни одному приложению.
- Тех, кто смотрит, как вы рисуете. Рисуйте там, где никто не видит вашу руку.
- Потерю телефона и фразы. Хранилище исчезнет. Сброса нет.
Узор паники в Plus уничтожает секрет устройства, поэтому ни одно хранилище на телефоне не откроется, пока его не восстановят.