Google is committed to advancing racial equity for Black communities. See how.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Assinatura de aplicativo

A assinatura do aplicativo permite que os desenvolvedores identifiquem o autor do aplicativo e atualizem seu aplicativo sem criar interfaces e permissões complicadas. Cada aplicativo executado na plataforma Android deve ser assinado pelo desenvolvedor . Os aplicativos que tentam instalar sem serem assinados serão rejeitados pelo Google Play ou pelo instalador do pacote no dispositivo Android.

No Google Play, a assinatura do aplicativo une a confiança que o Google tem com o desenvolvedor e a confiança que o desenvolvedor tem com seu aplicativo. Os desenvolvedores sabem que seu aplicativo é fornecido, sem modificações, ao dispositivo Android; e os desenvolvedores podem ser responsabilizados pelo comportamento de seus aplicativos.

No Android, a assinatura do aplicativo é a primeira etapa para colocar um aplicativo em seu Application Sandbox. O certificado do aplicativo assinado define qual ID do usuário está associado a qual aplicativo; diferentes aplicativos são executados em diferentes IDs de usuário. A assinatura do aplicativo garante que um aplicativo não possa acessar qualquer outro aplicativo, exceto por meio de um IPC bem definido.

Quando um aplicativo (arquivo APK) é instalado em um dispositivo Android, o Gerenciador de Pacotes verifica se o APK foi assinado corretamente com o certificado incluído naquele APK. Se o certificado (ou, mais precisamente, a chave pública no certificado) corresponder à chave usada para assinar qualquer outro APK no dispositivo, o novo APK tem a opção de especificar no manifesto que compartilhará um UID com o outro de forma semelhante APKs assinados.

Os aplicativos podem ser assinados por terceiros (OEM, operadora, mercado alternativo) ou autoassinados. O Android fornece assinatura de código usando certificados autoassinados que os desenvolvedores podem gerar sem assistência ou permissão externa. Os pedidos não precisam ser assinados por uma autoridade central. Atualmente, o Android não executa verificação de CA para certificados de aplicativos.

Os aplicativos também podem declarar permissões de segurança no nível de proteção de assinatura, restringindo o acesso apenas a aplicativos assinados com a mesma chave, enquanto mantém UIDs e sandboxes de aplicativos distintos. Um relacionamento mais próximo com um Application Sandbox compartilhado é permitido por meio do recurso UID compartilhado, onde dois ou mais aplicativos assinados com a mesma chave de desenvolvedor podem declarar um UID compartilhado em seu manifesto.

Esquemas de assinatura de APK

O Android oferece suporte a três esquemas de assinatura de aplicativo:

Para obter compatibilidade máxima, assine aplicativos com todos os esquemas, primeiro com v1, depois v2 e, em seguida, v3. Dispositivos Android 7.0+ e mais recentes instalam aplicativos assinados com esquemas v2 + mais rapidamente do que aqueles assinados apenas com esquema v1. As plataformas Android mais antigas ignoram as assinaturas v2 + e, portanto, precisam que os aplicativos contenham assinaturas v1.

Assinatura JAR (esquema v1)

A assinatura do APK faz parte do Android desde o início. É baseado em JAR assinado . Para obter detalhes sobre como usar este esquema, consulte a documentação do Android Studio em Assinando seu aplicativo .

As assinaturas v1 não protegem algumas partes do APK, como metadados ZIP. O verificador de APK precisa processar muitas estruturas de dados não confiáveis ​​(ainda não verificadas) e, em seguida, descartar os dados não cobertos pelas assinaturas. Isso oferece uma superfície de ataque considerável. Além disso, o verificador de APK deve descompactar todas as entradas compactadas, consumindo mais tempo e memória. Para resolver esses problemas, o Android 7.0 introduziu o APK Signature Scheme v2.

Esquema de assinatura APK v2 e v3 (esquema v2 +)

Os dispositivos que executam o Android 7.0 e posterior são compatíveis com o esquema de assinatura APK v2 (esquema v2) e posterior. (O esquema v2 foi atualizado para v3 no Android 9 para incluir informações adicionais no bloco de assinatura, mas de outra forma funciona da mesma forma.) O conteúdo do APK é hash e assinado, então o APK Signing Block resultante é inserido no APK. Para obter detalhes sobre como aplicar o esquema v2 + a um aplicativo, consulte Esquema de assinatura de APK v2 .

Durante a validação, o esquema v2 + trata o arquivo APK como um blob e executa a verificação de assinatura em todo o arquivo. Qualquer modificação no APK, incluindo modificações nos metadados ZIP, invalida a assinatura do APK. Essa forma de verificação de APK é substancialmente mais rápida e permite a detecção de mais classes de modificações não autorizadas.

O novo formato é compatível com versões anteriores, portanto, os APKs assinados com o novo formato de assinatura podem ser instalados em dispositivos Android mais antigos (que simplesmente ignoram os dados extras adicionados ao APK), desde que esses APKs também tenham assinatura v1.

Processo de verificação de assinatura de APK

Figura 1. Processo de verificação de assinatura de APK

O hash do arquivo inteiro do APK é verificado em relação à assinatura v2 + armazenada no bloco de assinatura do APK. O hash cobre tudo, exceto o bloco de assinatura do APK, que contém a assinatura v2 +. Qualquer modificação no APK fora do bloco de assinatura do APK invalida a assinatura v2 + do APK. Os APKs com assinatura v2 + eliminada também são rejeitados, porque sua assinatura v1 especifica que o APK foi assinado v2, o que faz com que o Android 7.0 e mais recentes se recusem a verificar APKs usando suas assinaturas v1.

Para obter detalhes sobre o processo de verificação da assinatura do APK, consulte a seção Verificação do Esquema de assinatura do APK v2.