O esquema de assinatura do APK v3 vem com suporte para rotação de chaves

O APK Signature Scheme v3 foi identificado no Android Open Source Project e parece trazer suporte para rotação de chaves.

Se você é um desenvolvedor ou está familiarizado com a descompilação, modificação e/ou instalação de arquivos APK modificados, provavelmente está familiarizado com assinaturas de aplicativos. Simplificando, o Android exige que um aplicativo deve ser assinado com a mesma chave para que o sistema permita a atualização do aplicativo em questão. O Android verifica isso verificando a assinatura do APK.

Assinaturas APK são uma medida de segurança muito básica no Android, da qual falamos anteriormente. Basicamente, todas as assinaturas são exclusivas de um determinado desenvolvedor ou grupo de desenvolvedores, portanto, se a assinatura/certificado em um APK não for válido ou não corresponder ao aplicativo original, a instalação falhará, evitando assim a instalação de arquivos APK adulterados ou falsos em seu Android dispositivo. As chaves de assinatura também devem ser mantidas com segurança pelo desenvolvedor, pois são vitais para verificar e, eventualmente, enviar uma atualização do aplicativo. Felizmente, o esquema de assinatura para assinar APKs está recebendo outra revisão – v3 – que parece adicionar um recurso conveniente, mantendo altos padrões de segurança.


Esquema de assinatura APK v1 e v2

Não faz muito tempo que a versão atual do esquema de assinatura do APK, v2, foi lançado para desenvolvedores. Afinal, mal nos foi apresentado com o lançamento do Android 7.0 Nougat, no final de 2016. O uso do esquema de assinatura v2 em aplicativos Android 7.0+ foi altamente incentivado, pois trouxe uma série de patches essenciais e melhorias de segurança: enquanto a v1 assinou apenas o JAR, a v2 toma medidas adicionais para proteger a integridade do todo arquivo. Porém, os esquemas de assinatura não são compatíveis com versões anteriores, e o Android Marshmallow e versões anteriores exigem assinaturas v1 para aplicativos.

Processo de validação de APK. Fonte: Google.

A menos que você atenda especificamente a usuários do Nougat ou superior, o cenário ideal seria usar os dois esquemas de assinatura lado a lado, assinando primeiro com a v1 e depois renunciando à v2. Dessa forma, o Nougat e versões superiores reconhecerão a assinatura v2, enquanto o Marshmallow e versões inferiores reconhecerão a assinatura v1.

Usar apenas a versão 1, no entanto, é fortemente desencorajado devido a uma série de vulnerabilidades e outros problemas de segurança, sendo os mais notáveis a vulnerabilidade Janus, que permite que invasores ataquem e modifiquem APKs diretamente sem afetar as assinaturas. Aplicativos populares com atualizações pouco frequentes, como Instagram ou Snapchat, são assinados apenas com assinaturas v1, o que significa que são vulneráveis ​​a esses problemas.

Verificando as versões de assinatura APK de aplicativos populares de mídia social/pagamento.

Esquema de assinatura APK v3

O maior destaque da v3, que pretende ser uma revisão da v2, será suporte para rotação de chave. O esquema de assinatura v3 apresenta o APK Signer Lineage, que, segundo um dos commits, "contém um histórico de assinatura de certificados com cada ancestral atestando a validade de seu descendente. Cada descendente adicional representa uma nova identidade que pode ser usada para assinar um APK. Desta forma, a linhagem contém uma prova de rotação pela qual o APK que a contém pode demonstrar, para outros partes, sua capacidade de confiar em seu certificado de assinatura atual, como se fosse assinado por um de seus mais antigos uns."

A rotação de chaves é um ótimo recurso para desenvolvedores de várias maneiras. Para começar, isso pode ser útil para desenvolvedores em equipes que trabalham em um único aplicativo, para que os desenvolvedores não precisem compartilhar suas chaves de assinatura com a equipe. Como o aplicativo precisa da mesma assinatura exata para atualização, todos os aplicativos atualmente precisam ser compilados pelo mesmo desenvolvedor ou por um grupo de desenvolvedores trabalhando com a mesma chave, diminuindo a segurança (há mais chances de a chave ser roubada) e desacelerando o desenvolvimento.

Além disso, também pode ser útil no caso de um desenvolvedor ter sua chave de assinatura roubada/perdida, o que normalmente significaria que o aplicativo teria que ser recarregado na Play Store em um pacote diferente nome. Este não é um caso incomum, já que há muito tempo até o Google aparentemente perdeu a chave de assinatura do aplicativo Google Authenticator, o que os levou a republicá-lo com um nome de pacote diferente. Desde então, o Google fornece meios para armazenar com segurança suas chaves de assinatura na nuvem com Assinatura de aplicativos do Google Play, mas a rotação de chaves permitiria que você continuasse atualizando seu aplicativo no caso de uma hipotética bagunça.

Quando será lançado?

Embora você possa estar ansioso para experimentá-lo para maior comodidade, o esquema de assinatura v3 foi localizado flutuando no AOSP Site Gerrit Code Review, e os próprios commits não foram mesclados no branch principal no momento, então ainda não está pronto ainda. Devemos esperar que o esquema de assinatura v3 chegue às mãos dos desenvolvedores com o próximo lançamento do Android P se a versão anterior v2 com Android Nougat nos disser alguma coisa.

Devemos também observar que a rotação de chaves provavelmente não é a única diferença em relação à v2. O esquema de assinatura do APK v3 ainda é um trabalho em andamento, portanto veremos as melhorias reais do esquema de assinatura v3 quando a documentação completa for lançada no futuro.