Kể từ ngày 27 tháng 3 năm 2025, bạn nên sử dụng android-latest-release
thay vì aosp-main
để xây dựng và đóng góp cho AOSP. Để biết thêm thông tin, hãy xem phần Thay đổi đối với AOSP.
Thẻ uỷ quyền
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
API KeyMint (trước đây là Keymaster) sử dụng rộng rãi thẻ uỷ quyền, là các cặp tên-giá trị. Mỗi thẻ có thể có:
- Tên enum có giá trị liên kết
- Một loại được liên kết (ví dụ: số nguyên, byte, ngày, enum), bao gồm cả thông tin cho biết liệu có cho phép nhiều giá trị hay không
Ví dụ: thẻ có tên Tag::BLOCK_MODE
có giá trị enum cơ sở là 4
và điểm đánh dấu loại TagType::ENUM_REP
cho biết giá trị được liên kết là một enum có thể lặp lại (trong trường hợp này là BlockMode
).
Thẻ thực hiện hai chức năng trên API:
- Ví dụ: dưới dạng tham số cho một thao tác được thực hiện trên API,
Tag::MAC_LENGTH
trên thao tác ký HMAC cho biết độ dài HMAC được yêu cầu.
- Là các đặc điểm của khoá, các giá trị được liên kết vĩnh viễn với một khoá cụ thể (tức là có trong blob khoá), ví dụ:
Tag::EC_CURVE
cho biết khoá dành cho đường cong elip nào.
Mỗi đặc điểm chính được liên kết với một cấp độ bảo mật cho biết phần nào của hệ thống kiểm soát thuộc tính:
- Một đặc điểm chính có cấp độ bảo mật
TRUSTED_ENVIRONMENT
hoặc STRONGBOX
được thực thi trong phần cứng bảo mật.
- Một đặc điểm chính có cấp độ bảo mật
SOFTWARE
hoặc KEYSTORE
chỉ được dịch vụ hệ thống keystore2
thực thi (và do đó, đặc điểm đó không có khả năng chống lại việc xâm phạm hệ điều hành).
Nhiều thẻ đóng vai trò là cả tham số và đặc điểm chính:
- Các đặc điểm chính cho biết tập hợp tham số được phép cho một khoá, ví dụ:
Tag::PURPOSE
của khoá ECDSA có thể bao gồm cả SIGN
và AGREE_KEY
.
Tag::BLOCK_MODE
cho khoá AES có thể bao gồm các chế độ ECB, CBC và CTR.
- Sau đó, yêu cầu
begin()
sẽ bao gồm một giá trị tham số cụ thể cho thao tác, ví dụ:
begin()
có một tham số mục đích rõ ràng phải khớp với một trong các giá trị Tag::PURPOSE
của các đặc điểm chính.
begin()
cho một thao tác AES cần bao gồm một giá trị duy nhất cho Tag::BLOCK_MODE
trong trường params
, giá trị này phải khớp với một trong các giá trị trong đặc điểm khoá.
Hàm kép này đặc biệt phù hợp với việc thu thập các thẻ được truyền dưới dạng keyParams
trong một thao tác tạo khoá hoặc nhập.
- Một số thẻ đóng vai trò là tham số cho chính thao tác tạo khoá. Ví dụ: thẻ
Tag::CERTIFICATE_SUBJECT
chỉ ảnh hưởng đến quá trình tạo khoá (bất đối xứng) bằng cách kiểm soát một trường trong chứng chỉ X.509 được trả về.
- Các thẻ khác được liên kết với khoá mới tạo dưới dạng đặc điểm khoá và được đóng gói trong keyblob được trả về để liên kết vĩnh viễn với khoá.
Bạn có thể xem thông tin chi tiết về giá trị thẻ trong các thông số kỹ thuật giao diện HAL sau:
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2025-07-27 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 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)."]]