Como usar o Android Keystore para armazenar senhas e outras informações confidenciais
LarLar > blog > Como usar o Android Keystore para armazenar senhas e outras informações confidenciais

Como usar o Android Keystore para armazenar senhas e outras informações confidenciais

Jun 03, 2024

Links afiliados no Android Authority podem nos render uma comissão. Saber mais.

Antes de começarmos a codificar, é útil entender um pouco sobre o Android Keystore e seus recursos. O Keystore não é usado diretamente para armazenar segredos de aplicativos, como senhas; no entanto, ele fornece um contêiner seguro, que pode ser usado por aplicativos para armazenar suas chaves privadas, de uma forma que é bastante difícil de ser recuperada por usuários e aplicativos mal-intencionados (não autorizados). .

Como o próprio nome sugere, um aplicativo pode armazenar várias chaves no Keystore, mas um aplicativo só pode visualizar e consultar suas próprias chaves. Idealmente, com o keystore, um aplicativo geraria/ou receberia um par de chaves privada/pública, que seria armazenado no keystore. A chave pública pode então ser usada para criptografar segredos do aplicativo, antes de ser armazenada nas pastas específicas do aplicativo, com a chave privada usada para descriptografar as mesmas informações quando necessário.

Embora o provedor Android Keystore tenha sido introduzido no nível 18 da API (Android 4.3), o próprio Keystore está disponível desde a API 1, restrito ao uso por sistemas VPN e WiFi.

O Keystore em si é criptografado usando o PIN/senha da tela de bloqueio do usuário, portanto, quando a tela do dispositivo está bloqueada, o Keystore fica indisponível. Lembre-se disso se você tiver um serviço em segundo plano que possa precisar acessar os segredos do seu aplicativo.

O layout principal do nosso aplicativo de exemplo é um ListView, com itens compostos por uma lista de todas as chaves (na verdade, os aliases/nomes das chaves) criadas pelo aplicativo. Isso é salvo como layout/activity_main.xml.

Cada item da lista contém um TextView representando o alias da chave, um botão para excluir a chave e botões para criptografar e descriptografar o texto. Este layout/list_item.xml em nosso projeto.

O cabeçalho List é adicionado ao ListView usando o método

Como acontece com qualquer atividade, começamos com o método onCreate(). A primeira coisa que fazemos é obter uma referência ao AndroidKeyStore e inicializá-lo usando:

Em seguida, chamamos nosso método refreshKeys() (discutido a seguir) para listar todas as chaves que nosso aplicativo armazenou no Keystore. Isso garante que todas as chaves no Keystore serão mostradas imediatamente quando o ListView for inicializado.

Para gerar um par de chaves Pública/Privada, precisamos de um objeto KeyPairGenerator. Obtemos uma instância do KeyPairGenerator configurada para usar o algoritmo RSA com o “AndroidKeyStore”. Chamar generateKeyPair() cria o novo par de chaves (chave privada e pública correspondente) e o adiciona ao Keystore.

A descriptografia é basicamente o processo de criptografia ao contrário. A descriptografia é feita usando a chave privada do par de chaves. Em seguida, inicializamos uma Cipher com o mesmo algoritmo de transformação usado para criptografia, mas definido como Cipher.DECRYPT_MODE. A string Base64 é decodificada em um byte[], que é então colocado em um ByteArrayInputStream. Em seguida, usamos um CipherInputStream para descriptografar os dados em um byte[]. Isso é então exibido como uma String.

O Android Keystore facilita a criação e o gerenciamento de chaves de aplicativos e fornece um cofre seguro e relativamente protegido para aplicativos armazenarem chaves de criptografia. É claro que a chave pública também pode ser enviada ao seu servidor, e a chave pública do servidor enviada aos seus aplicativos, para garantir comunicações seguras entre o seu aplicativo e o seu servidor. Como de costume, o código-fonte completo está disponível no github para uso como desejar. Para acréscimos, correções e/ou discussões, deixe um comentário abaixo, estamos ansiosos para ouvir você.