Шифрование, коды восстановления, резервные копии, перенос — ответы на волнующие вопросы здесь.
Да, действительно. CosmosBox построен на нулевом аккаунте: данные по умолчанию живут только на вашем устройстве, обрабатываются сильнейшими признанными алгоритмами — ваш пароль проходит через Argon2id (128 МБ памяти; перебор на GPU практически невозможен) для вывода мастер-ключа, а каждый файл затем шифруется собственным независимым случайным ключом AES-256-GCM. Ключ (мастер-ключ) существует лишь в памяти во время разблокировки и стирается при блокировке; ключи данных хранит аппаратный чип безопасности системы (Android Keystore / iOS Keychain).
Нет аккаунта — значит, нет звена «сервер хранит ваш пароль» — поверхность утечки пароля равна нулю. Обратная сторона: если вы забудете пароль, вернуть данные сможет только код восстановления.
Для этого существует «восстановление пароля» (система кода восстановления). После включения приложение генерирует код восстановления (делится на 5 частей; любые 3 восстанавливают доступ): 1-2 части храните сами, остальные отдайте доверенным людям. При забытом пароле ввод кода сбрасывает его и восстанавливает все данные — без какого-либо участия сервера.
Если вы забыли пароль, никогда не включали восстановление и не имеете резервной копии — данные восстановить невозможно. Это физическая граница шифрования без аккаунтов, поэтому настоятельно рекомендуем: включите восстановление пароля сразу после его установки.
Код восстановления = 32-байтовое истинно случайное число (32 × 8 = 256 бит энтропии), генерируется безопасным случайным источником системы (Random.secure()) — каждый бит есть результат независимого подбрасывания монеты. Взломать его значит найти правильный среди 2²⁵⁶ вариантов.
Насколько велико 2²⁵⁶? Несколько наглядных сравнений:
Итак, «математически не взламываем» означает точно: не абсолютно невозможно, а невозможно в пределах вычислительной мощности, которую допускает физика — это не «трудно», это «физически невозможно».
Квантовые компьютеры тоже не спасут: алгоритм Гровера вдвое сокращает поиск симметричных ключей: 256 бит → 2¹²⁸ попыток. Но 2¹²⁸ всё ещё превышает число атомов во Вселенной — квантовые компьютеры одинаково бессильны. AES-256-GCM кода — именно тот уровень, который противостоит квантовому поиску.
Почему человеческие пароли не годятся?
| Человеческий пароль | Код восстановления | |
|---|---|---|
| Источник энтропии | Ваша память — предсказуемо (частые слова, дни рождения, паттерны клавиатуры) | Генератор истинных случайных чисел |
| Фактическая энтропия | 12 случайных символов ≈ 78 бит; частые пароли часто < 30 бит | 256 бит |
| Стоимость взлома | 30 бит ≈ 10⁹ попыток, несколько часов на GPU | 2²⁵⁶ попыток, физически невозможно |
Разрыв между 30 и 256 битами — не 8×, а 2²²⁶ ≈ 10⁶⁸× — вот почему «сильный KDF (Argon2id) защищает человеческие пароли, но для 256-битного случайного ключа он лишь украшение»: коду восстановления не нужно замедление KDF — это уже ключ с полной энтропией.
Честная граница: «математически не взламываем» защищает только сам ключ. Что на самом деле побеждает код восстановления — никогда не перебор, а человеческое звено: сфотографированная бумажка, заметка на рутованном устройстве, отправленный себе скриншот в облако. Ключ, каким бы сильным он ни был, ничего не стоит после утечки. Железные правила: запишите на бумаге и спрячьте под замок / храните в менеджере паролей (тоже с сильным мастер-паролем) — никаких фото, никакого облака, никому не отправлять. Доли друзей — это фрагменты схемы Шамира; одна часть бесполезна, поэтому раздавать её безопасно.
Уровни шифрования хранения (зашифрованная камера, зашифрованные заметки и подобные инструменты), от слабого к сильному:
| Уровень | Файл | Безопасность | Новое устройство |
|---|---|---|---|
| Открытый текст | без шифрования | кто получил — тот прочитал | просто скопировать |
| Портативный | зашифрован, соль в файле | требуется пароль | ввести пароль |
| Соль отдельно (шифрование) | зашифрован, соль на устройстве | требуется пароль + соль устройства | требуется код восстановления |
| Обмен солью (самый сильный экспорт) | зашифрован, соль обменивается офлайн | пароль + соль, два фактора | требуется соль второй стороны |
Простое правило: открытый текст → портативный → соль отдельно, безопасность растёт, и хлопоты тоже. По умолчанию «следовать глобальному» подходит почти для всего; чем чувствительнее файл, тем выше выбираемый уровень.
Стандартный процесс: резервная копия на старом телефоне (локальная или облако WebDAV) → восстановление на новом → ввод пароля резервной копии.
Восстановление старых ключей на новом устройстве: резервная копия автоматически несёт конфигурацию восстановления — после восстановления введите код восстановления, мастер-ключ старого устройства восстанавливается, и все зашифрованные данные сразу читаемы.
Передача одного файла: такие инструменты, как карточки персонажей, поддерживают экспорт — портативный формат требует лишь пароль экспорта на новом устройстве; формат «офлайн-обмен солью» требует сначала обменяться солью (безопаснее, для чувствительных файлов).
Потому что резервная копия — не просто копия шифротекста. Копия должна позволить вам восстановить всё на новом устройстве, поэтому пакет содержит не только шифротекст, но и открытые структурные данные (некоторые данные инструментов) и ключевой материал (соль, контрольные суммы, конфигурацию восстановления) — всё это нужно снова заблокировать целиком собственным паролем резервной копии. Шифрование на устройстве защищает от «утечек файлов»; пароль резервной копии — от «утечек файлов копии»; два независимых слоя. Забыли пароль копии? Потребуется код восстановления, чтобы восстановить мастер-ключ и сделать копию заново.
Зашифрованные копии автоматически загружаются в ваше собственное облако / приватное облако (Jianguoyun, NextCloud, Synology или любой WebDAV-сервер) — без посредников. Файлы копий зашифрованы (.encbak), пароль живёт в Keystore, передача идёт по HTTPS. Ежедневные/еженедельные автоматические копии выполняются при запуске — даже потерянное устройство восстанавливается из облака.
Соль потеряна: копия с раздельной солью (файл не несёт соли) больше не может быть расшифрована — даже вами. Поэтому при включении приложение неоднократно напоминает: экспортируйте соль резервной копии и храните офлайн (флешка / распечатка / менеджер паролей).
Соль утекла: все копии с раздельной солью, созданные до утечки, скомпрометированы (необратимо — рассмотрите удаление старых копий из облака); после перегенерации соли новые копии автоматически используют новую соль и снова безопасны. Старые копии остаются восстанавливаемыми, пока старая соль лежит в библиотеке солей.
Если не хотите нести бремя хранения соли, подойдёт «портативная» копия по умолчанию — она несёт соль, восстанавливается на новом устройстве одним паролем и уже очень безопасна.
Нет. В ранней версии был серьёзный дефект: импорт внешних файлов перезаписывал существующие данные; исправлено в последующих версиях: когда на устройстве уже есть данные, внешнее открытие копии проходит через импорт слиянием после разблокировки (существующие + новые, дедупликация по id); только полностью пустое устройство (первое использование) делает импорт в один шаг. Пожалуйста, используйте последнюю версию.
Если это копия, экспортированная старой версией: фото внутри всё ещё зашифрованы ключами исходного устройства, которые целевое устройство расшифровать не может — вместо этого переэкспортируйте новой версией (новые экспорты перешифровывают фото паролем экспорта; на новом устройстве достаточно ввести пароль).
Если это новый экспорт: убедитесь, что введён пароль экспорта; формат «офлайн-обмен солью» дополнительно требует сначала импортировать соль отправителя.
Обе исторические проблемы исправлены: ① цель публикации раньше вливалась в стек задач этого приложения, вызывая «застревание на экране WeChat» — теперь публикация открывается в отдельной задаче, и возврат ведёт прямо в приложение; ② падения FileProvider на устройствах Huawei (из-за обфускации R8) роняли экспорт — исправлено сохранением org.xmlpull.v1. Если проблема остаётся, сообщите модель устройства и версию системы через обратную связь.
Зашифрованные экспорты требуют сильный пароль: не менее 8 символов, буквы и цифры, не только цифровой и не только буквенный — слабые пароли не подтверждаются. Поскольку в портативном формате соль едет с файлом, пароль — единственный ключ к файлу — чем сильнее пароль, тем безопаснее файл; в сочетании с экспортом «офлайн-обмен солью» даже утёкшие пароль + файл ничего не откроют.