MASTG-TEST-0015: Teste dos Propósitos das Chaves
Visão Geral¶
Análise Estática¶
Identifique todas as instâncias em que a criptografia é utilizada. Você pode procurar por:
- classes
Cipher,Mac,MessageDigest,Signature - interfaces
Key,PrivateKey,PublicKey,SecretKey - funções
getInstance,generateKey - exceções
KeyStoreException,CertificateException,NoSuchAlgorithmException - classes que importam
java.security.*,javax.crypto.*,android.security.*,android.security.keystore.*
Para cada instância identificada, determine sua finalidade e seu tipo. Ela pode ser usada:
- para criptografia/descriptografia - para garantir a confidencialidade dos dados
- para assinatura/verificação - para garantir a integridade dos dados (bem como a responsabilidade em alguns casos)
- para manutenção - para proteger chaves durante determinadas operações sensíveis (como ao serem importadas para o KeyStore)
Além disso, você deve identificar a lógica de negócio que utiliza as instâncias identificadas de criptografia.
Durante a verificação, as seguintes verificações devem ser realizadas:
- todas as chaves são utilizadas de acordo com a finalidade definida durante sua criação? (é relevante para chaves do KeyStore, que podem ter KeyProperties definidas)
- para chaves assimétricas, a chave privada está sendo usada exclusivamente para assinatura e a chave pública para criptografia?
- chaves simétricas são usadas para múltiplos propósitos? Uma nova chave simétrica deve ser gerada se for usada em um contexto diferente.
- a criptografia está sendo utilizada de acordo com sua finalidade de negócio?
Análise Dinâmica¶
Você pode usar a técnica Rastreamento de Métodos em métodos criptográficos para determinar valores de entrada/saída, como as chaves que estão sendo utilizadas. Monitore o acesso ao sistema de arquivos enquanto operações criptográficas são realizadas para avaliar onde o material da chave é escrito ou lido. Por exemplo, monitore o sistema de arquivos usando o API monitor da ferramenta RMS Runtime Mobile Security.