Tag di autorizzazione

L'API KeyMint (in precedenza Keymaster) utilizza ampiamente i tag di autorizzazione, che sono coppie nome-valore. Ogni tag possibile ha:

  • Un nome enum con un valore associato
  • Un tipo associato (ad esempio, numero intero, byte, data, enum), che include un'indicazione che specifica se sono consentiti più valori

Ad esempio, il tag con nome Tag::BLOCK_MODE ha un valore enum di base pari a 4 e un marcatore di tipo TagType::ENUM_REP che indica che il valore associato è un enum ripetibile (in questo caso, BlockMode).

I tag svolgono una doppia funzione nell'API:

  • Come parametri per un'operazione eseguita sull'API, ad esempio Tag::MAC_LENGTH in un'operazione di firma HMAC indica la lunghezza HMAC richiesta.
  • Come caratteristiche chiave, valori associati in modo permanente a una determinata chiave (ovvero inclusi nel blob della chiave), ad esempio, Tag::EC_CURVE indica a quale curva ellittica è destinata una chiave. Ogni caratteristica chiave è associata a un livello di sicurezza che indica quale parte del sistema controlla l'attributo:
    • Una caratteristica fondamentale con livello di sicurezza TRUSTED_ENVIRONMENT o STRONGBOX viene applicata nell'hardware sicuro.
    • Una caratteristica chiave con livello di sicurezza SOFTWARE o KEYSTORE viene applicata solo dal servizio di sistema keystore2 (e quindi una caratteristica di questo tipo non è resiliente alla compromissione del sistema operativo).

Molti tag fungono sia da caratteristiche chiave che da parametri:

  • Le caratteristiche chiave indicano l'insieme di parametri consentiti per una chiave, ad esempio:
    • Il Tag::PURPOSE di una chiave ECDSA potrebbe includere sia SIGN sia AGREE_KEY.
    • Il Tag::BLOCK_MODE per una chiave AES può includere le modalità ECB, CBC e CTR.
  • Una richiesta begin() include quindi un valore di parametro specifico per l'operazione, ad esempio:
    • begin() ha un parametro di scopo esplicito che deve corrispondere a uno dei valori delle caratteristiche chiave Tag::PURPOSE.
    • begin() per un'operazione AES deve includere un singolo valore per Tag::BLOCK_MODE nel campo params, che deve corrispondere a uno dei valori nelle caratteristiche della chiave.

Questa doppia funzione è particolarmente pertinente per la raccolta dei tag passati come keyParams in un'operazione di generazione o importazione di chiavi.

  • Alcuni tag fungono da parametri per l'operazione di generazione delle chiavi stessa. Ad esempio, il tag Tag::CERTIFICATE_SUBJECT influisce solo sul processo di generazione delle chiavi (asimmetriche), controllando un campo nel certificato X.509 restituito.
  • Gli altri tag sono associati alla chiave appena generata come caratteristiche della chiave e sono incapsulati nel keyblob restituito in modo che siano associati in modo permanente alla chiave.

Informazioni dettagliate sui valori dei tag sono disponibili nelle seguenti specifiche dell'interfaccia HAL: