À partir du 27 mars 2025, nous vous recommandons d'utiliser android-latest-release
au lieu de aosp-main
pour créer et contribuer à AOSP. Pour en savoir plus, consultez la section Modifications apportées à AOSP.
Balises d'autorisation
Restez organisé à l'aide des collections
Enregistrez et classez les contenus selon vos préférences.
L'API KeyMint (anciennement Keymaster) utilise largement les balises d'autorisation, qui sont des paires nom-valeur. Chaque balise possible comporte:
- Nom d'une énumération avec la valeur associée
- Un type associé (par exemple, entier, octets, date, énumération), qui indique si plusieurs valeurs sont autorisées
Par exemple, la balise Tag::BLOCK_MODE
a une valeur d'énumération de base de 4
et un repère de type TagType::ENUM_REP
qui indique que la valeur associée est une énumération répétable (dans ce cas, BlockMode
).
Les balises ont une double fonction dans l'API:
- En tant que paramètres d'une opération effectuée sur l'API, par exemple, le
Tag::MAC_LENGTH
d'une opération de signature HMAC indique la longueur HMAC demandée.
- En tant que caractéristiques de clé, les valeurs qui sont définitivement liées à une clé particulière (c'est-à-dire incluses dans le blob de clé), par exemple,
Tag::EC_CURVE
indique la courbe elliptique à laquelle une clé est destinée.
Chaque caractéristique clé est associée à un niveau de sécurité qui indique quelle partie du système contrôle l'attribut:
- Une caractéristique clé avec le niveau de sécurité
TRUSTED_ENVIRONMENT
ou STRONGBOX
est appliquée dans le matériel sécurisé.
- Une caractéristique clé avec le niveau de sécurité
SOFTWARE
ou KEYSTORE
n'est appliquée que par le service système keystore2
(et une telle caractéristique n'est donc pas résiliente à la compromission du système d'exploitation).
De nombreuses balises jouent à la fois le rôle de caractéristiques et de paramètres clés:
- Les caractéristiques de clé indiquent l'ensemble des paramètres autorisés pour une clé, par exemple:
- Le
Tag::PURPOSE
d'une clé ECDSA peut inclure à la fois SIGN
et AGREE_KEY
.
- Le
Tag::BLOCK_MODE
d'une clé AES peut inclure les modes ECB, CBC et CTR.
- Une requête
begin()
inclut ensuite une valeur de paramètre spécifique pour l'opération, par exemple:
begin()
possède un paramètre d'objectif explicite qui doit correspondre à l'une des valeurs Tag::PURPOSE
des caractéristiques clés.
begin()
pour une opération AES doit inclure une seule valeur pour Tag::BLOCK_MODE
dans le champ params
, qui doit correspondre à l'une des valeurs des caractéristiques de clé.
Cette double fonction est particulièrement pertinente pour la collecte des balises transmises en tant que keyParams
lors d'une opération de génération ou d'importation de clés.
- Certaines des balises servent de paramètres pour l'opération de génération de clés elle-même. Par exemple, la balise
Tag::CERTIFICATE_SUBJECT
n'affecte que le processus de génération de clés (asymétrique) en contrôlant un champ du certificat X.509 renvoyé.
- Les autres balises sont liées à la clé nouvellement générée en tant que caractéristiques de clé et sont encapsulées dans le keyblob renvoyé afin qu'elles soient associées de manière permanente à la clé.
Vous trouverez des informations détaillées sur les valeurs de balise dans les spécifications d'interface HAL suivantes:
Le contenu et les exemples de code de cette page sont soumis aux licences décrites dans la Licence de contenu. Java et OpenJDK sont des marques ou des marques déposées d'Oracle et/ou de ses sociétés affiliées.
Dernière mise à jour le 2025/07/27 (UTC).
[[["Facile à comprendre","easyToUnderstand","thumb-up"],["J'ai pu résoudre mon problème","solvedMyProblem","thumb-up"],["Autre","otherUp","thumb-up"]],[["Il n'y a pas l'information dont j'ai besoin","missingTheInformationINeed","thumb-down"],["Trop compliqué/Trop d'étapes","tooComplicatedTooManySteps","thumb-down"],["Obsolète","outOfDate","thumb-down"],["Problème de traduction","translationIssue","thumb-down"],["Mauvais exemple/Erreur de code","samplesCodeIssue","thumb-down"],["Autre","otherDown","thumb-down"]],["Dernière mise à jour le 2025/07/27 (UTC)."],[],[],null,["# Authorization tags\n\nThe KeyMint (previously Keymaster) API makes extensive use of *authorization tags*, which are name-value pairs. Each possible tag has:\n\n- An enum name with associated value\n- An associated type (for example, integer, bytes, date, enum), which includes an indication of whether multiple values are allowed\n\n\u003cbr /\u003e\n\nFor example, the tag with name\n[`Tag::BLOCK_MODE`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/Tag.aidl?q=BLOCK_MODE)\nhas a base enum value of `4` and a `TagType::ENUM_REP` type\nmarker that indicates that the associated value is a repeatable enum (in this\ncase, `BlockMode`).\n\nTags perform a dual function on the API:\n\n- As parameters for an operation performed on the API, for example, the `Tag::MAC_LENGTH` on an HMAC signing operation indicates the requested HMAC length.\n- As *key characteristics* , values that are permanently bound to a particular key (that is, included in the key blob), for example, the `Tag::EC_CURVE` indicates which elliptic curve a key is for. Each key characteristic is associated with a security level that indicates which part of the system polices the attribute:\n - A key characteristic with security level `TRUSTED_ENVIRONMENT` or `STRONGBOX` is enforced in the secure hardware.\n - A key characteristic with security level `SOFTWARE` or `KEYSTORE` is enforced only by the `keystore2` system service (and so such a characteristic isn't resilient to OS compromise).\n\n\u003cbr /\u003e\n\nMany tags act as both key characteristics *and* parameters:\n\n- The key characteristics indicate the set of allowed parameters for a key, for example:\n - The `Tag::PURPOSE` of an ECDSA key might include both `SIGN` and `AGREE_KEY`.\n - The `Tag::BLOCK_MODE` for an AES key might include ECB, CBC, and CTR modes.\n- A `begin()` request then includes a specific parameter value for the operation, for example:\n - `begin()` has an explicit purpose parameter that must match one of the key characteristics' `Tag::PURPOSE` values.\n - `begin()` for an AES operation needs to include a single value for `Tag::BLOCK_MODE` in the `params` field, which must match one of the values in the key characteristics.\n\n\u003cbr /\u003e\n\nThis dual function is particularly relevant for the collection of tags passed\nas `keyParams` on a key generation or import operation.\n\n- Some of the tags act as parameters for the key generation operation itself. For example, the `Tag::CERTIFICATE_SUBJECT` tag affects only the (asymmetric) key generation process, by controlling a field in the returned X.509 certificate.\n- Other tags are bound to the newly generated key as key characteristics, and are encapsulated in the returned keyblob so that they're permanently associated with the key.\n\nDetailed information about tag values can be found in the following\nHAL interface specifications:\n\n- KeyMint --- All tags are defined in [`Tag.aidl`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/security/keymint/aidl/android/hardware/security/keymint/Tag.aidl) on the relevant Android release branch.\n- Keymaster --- Tags are defined in `platform/hardware/interfaces/keymaster/`\u003cvar translate=\"no\"\u003ekeymaster-version\u003c/var\u003e`/types.hal` for each respective `keymaster-version`, such as [`3.0/types.hal`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/keymaster/3.0/types.hal) for Keymaster 3 and [`4.0/types.hal`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/interfaces/keymaster/4.0/types.hal) for Keymaster 4. For Keymaster 2 and below, tags are defined in [`platform/hardware/libhardware/include/hardware/keymaster_defs.h`](https://cs.android.com/android/platform/superproject/+/android-latest-release:hardware/libhardware/include_all/hardware/keymaster_defs.h)."]]