Google стремится продвигать расовую справедливость для черных сообществ. Смотри как.
Эта страница была переведа с помощью Cloud Translation API.
Switch to English

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

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

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

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

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

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

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

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

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

  • Схема v1: на основе подписи JAR
  • Схема v2: APK Signature Scheme v2 , которая была представлена ​​в Android 7.0.
  • Схема v3: APK Signature Scheme v3 , которая была представлена ​​в Android 9.

Для максимальной совместимости подпишите приложения со всеми схемами, сначала с 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 Signature Scheme v2.

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

Устройства под управлением Android 7.0 и более поздних версий поддерживают схему подписи APK v2 (схема v2) и более поздние. (Схема v2 была обновлена ​​до v3 в Android P, чтобы включить дополнительную информацию в блок подписи, но в остальном работает аналогично.) Содержимое APK хэшируется и подписывается, после чего полученный в результате блок подписи APK вставляется в APK. Для получения подробной информации о применении схемы v2 + к приложению см. APK Signature Scheme 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.