Autorisierungs-Tags

Die KeyMint API (ehemals Keymaster) verwendet Autorisierungs-Tags, die Name-Wert-Paare sind. Jedes mögliche Tag hat:

  • Einen Enum-Namen mit zugehörigem Wert
  • Einen zugehörigen Typ (z. B. Ganzzahl, Byte, Datum, Enum), der anzeigt, ob mehrere Werte zulässig sind

Das Tag mit dem Namen Tag::BLOCK_MODE hat beispielsweise den Enum-Basiswert 4 und einen TagType::ENUM_REP-Typ marker, der angibt, dass der zugehörige Wert ein wiederholbarer Enum-Wert ist (in diesem Fall BlockMode).

Tags haben in der API eine Doppelfunktion:

  • Als Parameter für einen Vorgang, der in der API ausgeführt wird. Bei einem HMAC-Signierungsvorgang gibt Tag::MAC_LENGTH beispielsweise die angeforderte HMAC-Länge an.
  • Als Schlüsselmerkmale, also Werte, die dauerhaft an einen bestimmten Schlüssel gebunden sind (d. h. im Schlüssel-Blob enthalten sind). Tag::EC_CURVE gibt beispielsweise an, für welche elliptische Kurve ein Schlüssel bestimmt ist. Jedes Schlüsselmerkmal ist mit einem Sicherheitsniveau verknüpft, das angibt welcher Teil des Systems das Attribut erzwingt:
    • Ein Schlüsselmerkmal mit der Sicherheitsstufe TRUSTED_ENVIRONMENT oder STRONGBOX wird in der sicheren Hardware erzwungen.
    • Ein Schlüsselmerkmal mit dem Sicherheitsniveau SOFTWARE oder KEYSTORE wird nur vom Systemdienst keystore2 erzwungen. Ein solches Merkmal ist daher nicht vor einer Kompromittierung des Betriebssystems geschützt.

Viele Tags fungieren sowohl als Schlüsselmerkmale als auch als Parameter:

  • Die Schlüsselmerkmale geben die zulässigen Parameter für einen Schlüssel an, z. B.:
    • Der Tag::PURPOSE eines ECDSA-Schlüssels kann sowohl SIGN als auch AGREE_KEY enthalten.
    • Der 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 expliziten Zweckparameter, der mit einem der Tag::PURPOSE Werte der Schlüsselmerkmale übereinstimmen muss.
    • begin() für einen AES-Vorgang muss im Feld params einen einzelnen Wert für Tag::BLOCK_MODE enthalten, der mit einem der Werte in den Schlüsselmerkmalen übereinstimmen muss.

Diese Doppelfunktion ist besonders relevant für die Sammlung von Tags, die bei einem Vorgang zur Schlüsselerstellung oder zum Schlüsselimport als keyParams übergeben werden.

  • Einige der Tags fungieren als Parameter für den Vorgang zur Schlüsselerstellung selbst. Das Tag Tag::CERTIFICATE_SUBJECT wirkt sich beispielsweise nur auf den (asymmetrischen) Prozess zur Schlüsselerstellung aus, indem es ein Feld im zurückgegebenen X.509-Zertifikat steuert.
  • Andere Tags sind als Schlüssel merkmale an den neu generierten Schlüssel gebunden und im zurückgegebenen Schlüssel-Blob gekapselt, sodass sie dauerhaft mit dem Schlüssel verknüpft sind.

Detaillierte Informationen zu Tag-Werten finden Sie in den folgenden HAL-Spezifikationen der Schnittstelle: