Tag di autorizzazione

L'API KeyMint (in precedenza Keymaster) fa ampio uso di tag di autorizzazione, ovvero coppie nome-valore. Ogni tag possibile ha:

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

Ad esempio, il tag con nome Tag::BLOCK_MODE ha un valore enumerato di base 4 e un indicatore di tipo TagType::ENUM_REP che indica che il valore associato è un enumerato 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 dell'HMAC richiesta.
  • Come caratteristiche chiave, i valori permanentemente legati a una determinata chiave (ovvero inclusi nel blob della chiave), ad esempio Tag::EC_CURVE indica la curva ellittica a cui è destinata una chiave. A ogni caratteristica principale è associato un livello di sicurezza che indica la parte del sistema che controlla l'attributo:
    • Nell'hardware sicuro viene applicata una caratteristica chiave con livello di sicurezza TRUSTED_ENVIRONMENT o STRONGBOX.
    • Una caratteristica principale con livello di sicurezza SOFTWARE o KEYSTORE viene applicata solo dal servizio di sistema keystore2 (e quindi non è resiliente al compromesso del sistema operativo).

Molti tag fungono da caratteristiche chiave e 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 parametro Tag::BLOCK_MODE per una chiave AES potrebbe includere le modalità ECB, CBC e CTR.
  • Una richiesta begin() include quindi un valore parametro specifico per l'operazione, ad esempio:
    • begin() ha un parametro scopo esplicito che deve corrispondere a uno dei valori Tag::PURPOSE delle caratteristiche chiave.
    • 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 della chiave.

  • Alcuni dei tag fungono da parametri per l'operazione di generazione della chiave 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 vengono incapsulati nel keyblob restituito in modo da essere associati definitivamente alla chiave.

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