Контрольная сумма сопоставляет байты с эталоном. Подпись связывает целостность с ключом. Ни одна из них сама по себе не доказывает безопасность программы.
Перед установкой Android APK разграничьте три проверки: Соответствует ли этот файл ожидаемому выпуску? Подписан ли он ожидаемым ключом? Могут ли независимые участники воспроизвести его из заявленного исходного кода? Контрольная сумма SHA-256, подпись APK и воспроизводимая сборка отвечают на эти вопросы по-разному.
Ни одна из этих проверок сама по себе не определяет, является ли программа вредоносной. Даже корректно подписанная и воспроизводимая программа может содержать уязвимость или намеренно вредоносное поведение.
Что устанавливает каждый метод проверки
| Проверка | Полезный результат | Важное ограничение |
|---|---|---|
| Хеш файла SHA-256 | Ваши байты соответствуют конкретному доверенному хешу | Злоумышленник, заменивший и файл, и хеш, может свести эту проверку на нет |
| Проверка подписи APK | Подпись пакета проходит проверку с использованием его сертификата подписи | Нужно установить, какой ключ подписи ожидается; одна лишь корректность подписи не подтверждает личность издателя |
| Сравнение воспроизводимой сборки | Указанный артефакт можно воссоздать из документированных исходных данных | Соответствие исходного кода и двоичного файла не доказывает безопасность исходного кода |
| Анализ безопасности | Были оценены конкретные проблемы проектирования или реализации | Важны его охват, версия, выводы и нерешённые проблемы |
Android требует подписи APK для установки и обновления. При использовании Play App Signing Google может управлять ключом подписи приложения и создавать APK для распространения из пакета app bundle. Это документированные схемы доверия, а не доказательство того, что произвольные посредники могут незаметно изменять пакет, сохраняя корректность его подписи. Руководство Android по подписыванию приложений.
Шаг 1: определите точный артефакт
Запишите версию приложения, канал выпуска, имя файла и предназначенный вариант платформы. Используйте официальную страницу распространения издателя, а не контрольную сумму, скопированную из того же непрошеного сообщения, в котором вам прислали APK.
APK, скачанный напрямую у издателя, может отличаться от APK, созданного магазином приложений для конкретного устройства. Различия в версиях, архитектурах, упаковке или схемах подписывания могут закономерно приводить к разным хешам файлов. Сначала убедитесь, что сравниваете однотипные артефакты, и лишь затем рассматривайте несовпадение как признак подмены.
Практический вопрос таков: Откуда взялось ожидаемое значение и почему я доверяю этому источнику? Вычисление хеша без подключения к сети не решает проблему доверия к эталонному хешу, полученному через интернет.
Шаг 2: вычислите SHA-256 локально
Замените messenger.apk именем скачанного файла. Эти примеры читают файл, но не устанавливают его.
Linux:
sha256sum messenger.apk
macOS:
shasum -a 256 messenger.apk
Командная строка Windows:
certutil -hashfile messenger.apk SHA256
Сравнивайте хеш целиком, игнорируя только пробелы, используемые при отображении, и регистр букв. Не ограничивайтесь первыми или последними несколькими символами. Сохраняйте ожидаемый хеш вместе с информацией о выпуске и версии, чтобы сравнение можно было повторить.
Если значения различаются, остановитесь до установки. Проверьте артефакт и версию, при необходимости скачайте файл заново из доверенного источника и уточните у издателя причину необъяснённого несовпадения. Не «исправляйте» ожидаемую контрольную сумму, подгоняя её под файл, который оказался у вас.
Шаг 3: проверьте подпись APK
Для пользователей Android SDK Build Tools Google описывает проверку подписи и вывод сведений о сертификате в документации apksigner:
apksigner verify --verbose --print-certs messenger.apk
Проверка должна завершиться успешно для платформ, поддерживаемых этим APK. Сравните сведения о сертификате подписанта с доверенной записью о выпуске или документированной издателем историей смены ключей подписи. Слово «проверено» не делает подпись неизвестным ключом заслуживающей доверия. Законная смена ключа подписи тоже требует подтверждений, а не указания игнорировать несовпадение.
Хеш SHA-256 файла APK и отпечаток SHA-256 его сертификата подписи — разные значения. Не сравнивайте одно с другим.
Шаг 4: найдите свидетельства воспроизводимости сборки
Заявление о воспроизводимой сборке требует указания конкретной ревизии исходного кода, среды сборки, инструкций и целевого артефакта. Независимые участники должны иметь возможность воссоздать этот артефакт и сравнить результат. Определение проекта Reproducible Builds включает эти исходные данные в само утверждение о воспроизводимости.
Для мессенджера полезные свидетельства о выпуске включают тег исходного кода, зафиксированные версии зависимостей и инструментов сборки, инструкции по сборке и результаты независимых сравнений. Уточните, что именно сравнивалось: неподписанный артефакт, подписанный APK или отдельные части содержимого пакета. Не делайте вывод о воспроизводимости только потому, что опубликованы исходный код и хеш скачиваемого файла.
Воспроизводимость укрепляет связь между проверенным исходным кодом и распространяемым кодом. Она не превращает непроверенную реализацию в безопасный протокол и не доказывает, что работающий телефон не скомпрометирован.
Какую роль играет Proof Lab от Livara
Proof Lab от Livara позволяет локально вычислить хеш APK и сравнить его с опубликованным хешем. Его криптографические демонстрации имеют более узкий охват, чем аудит всего протокола обмена сообщениями. Используйте проверку хеша по её заявленному назначению, вместе с ожидаемыми сведениями о выпуске и подписи; не считайте её независимым доказательством воспроизводимости сборок или отсутствия бэкдоров.
В модели угроз прямо отмечено ограничение для случая, когда можно заменить и APK, и отображаемый хеш. Поэтому происхождение эталонного значения не менее важно, чем правильность самого вычисления.
Часто задаваемые вопросы
Доказывает ли совпадение контрольной суммы безопасность APK?
Нет. Оно устанавливает совпадение с эталонным хешем при условии, что эталон заслуживает доверия и выполняются свойства безопасности хеш-функции. Оно не оценивает поведение программы.
Нужна ли проверка подписи, если контрольная сумма совпадает?
Да. Эти проверки дают разные свидетельства. Подпись связывает целостность пакета с ключом, а хеш файла идентифицирует конкретную последовательность байтов.
Должен ли файл из магазина совпадать по хешу с APK на сайте?
Только если предполагается, что это один и тот же артефакт. Сначала проверьте канал выпуска, версию и упаковку. Необъяснённое несовпадение требует расследования, а не автоматического обвинения или автоматического одобрения.
Могут ли эти проверки обнаружить шпионское ПО, уже установленное на телефоне?
Нет. Они оценивают установочный артефакт, а не все компоненты текущего состояния работающего устройства.



