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ặcSTRONGBOX
đượ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ặcKEYSTORE
chỉ được dịch vụ hệ thốngkeystore2
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).
- Một đặc điểm chính có cấp độ bảo mật
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 choTag::BLOCK_MODE
trong trườngparams
, 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:
- KeyMint – Tất cả thẻ được xác định trong
Tag.aidl
trên nhánh phát hành Android có liên quan. - Keymaster – Thẻ được xác định trong
platform/hardware/interfaces/keymaster/keymaster-version/types.hal
cho mỗikeymaster-version
tương ứng, chẳng hạn như3.0/types.hal
cho Keymaster 3 và4.0/types.hal
cho Keymaster 4. Đối với Keymaster 2 trở xuống, các thẻ được xác định trongplatform/hardware/libhardware/include/hardware/keymaster_defs.h
.