Google is committed to advancing racial equity for Black communities. See how.
Эта страница переведена с помощью 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.