MASTG-KNOW-0045: Importação Segura de Chaves para o Keystore
O Android 9 (nível de API 28) adiciona a capacidade de importar chaves com segurança para o AndroidKeystore. Primeiro, o AndroidKeystore gera um par de chaves usando PURPOSE_WRAP_KEY, que também deve ser protegido com um certificado de atestação. Esse par tem como objetivo proteger as chaves que estão sendo importadas para o AndroidKeystore. As chaves criptografadas são geradas como uma mensagem codificada em ASN.1 no formato SecureKeyWrapper, que também contém uma descrição das formas como a chave importada pode ser usada. As chaves são então descriptografadas dentro do hardware do AndroidKeystore pertencente ao dispositivo específico que gerou a chave de encapsulamento, de modo que nunca apareçam como texto plano na memória principal do dispositivo.

Exemplo em Java:
KeyDescription ::= SEQUENCE {
keyFormat INTEGER,
authorizationList AuthorizationList
}
SecureKeyWrapper ::= SEQUENCE {
wrapperFormatVersion INTEGER,
encryptedTransportKey OCTET_STRING,
initializationVector OCTET_STRING,
keyDescription KeyDescription,
secureKey OCTET_STRING,
tag OCTET_STRING
}
O código acima apresenta os diferentes parâmetros a serem definidos ao gerar as chaves criptografadas no formato SecureKeyWrapper. Consulte a documentação do Android sobre WrappedKeyEntry para mais detalhes.
Ao definir a AuthorizationList da KeyDescription, os seguintes parâmetros afetarão a segurança das chaves criptografadas:
- O parâmetro
algorithmespecifica o algoritmo criptográfico com o qual a chave é usada - O parâmetro
keySizeespecifica o tamanho, em bits, da chave, medido da forma normal para o algoritmo da chave - O parâmetro
digestespecifica os algoritmos de digest que podem ser usados com a chave para realizar operações de assinatura e verificação