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.

Importação segura de chaves para o Keystore

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 algorithm especifica o algoritmo criptográfico com o qual a chave é usada
  • O parâmetro keySize especifica o tamanho, em bits, da chave, medido da forma normal para o algoritmo da chave
  • O parâmetro digest especifica os algoritmos de digest que podem ser usados com a chave para realizar operações de assinatura e verificação