Autorisierungs-Tags

Die KeyMint API (früher Keymaster API) verwendet häufig Autorisierungs-Tags, also Namens-/Wertpaare. Jedes mögliche Tag hat:

  • Ein Enum-Name mit zugehörigem Wert
  • Ein zugeordneter Typ (z. B. „integer“, „bytes“, „date“, „enum“), der angibt, ob mehrere Werte zulässig sind

Das Tag mit dem Namen Tag::BLOCK_MODE hat beispielsweise den Basisenumwert 4 und die Typmarkierung TagType::ENUM_REP, die angibt, dass der zugehörige Wert ein wiederholbares Enum ist (in diesem Fall BlockMode).

Tags haben in der API zwei Funktionen:

  • Als Parameter für einen Vorgang, der in der API ausgeführt wird, gibt beispielsweise Tag::MAC_LENGTH bei einem HMAC-Signaturvorgang 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). Beispielsweise gibt Tag::EC_CURVE an, für welche elliptische Kurve ein Schlüssel bestimmt ist. Jede wichtige Eigenschaft ist mit einer Sicherheitsstufe verknüpft, die angibt, welcher Teil des Systems das Attribut überwacht:
    • Eine wichtige Eigenschaft des Sicherheitsniveaus TRUSTED_ENVIRONMENT oder STRONGBOX wird in der sicheren Hardware erzwungen.
    • Eine wichtige Eigenschaft mit dem Sicherheitslevel SOFTWARE oder KEYSTORE wird nur vom keystore2-Systemdienst erzwungen. Eine solche Eigenschaft ist daher nicht widerstandsfähig gegen Manipulationen des Betriebssystems.

Viele Tags dienen sowohl als wichtige Merkmale als auch als Parameter:

  • Die Schlüsselmerkmale geben die zulässigen Parameter für einen Schlüssel an, z. B.:
    • Die Tag::PURPOSE eines ECDSA-Schlüssels kann sowohl SIGN als auch AGREE_KEY enthalten.
    • Die Tag::BLOCK_MODE für einen AES-Schlüssel kann die Modi ECB, CBC und CTR enthalten.
  • Eine begin()-Anfrage enthält dann einen bestimmten Parameterwert für den Vorgang, z. B.:
    • begin() hat einen Parameter für den ausdrücklichen Zweck, der mit einem der Tag::PURPOSE-Werte der Hauptmerkmale übereinstimmen muss.
    • begin() für einen AES-Vorgang muss einen einzelnen Wert für Tag::BLOCK_MODE im Feld params enthalten, der mit einem der Werte in den Schlüsseleigenschaften übereinstimmen muss.

Diese Doppelfunktion ist besonders relevant für die Erfassung von Tags, die bei der Schlüsselgenerierung oder dem Import als keyParams übergeben werden.

  • Einige der Tags dienen als Parameter für die Schlüsselgenerierung. Das Tag::CERTIFICATE_SUBJECT-Tag wirkt sich beispielsweise nur auf den (asymmetrischen) Schlüsselgenerierungsprozess aus, indem ein Feld im zurückgegebenen X.509-Zertifikat gesteuert wird.
  • Andere Tags werden dem neu generierten Schlüssel als Schlüsselmerkmale zugeordnet und im zurückgegebenen Schlüsselblob gekapselt, sodass sie dauerhaft mit dem Schlüssel verknüpft sind.

Ausführliche Informationen zu Tag-Werten finden Sie in den folgenden HAL-Schnittstellenspezifikationen: