Die KeyMint API (früher Keymaster) verwendet in großem Umfang Autorisierungstags, die Name-Wert-Paare sind. Jedes mögliche Tag hat:
- Ein Enum-Name mit zugehörigem Wert
- Ein zugehöriger Typ (z. B. Ganzzahl, Byte, Datum, Enum), der angibt, ob mehrere Werte zulässig sind
Das Tag mit dem Namen Tag::BLOCK_MODE hat beispielsweise den Basis-Enum-Wert 4 und den TagType::ENUM_REP-Typmarker, der angibt, dass der zugehörige Wert ein wiederholbares Enum ist (in diesem Fall BlockMode).
Tags haben in der API eine doppelte Funktion:
- Als Parameter für einen Vorgang, der für die API ausgeführt wird, z. B. die Tag::MAC_LENGTHfür einen HMAC-Signierungsvorgang, gibt die angeforderte HMAC-Länge an.
- Als Schlüsselmerkmale werden Werte bezeichnet, die dauerhaft an einen bestimmten Schlüssel gebunden sind (d. h. im Schlüssel-Blob enthalten sind). Das Tag::EC_CURVEgibt beispielsweise an, für welche elliptische Kurve ein Schlüssel bestimmt ist. Jedes Schlüsselmerkmal ist einer Sicherheitsstufe zugeordnet, die angibt, welcher Teil des Systems das Attribut überwacht:- Ein wichtiges Merkmal mit dem Sicherheitsniveau TRUSTED_ENVIRONMENToderSTRONGBOXwird in der sicheren Hardware erzwungen.
- Ein wichtiges Merkmal der Sicherheitsstufe SOFTWAREoderKEYSTOREist, dass es nur vom Systemdienstkeystore2erzwungen wird. Daher ist ein solches Merkmal nicht gegen eine Kompromittierung des Betriebssystems geschützt.
 
- Ein wichtiges Merkmal mit dem Sicherheitsniveau 
Viele Tags fungieren sowohl als wichtige Merkmale als auch als Parameter:
- Die wichtigsten Merkmale geben die zulässigen Parameter für einen Schlüssel an, z. B.:- Die Tag::PURPOSEeines ECDSA-Schlüssels kann sowohlSIGNals auchAGREE_KEYenthalten.
- Die Tag::BLOCK_MODEfür einen AES-Schlüssel kann die Modi ECB, CBC und CTR enthalten.
 
- Die 
- Eine begin()-Anfrage enthält dann einen bestimmten Parameterwert für den Vorgang, z. B.:- begin()hat einen expliziten Parameter für den Zweck, der mit einem der- Tag::PURPOSE-Werte der wichtigsten Merkmale übereinstimmen muss.
- begin()für einen AES-Vorgang muss einen einzelnen Wert für- Tag::BLOCK_MODEim Feld- paramsenthalten, der mit einem der Werte in den Schlüsselmerkmalen übereinstimmen muss.
 
Diese Doppelfunktion ist besonders relevant für die Erfassung von Tags, die als keyParams bei einem Schlüsselgenerierungs- oder Importvorgang übergeben werden.
- Einige der Tags fungieren als Parameter für den Vorgang zur Schlüsselgenerierung. Das Tag Tag::CERTIFICATE_SUBJECTwirkt sich beispielsweise nur auf die Generierung asymmetrischer Schlüssel aus, indem es ein Feld im zurückgegebenen X.509-Zertifikat steuert.
- Andere Tags werden als Schlüsselmerkmale an den neu generierten Schlüssel gebunden und im zurückgegebenen Keyblob gekapselt, sodass sie dauerhaft mit dem Schlüssel verknüpft sind.
Detaillierte Informationen zu Tag-Werten finden Sie in den folgenden HAL-Spezifikationen:
- KeyMint: Alle Tags sind im relevanten Android-Release-Branch in Tag.aidldefiniert.
- Keymaster: Tags werden in platform/hardware/interfaces/keymaster/keymaster-version/types.halfür die jeweiligekeymaster-versiondefiniert, z. B.3.0/types.halfür Keymaster 3 und4.0/types.halfür Keymaster 4. Für Keymaster 2 und niedriger werden Tags inplatform/hardware/libhardware/include/hardware/keymaster_defs.hdefiniert.