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
- Loại liên kết (ví dụ: số nguyên, byte, ngày, enum), bao gồm cả chỉ báo cho biết 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à dấu loại TagType::ENUM_REP
cho biết giá trị liên kết là enum có thể lặp lại (trong trường hợp này là BlockMode).
Thẻ thực hiện chức năng kép trên API:
- Là tham số cho một thao tác được thực hiện trên API, ví dụ:
Tag::MAC_LENGTHtrên thao tác ký HMAC cho biết độ dài HMAC được yêu cầu. - Là đặc điểm chính, các giá trị được liên kết vĩnh viễn
với một khoá cụ thể (tức là được đưa vào blob khoá), ví dụ:
Tag::EC_CURVEcho biết khoá dành cho đường cong elliptic nào. Mỗi đặc điểm chính được liên kết với một mức an ninh cho biết phần nào của hệ thống thực thi thuộc tính:- Đặc điểm chính có cấp độ bảo mật
TRUSTED_ENVIRONMENThoặcSTRONGBOXđược thực thi trong phần cứng bảo mật. - Đặc điểm chính có mức an ninh
SOFTWAREhoặcKEYSTOREchỉ được thực thi bởi dịch vụ hệ thốngkeystore2(và do đó, đặc điểm như vậy không có khả năng chống lại việc hệ điều hành bị xâm phạm).
- Đặc điểm chính có cấp độ bảo mật
Nhiều thẻ hoạt động vừa là đặc điểm chính vừa là tham số:
- 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::PURPOSEcủa khoá ECDSA có thể bao gồm cảSIGNvàAGREE_KEY.Tag::BLOCK_MODEcho 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ó tham số mục đích rõ ràng phải khớp với một trong các giá trịTag::PURPOSEcủa đặc điểm chính.begin()cho thao tác AES cần bao gồm một giá trị duy nhất choTag::BLOCK_MODEtrong trườngparams, phải khớp với một trong các giá trị trong đặc điểm chính.
Chức năng kép này đặc biệt phù hợp với tập hợp thẻ được truyền dưới dạng keyParams trên thao tác tạo hoặc nhập khoá.
- Một số thẻ hoạt động như tham số cho chính thao tác tạo khoá
đó. Ví dụ: thẻ
Tag::CERTIFICATE_SUBJECTchỉ ảnh hưởng đến quá trình tạo khoá (không đố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 chính và được đóng gói trong keyblob được trả về để chúng được liên kết vĩnh viễn với khoá.
Bạn có thể tìm thấy thông tin chi tiết về giá trị thẻ trong các thông số kỹ thuật giao diện HAL sau đây:
- KeyMint – Tất cả thẻ được xác định
trong
Tag.aidltrê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.halcho từngkeymaster-versiontương ứng, chẳng hạn như3.0/types.halcho Keymaster 3 và4.0/types.halcho Keymaster 4. Đối với Keymaster 2 trở xuống, thẻ được xác định trongplatform/hardware/libhardware/include/hardware/keymaster_defs.h.