O Google está comprometido em promover a equidade racial para as comunidades negras. Veja como.
Esta página foi traduzida pela API Cloud Translation.
Switch to English

Assinatura do aplicativo

A assinatura do aplicativo permite que os desenvolvedores identifiquem o autor do aplicativo e atualizem o aplicativo sem criar interfaces e permissões complicadas. Todo aplicativo executado na plataforma Android deve ser assinado pelo desenvolvedor . Os aplicativos que tentarem 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 supera a confiança que o Google tem com o desenvolvedor e a confiança que o desenvolvedor tem com o aplicativo. Os desenvolvedores sabem que seu aplicativo é fornecido, sem modificações, para o dispositivo Android; e os desenvolvedores podem ser responsabilizados pelo comportamento de seus aplicativos.

No Android, a assinatura do aplicativo é o primeiro passo para colocar um aplicativo em sua caixa de proteção de aplicativos. O certificado do aplicativo assinado define qual ID do usuário está associado a qual aplicativo; aplicativos diferentes são executados sob diferentes IDs de usuário. A assinatura do aplicativo garante que um aplicativo não possa acessar nenhum outro aplicativo, exceto por meio do 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 nesse 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 terá a opção de especificar no manifesto que compartilhará um UID com o outro da mesma forma 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. O Android atualmente não executa a verificação da CA para certificados de aplicativo.

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, mantendo UIDs e caixas de proteção de aplicativos distintas. Um relacionamento mais próximo com uma Sandbox de Aplicativo compartilhada é permitido por meio do recurso UID compartilhado, no qual dois ou mais aplicativos assinados com a mesma chave de desenvolvedor podem declarar um UID compartilhado em seu manifesto.

Esquemas de assinatura do APK

O Android suporta três esquemas de assinatura de aplicativos:

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

Assinatura JAR (esquema v1)

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

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

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

Os dispositivos com Android 7.0 e posterior suportam o esquema de assinatura APK v2 (esquema v2) e posterior. (O esquema da v2 foi atualizado para a v3 no Android P para incluir informações adicionais no bloco de assinatura, mas funciona da mesma forma.) O conteúdo do APK é dividido em hash e assinado e, em seguida, o bloco de assinatura do APK resultante é inserido no APK. Para detalhes sobre a aplicação do esquema v2 + a um aplicativo, consulte APK Esquema de assinatura v2 .

Durante a validação, o esquema v2 + trata o arquivo APK como um blob e executa a verificação de assinaturas em todo o arquivo. Qualquer modificação no APK, incluindo modificações de metadados ZIP, invalida a assinatura do APK. Essa forma de verificação do 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 do APK

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

O hash de arquivo inteiro do APK é verificado com a assinatura v2 + armazenada no bloco de assinatura do APK. O hash abrange tudo, exceto o APK Signing Block, 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 + removida também são rejeitados, porque a assinatura v1 especifica que o APK foi assinado com v2, o que faz com que o Android 7.0 e mais recente se recusem a verificar APKs usando suas assinaturas v1.

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