Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

Подписание приложения

Подпись приложений позволяет разработчикам идентифицировать автора приложения и обновлять свое приложение без создания сложных интерфейсов и разрешений. Каждое приложение, запускаемое на платформе Android, должно быть подписано разработчиком . Приложения, которые пытаются установить без подписи, будут отклонены Google Play или установщиком пакетов на устройстве Android.

В Google Play подписывание приложений сводит на нет доверие Google к разработчику и доверие, которое разработчик испытывает к своему приложению. Разработчики знают, что их приложение предоставляется на устройстве Android без изменений; и разработчики могут нести ответственность за поведение своего приложения.

В Android подписание приложения - это первый шаг к помещению приложения в его Application Sandbox. Подписанный сертификат приложения определяет, какой идентификатор пользователя связан с каким приложением; разные приложения работают под разными идентификаторами пользователей. Подпись приложений гарантирует, что одно приложение не сможет получить доступ к любому другому приложению, кроме как через четко определенный IPC.

Когда приложение (файл APK) устанавливается на устройство Android, диспетчер пакетов проверяет, правильно ли подписан APK с помощью сертификата, включенного в этот APK. Если сертификат (или, точнее, открытый ключ в сертификате) совпадает с ключом, используемым для подписи любого другого APK на устройстве, новый APK имеет возможность указать в манифесте, что он будет делиться UID с другим аналогичным образом. -подписанные APK.

Приложения могут быть подписаны третьей стороной (OEM, оператор, альтернативный рынок) или самоподписаны. Android обеспечивает подписывание кода с использованием самозаверяющих сертификатов, которые разработчики могут создавать без внешней помощи или разрешения. Заявки не обязательно должны быть подписаны центральным органом. Android в настоящее время не выполняет проверку CA для сертификатов приложений.

Приложения также могут объявлять разрешения безопасности на уровне защиты подписи, ограничивая доступ только к приложениям, подписанным одним и тем же ключом, сохраняя при этом различные идентификаторы UID и песочницы приложений. Более тесная связь с общей изолированной программной средой приложения разрешена через функцию общего UID, при которой два или более приложений, подписанных одним и тем же ключом разработчика, могут объявить общий UID в своем манифесте.

Схемы подписи APK

Android поддерживает три схемы подписи приложений:

Для максимальной совместимости подписывайте приложения по всем схемам, сначала с помощью v1, затем v2, а затем v3. Устройства Android 7.0+ и новее устанавливают приложения, подписанные схемами v2 +, быстрее, чем те, которые подписаны только схемой v1. Старые платформы Android игнорируют подписи v2 + и поэтому нуждаются в приложениях, которые содержат подписи v1.

Подпись JAR (схема v1)

Подписание APK было частью Android с самого начала. Он основан на подписанном JAR . Подробнее об использовании этой схемы см. В документации Android Studio о подписи приложения .

Подписи v1 не защищают некоторые части APK, например метаданные ZIP. Верификатор APK должен обработать множество ненадежных (еще не проверенных) структур данных, а затем удалить данные, не охваченные подписями. Это предлагает значительную поверхность для атаки. Более того, верификатор APK должен распаковать все сжатые записи, что отнимает больше времени и памяти. Для решения этих проблем в Android 7.0 представлена ​​схема подписи APK v2.

Схема подписи APK v2 и v3 (v2 + схема)

Устройства под управлением Android 7.0 и более поздних версий поддерживают схему подписи APK v2 (схема v2) и более поздних версий. (Схема v2 была обновлена ​​до версии v3 в Android 9, чтобы включить дополнительную информацию в блок подписи, но в остальном работает так же.) Содержимое APK хэшируется и подписывается, а затем полученный блок подписи APK вставляется в APK. Дополнительные сведения о применении схемы v2 + к приложению см. В разделе Схема подписи APK v2 .

Во время проверки схема v2 + обрабатывает файл APK как большой двоичный объект и выполняет проверку подписи для всего файла. Любая модификация APK, включая модификации метаданных ZIP, делает подпись APK недействительной. Эта форма проверки APK выполняется значительно быстрее и позволяет обнаруживать больше классов неавторизованных модификаций.

Новый формат имеет обратную совместимость, поэтому APK-файлы, подписанные с помощью нового формата подписи, могут быть установлены на старых устройствах Android (которые просто игнорируют дополнительные данные, добавленные в APK), если эти APK-файлы также подписаны v1.

Процесс проверки подписи APK

Рисунок 1. Процесс проверки подписи APK

Хэш всего файла APK проверяется на соответствие подписи v2 +, хранящейся в блоке подписи APK. Хеш охватывает все, кроме блока подписи APK, который содержит подпись v2 +. Любая модификация APK за пределами блока подписи APK делает недействительной подпись APK v2 +. APK-файлы с удаленной подписью v2 + также отклоняются, потому что их подпись v1 указывает, что APK был подписан v2, что заставляет Android 7.0 и более новые версии отказываться проверять APK с помощью своих подписей v1.

Дополнительные сведения о процессе проверки подписи APK см. В разделе « Проверка» схемы подписи APK v2.