Архитектура безопасности: Полный технический стек
Vaultaire не полагается на какой-то один алгоритм или один хитрый трюк. Он использует многоуровневую криптографическую архитектуру, в которой каждый компонент выполняет определенную задачу, и отказ любого одного уровня не ставит под угрозу другие. Здесь собраны все шифры, протоколы и конструктивные решения, которые стоят между вашими личными данными и остальным миром.
Сейф использует AES-256-GCM для аутентифицированного шифрования индексов сейфа, обёрнутых ключей, заголовков файлов, содержимого, миниатюр и метаданных. PBKDF2-HMAC-SHA512 выводит локальный ключ сейфа из узора и общей для устройства соли из Keychain. Этот ключ сейфа оборачивает отдельный случайный 256-битный главный ключ, которым файлы шифруются через CryptoKit в процессе приложения.
Криптографический стек
Vaultaire использует несколько согласованно работающих криптографических механизмов, каждый из которых выбран для своей задачи. PBKDF2 превращает учётные данные человека в ключ сейфа или ключ восстановления. AES-256-GCM защищает индексы, обёртки ключей, метаданные, миниатюры и содержимое файлов. Случайный главный ключ отделяет долговременное шифрование файлов от изменяемого узора. Keychain и защита данных iOS охраняют привязанные к устройству соль и записи восстановления, пока устройство заблокировано. Ключа расшифровки, который хранился бы у поставщика и давал бы разработчику обычный доступ к открытому тексту сейфа, нет.
Это не сложность ради сложности. Каждый уровень рассчитан на свою поверхность атаки. AES-256-GCM сочетает конфиденциальность с аутентификацией, поэтому изменённый шифротекст не проходит проверку. PBKDF2 повышает стоимость проверки каждого узора или фразы. Благодаря случайному главному ключу при смене узора достаточно заново обернуть один ключ, а не перешифровывать каждый файл. Защита данных Keychain охраняет локальную соль и записи восстановления, а приложение прямо признаёт, что симметричное шифрование происходит в памяти процесса.
Вместе эти уровни образуют эшелонированную защиту, но не все они являются независимыми барьерами. Угаданный узор можно проверить по имени индексного файла и аутентификации AES-GCM, а скомпрометированное разблокированное устройство может увидеть ключи или открытый текст в процессе приложения. Поэтому архитектура зависит от энтропии учётных данных, стоимости PBKDF2, защиты устройства в iOS и правильной работы с аутентифицированным шифрованием, а также от стойкости самого AES.
Представьте иерархию Vaultaire как набор вложенных запертых контейнеров. Выведенный из узора ключ сейфа открывает аутентифицированный индекс. Индекс отдаёт обёрнутый случайный главный ключ. Этот главный ключ защищает файлы и метаданные. PBKDF2, AES-GCM, Keychain и защита данных iOS обладают разными свойствами, а гарантии безопасности прочны лишь настолько, насколько прочна вся цепочка.
AES-256-GCM: Шифрование файлов
Каждая фотография, видео и документ в Vaultaire зашифрованы с помощью AES-256-GCM — стандарта Advanced Encryption Standard с 256-битным ключом в режиме Галуа/счётчика. Vaultaire также использует AES-GCM для индексов сейфа, заголовков файлов, миниатюр и конвертов ключей. Алгоритм и длина ключа стандартизированы; безопасность Vaultaire по-прежнему зависит от обработки одноразовых номеров, управления ключами, надёжности учётных данных и корректности реализации.
“256” в AES-256 относится к длине ключа в битах. 256-битный ключ имеет 2256 возможные значения. Для сравнения: их примерно 1080 атомов в наблюдаемой Вселенной. Если бы каждый атом был суперкомпьютером, проверяющим миллиард ключей в секунду, работающим со времен Большого взрыва, они бы исследовали менее триллионной триллионной доли одного процента пространства ключей. AES-256 не будет подвергаться грубому перебору. Не сегодня. Не в этом веке. Не раньше, чем погаснут звезды.
Почему важен режим GCM
AES, это блочный шифр., шифрует данные 128-битными фрагментами. Режим “mode” определяет, как объединяются эти фрагменты. GCM (режим Галуа/счетчика) предоставляет две вещи, которых нет в более простых режимах, таких как CBC: параллельное шифрование и встроенную аутентификацию.
Аутентификация здесь имеет решающее значение. GCM создаёт криптографический тег для каждого зашифрованного файла. Этот тег работает как защитная пломба. Если злоумышленник или повреждённый сектор диска изменит хотя бы один бит шифротекста, тег аутентификации не совпадёт, и расшифровка завершится ошибкой. Вы не получите повреждённых данных. Вы получите чёткий сигнал, что что-то не так. Это свойство называется аутентифицированным шифрованием и предотвращает целый класс атак, при которых злоумышленник изменяет зашифрованные данные, чтобы повлиять на результат расшифровки.
PBKDF2: получение ключа
Vaultaire выводит разные ключи для разных задач. Узор и общая для устройства соль из Keychain проходят через PBKDF2-HMAC-SHA512 с 600 000 итераций, чтобы получить локальный ключ сейфа. Отдельная детерминированная конструкция на основе узора даёт ключ облачной резервной копии. Нормализованная фраза восстановления проходит 800 000 итераций PBKDF2 и даёт ключ для конверта восстановления. Ни один из этих выводов не превращает человеческие учётные данные в 256 бит энтропии только потому, что длина результата — 256 бит.
Как PBKDF2 защищает ваш узор
Основная идея PBKDF2 — намеренная вычислительная работа. Он берёт сериализованный узор или нормализованную фразу и выполняет сотни тысяч итераций HMAC-SHA512. Законный пользователь платит эту цену один раз при разблокировке или восстановлении. Злоумышленник платит её за каждого кандидата, хотя реальную скорость подбора определяют параллельное оборудование и выбор реализации.
Vaultaire настраивает PBKDF2 на 600 000 итераций для ключей, выведенных из узора. Это делает каждую попытку дороже, но честная оценка атаки должна опираться на измеренное время на кандидата и предположения об оборудовании. При 1 мс на кандидата 1 000 000 000 последовательных попыток занимают около 11,6 дня, а не годы. 256-битный результат не добавляет энтропии предсказуемому узору.
Для вывода локального ключа из узора используется одна криптографически случайная соль на устройство, хранящаяся как элемент Keychain с классом WhenUnlockedThisDeviceOnly. Соль не секретна и общая для всех сейфов на этом устройстве. Она не даёт применить таблицу, построенную для одного устройства, к другому устройству с другой солью, но не заставляет злоумышленника начинать заново для каждого сейфа на одном устройстве.
AES-256-GCM: Защита метаданных
Шифровать только содержимое файлов недостаточно. Имена файлов, даты создания, размеры миниатюр и структура сейфа — всё это метаданные, а метаданные могут рассказать не меньше самих данных. Файл с именем “tax-return-2025.pdf” прямо сообщает злоумышленнику, что внутри, даже если содержимое зашифровано. Временная метка показывает, когда вы пользовались сейфом. Размер миниатюры показывает, фотография это или видео.
Vaultaire защищает эти метаданные с помощью AES-256-GCM, а не ChaCha20. Имена файлов и MIME-типы записываются в зашифрованные заголовки файлов. Зашифрованный индекс сейфа содержит записи о файлах, даты, сведения о размерах, схему хранения и обёрнутый главный ключ. Данные миниатюр тоже шифруются случайным главным ключом.
Почему метаданные шифруются с аутентификацией?
Метаданным нужны и целостность, и конфиденциальность. AES-GCM создаёт тег аутентификации для каждого зашифрованного значения, поэтому Vaultaire может отклонить изменённый заголовок, индекс, миниатюру или конверт, а не принять открытый текст, подложенный злоумышленником. Архитектура намеренно использует одну конструкцию аутентифицированного шифрования для всех этих форматов хранения и не заявляет криптографического разнообразия, которого реализация не даёт.
Один и тот же шифр не означает слепого повторного использования одного ключа или одноразового номера. Ключ сейфа защищает индекс и оборачивает случайный главный ключ; главный ключ защищает данные файлов. CryptoKit создаёт аутентифицированные запечатанные блоки со свежими одноразовыми номерами, а потоковый формат Vaultaire выводит отдельный одноразовый номер для каждого упорядоченного фрагмента. Нужные гарантии дают разделение ключей, дисциплина одноразовых номеров и аутентификация, а не второй шифр для метаданных.
Архитектура с нулевым разглашением данных
Вот вопрос, который стоит задать о любом приложении безопасности: что произойдет, если компания, стоящая за ним, будет взломана, вызвана в суд или просто станет вредоносной?
Для большинства приложений ответ неудобен. Они хранят ваши данные, ваши ключи или и то, и другое. Решение суда обязывает их передать его. Утечка данных раскрывает это. К нему получил доступ мошеннический сотрудник. Безопасность приложения ’ настолько сильна, насколько надежна операционная безопасность компании ’, и история показывает, что компании регулярно подвергаются взлому.
Vaultaire не управляет учётной записью или службой хранения, которая получала бы ваш узор, секретную фразу, ключи расшифровки или читаемое содержимое сейфа. Шифрование и расшифровка происходят в процессе приложения на вашем устройстве. Когда резервное копирование в iCloud включено, приложение отправляет аутентифицированный шифротекст в вашу личную базу данных CloudKit, а не в службу хранения под контролем Vaultaire.
Что означает отсутствие знаний на практике
Если правоохранительные органы направят Vaultaire требование выдать открытый текст сейфа, у компании не будет узора, фразы восстановления, ключа сейфа, резервного ключа или главного ключа, нужных для расшифровки. Зашифрованные записи iCloud лежат в частной базе данных CloudKit пользователя. Однако на устройстве материалы для восстановления хранятся в зашифрованной базе данных в Keychain, а симметричные ключи находятся в памяти приложения, пока CryptoKit шифрует или расшифровывает открытый сейф.
Эта граница поставщика — свойство архитектуры, а не обещание, что каждая часть клиентской среды находится вне модели доверия. У Vaultaire нет серверного ключа расшифровки, который можно было бы выдать для обычного восстановления сейфа. Выпущенное приложение, iOS, разблокированное устройство и криптографическая реализация по-прежнему могут обрабатывать читаемые данные, и им приходится доверять.
Граница поставщика Vaultaire исключает из обычной архитектуры ключ расшифровки, хранящийся у компании. Это сокращает то, что может раскрыть взлом самого Vaultaire. Но это не отменяет необходимости доверять выпущенному клиенту, iOS, состоянию устройства и реализации описанной иерархии ключей. Эти границы нужно оценивать отдельно, а не превращать в абсолютные обещания.
Keychain и граница процесса приложения
Apple Secure Enclave может защищать поддерживаемые закрытые ключи и участвует в некоторых частях архитектуры безопасности платформы, но его публичные API не позволяют поместить произвольный симметричный ключ, выведенный через PBKDF2, внутрь сопроцессора и выполнять там файловые операции AES-GCM Vaultaire. Поэтому Vaultaire не описывает шифр своего сейфа как AES в Secure Enclave.
Vaultaire использует обычные элементы iOS Keychain типа «общий пароль» для случайной соли устройства, зашифрованной базы данных восстановления и случайного ключа, защищающего эту базу. Эти элементы используют класс доступности WhenUnlockedThisDeviceOnly. Keychain и защита данных создают значимую границу устройства, особенно когда телефон заблокирован, но эта архитектура отличается от неэкспортируемого ключа в Secure Enclave.
Когда вы рисуете узор, CommonCrypto выводит ключ сейфа в процессе приложения. Затем CryptoKit и CryptoEngine Vaultaire используют в этом процессе байты симметричного ключа, чтобы аутентифицировать и расшифровать индекс, развернуть главный ключ и обработать файлы. Приложение очищает активное состояние при блокировке, но у злоумышленника с достаточными привилегиями, который наблюдает за разблокированным сеансом, возможностей больше, чем у эксперта, у которого есть только шифротекст заблокированного устройства.
Взломанная или иным образом скомпрометированная операционная система может перехватывать ввод узора, память приложения, расшифрованные превью, экспорт или экран. Vaultaire рекомендует актуальный iPhone без джейлбрейка, потому что архитектура опирается на изоляцию процессов iOS, Keychain и защиту данных. Приложение не утверждает, что при компрометации на уровне root симметричные ключи открытого сейфа недоступны.
Векторы инициализации каждого файла
Если зашифровать два одинаковых файла одним и тем же ключом, простая реализация даст одинаковый шифротекст. Это проблема. Злоумышленник, увидевший два одинаковых зашифрованных объекта, без расшифровки понимает, что исходные файлы совпадают. В сейфе, полном фотографий, такой анализ закономерностей может раскрыть информацию даже сквозь шифрование.
Vaultaire исключает детерминированный шифротекст, создавая новый криптографический одноразовый номер для каждой операции запечатывания AES-256-GCM. Заголовки и содержимое файлов запечатываются отдельно, а большие файлы используют аутентифицированный потоковый формат со случайным базовым одноразовым номером и отдельным номером для каждого упорядоченного фрагмента. Поэтому две копии одной фотографии не дают одинакового зашифрованного представления.
Нонсы хранятся вместе с шифротекстом и не являются секретными; требование безопасности состоит в их уникальности для данного ключа. Vaultaire запрашивает 96-битные нонсы у криптографического генератора случайных чисел Apple для однопроходного шифрования и записывает базовый нонс в потоковый заголовок. Риск коллизии зависит от числа шифрований одним ключом, поэтому реализация генерирует новое значение, а не представляет 96-битный размер как фиксированную пожизненную гарантию вероятности один к 296.
Управление памятью: очистка состояния активного ключа
Распространенной ошибкой программного обеспечения безопасности является сохранение конфиденциальных данных в памяти после того, как они больше не нужны. Ключи шифрования, производные пароли и расшифрованные данные могут сохраняться в оперативной памяти еще долгое время после того, как приложение завершит их использование. Криминалистические инструменты могут создавать дамп памяти устройства и искать эти остатки., метод, известный как атака с холодной загрузкой или анализ дампа памяти.
Vaultaire ограничивает время, в течение которого доступны активное состояние ключей и расшифрованные данные интерфейса. Когда приложение блокируется или сеанс завершается, код проходит несколько путей очистки:
- Активное состояние сейфа удаляется. Приложение сбрасывает текущий сеанс доступа к ключу сейфа и требует повторной разблокировки, прежде чем показать содержимое сейфа.
- Обёртки ключей очищают свои буферы. Защищённые байтовые контейнеры Vaultaire перезаписывают свои буферы при освобождении.
- Кэшированное состояние главного ключа сбрасывается. Расшифрованный главный ключ открытого индекса отбрасывается на соответствующих путях блокировки и очистки кэша.
- Расшифрованные кэши пользовательского интерфейса очищаются там, где они контролируются Vaultaire. Очистка миниатюр и предварительного просмотра уменьшает остаточное состояние приложения, не требуя контроля над каждой копией, сделанной Swift. iOS или другой процесс.
Когда Vaultaire в следующий раз откроется в заблокированном состоянии, вы нарисуете узор, и приложение заново выведет ключ сейфа, прежде чем сможет аутентифицировать индекс и развернуть главный ключ. Это очистка сеанса, а не утверждение, что каждая временная копия в памяти прошла доказуемую многопроходную очистку или что уничтожена ссылка на ключ в Secure Enclave. После сбоя iOS перезапускает процесс, но код очистки не может выполняться после каждого внезапного завершения.
Часто задаваемые вопросы
Действительно ли AES-256 нерушим?
AES-256 — стандартизированный и тщательно изученный блочный шифр. Практических атак на правильно реализованный AES-256-GCM со случайным 256-битным ключом не известно, но это не делает сейф неуязвимым. Энтропия учётных данных, стоимость PBKDF2, обработка одноразовых номеров, хранение ключей, восстановление, состояние устройства и ошибки реализации остаются путями атаки.
Зачем использовать PBKDF2 для получения ключа?
Сейф использует PBKDF2-HMAC-SHA512 через CommonCrypto: 600 000 итераций для узоров и 800 000 для фраз восстановления. Для вывода локального ключа из узора используется одна случайная соль на всё устройство, которая хранится в Keychain. PBKDF2 повышает стоимость каждой попытки угадать, но не добавляет узору энтропии, поэтому время атаки зависит от надёжности учётных данных, измеренной скорости оборудования и параллелизма.
Какие данные Vaultaire отправляет на свои серверы?
Серверы Vaultaire никогда не получают ваши файлы, узор или ключи. Приложение обращается к четырём видам служб. Зашифрованное резервное копирование iCloud включено по умолчанию и хранит шифротекст в вашей личной учётной записи iCloud, зашифрованный на вашем устройстве ключом, которого нет у Apple; его можно отключить. Анонимные данные об использовании и сбоях по умолчанию отправляются в PostHog, и их можно отключить в настройках. Если вы отправляете отзыв, наша служба отзывов получает ваше сообщение, необязательный email для ответа, язык и версию приложения. Пока аналитика включена, токен атрибуции Apple Ads и случайный идентификатор установки проходят через нашу службу в Apple. Синхронизация и общий доступ, когда вы ими пользуетесь, идут через Apple CloudKit.
Может ли взломанный iPhone поставить под угрозу мой сейф?
Джейлбрейк существенно ослабляет границы устройства. Операции AES-GCM в Vaultaire выполняются в процессе приложения через CryptoKit, поэтому байты симметричного ключа находятся в памяти приложения, пока сейф открыт. Компрометация на уровне root может быть нацелена на ввод, память, снимки экрана или расшифрованные данные. Keychain и Data Protection по-прежнему добавляют барьеры, пока устройство заблокировано, но Vaultaire не утверждает, что его ключи AES изолированы внутри Secure Enclave.
Как шифруются метаданные?
Vaultaire не использует ChaCha20 для метаданных сейфа. Имена файлов, MIME-типы, временные метки, данные миниатюр, структура сейфа и обёрнутый главный ключ защищены аутентифицированным шифротекстом AES-256-GCM. Одна аутентифицированная конструкция обеспечивает единообразные проверки конфиденциальности и целостности во всём формате хранения.
Что произойдет с моими ключами, если приложение выйдет из строя?
iOS перезапускает завершённый процесс, и при следующем запуске нужна новая разблокировка, прежде чем Vaultaire восстановит активное состояние ключей. Vaultaire не создаёт сеансовых ссылок на ключи AES в Secure Enclave. Обёртки ключей очищают свои буферы при освобождении, а пути блокировки сбрасывают активное состояние, но Swift и iOS не гарантируют, что каждая временная копия была перезаписана до сбоя.
Посмотрите стек в действии
Аутентифицированное шифрование, многоуровневые ключи, затратный вывод ключей и никакого ключа сейфа у поставщика. Скачайте Vaultaire и пользуйтесь описанной здесь архитектурой с честно обозначенными границами устройства и учётных данных.
Скачать Vaultaire бесплатно