API ของ KeyMint (เดิมคือ Keymaster) ใช้แท็กการให้สิทธิ์อย่างกว้างขวาง ซึ่งเป็นคู่ชื่อ-ค่า แท็กที่เป็นไปได้แต่ละแท็กมีข้อมูลต่อไปนี้
- ชื่อ Enum ที่มีค่าที่เชื่อมโยง
- ประเภทที่เชื่อมโยง (เช่น จำนวนเต็ม ไบต์ วันที่ Enum) ซึ่งรวมถึง การระบุว่าอนุญาตให้มีหลายค่าหรือไม่
ตัวอย่างเช่น แท็กที่มีชื่อ
Tag::BLOCK_MODE
มีค่า enum ฐานเป็น 4
และเครื่องหมายประเภท TagType::ENUM_REP
ที่ระบุว่าค่าที่เชื่อมโยงเป็น enum ที่ทำซ้ำได้ (ในกรณีนี้คือ BlockMode
)
แท็กมีฟังก์ชัน 2 อย่างใน API ดังนี้
- เป็นพารามิเตอร์สำหรับการดำเนินการที่ทำใน API เช่น
Tag::MAC_LENGTH
ในการดำเนินการลงนาม HMAC ระบุความยาว HMAC ที่ขอ - ในฐานะลักษณะสำคัญ ค่าที่เชื่อมโยงกับคีย์หนึ่งๆ อย่างถาวร (กล่าวคือ รวมอยู่ใน Blob ของคีย์) เช่น
Tag::EC_CURVE
จะระบุว่าคีย์นั้นใช้สำหรับเส้นโค้งวงรีใด ลักษณะสำคัญแต่ละอย่างจะเชื่อมโยงกับระดับความปลอดภัยที่ระบุ ส่วนใดของระบบที่ควบคุมแอตทริบิวต์- ลักษณะสำคัญของความปลอดภัย
ระดับ
TRUSTED_ENVIRONMENT
หรือSTRONGBOX
จะบังคับใช้ ในฮาร์ดแวร์ที่ปลอดภัย - ลักษณะสำคัญที่มีระดับความปลอดภัย
SOFTWARE
หรือKEYSTORE
จะบังคับใช้โดยบริการของระบบkeystore2
เท่านั้น (ดังนั้นลักษณะดังกล่าวจึงไม่ทนทานต่อการประนีประนอมของระบบปฏิบัติการ)
- ลักษณะสำคัญของความปลอดภัย
ระดับ
แท็กจํานวนมากทําหน้าที่เป็นทั้งลักษณะสําคัญและพารามิเตอร์
- ลักษณะสำคัญระบุชุดพารามิเตอร์ที่อนุญาตสำหรับคีย์
เช่น
Tag::PURPOSE
ของคีย์ ECDSA อาจมีทั้งSIGN
และAGREE_KEY
Tag::BLOCK_MODE
สำหรับคีย์ AES อาจรวมถึงโหมด ECB, CBC และ CTR
- จากนั้น
begin()
คำขอจะมีค่าพารามิเตอร์ที่เฉพาะเจาะจง สำหรับการดำเนินการ เช่นbegin()
มีพารามิเตอร์วัตถุประสงค์ที่ชัดเจนซึ่งต้องตรงกับค่าTag::PURPOSE
ของลักษณะสำคัญอย่างใดอย่างหนึ่งbegin()
สำหรับการดำเนินการ AES ต้องมีค่าเดียวสำหรับTag::BLOCK_MODE
ในฟิลด์params
ซึ่งต้องตรงกับค่าใดค่าหนึ่งในลักษณะสำคัญของคีย์
ฟังก์ชันคู่ดังกล่าวมีความเกี่ยวข้องอย่างยิ่งกับการรวบรวมแท็กที่ส่งเป็น keyParams
ในการดำเนินการสร้างหรือนำเข้าคีย์
- แท็กบางรายการทําหน้าที่เป็นพารามิเตอร์สําหรับการดำเนินการสร้างคีย์
ด้วยตัวเอง เช่น แท็ก
Tag::CERTIFICATE_SUBJECT
จะมีผลกับกระบวนการสร้างคีย์ (แบบอสมมาตร) เท่านั้น โดยจะควบคุมฟิลด์ใน ใบรับรอง X.509 ที่ส่งคืน - แท็กอื่นๆ จะเชื่อมโยงกับคีย์ที่สร้างขึ้นใหม่เป็นลักษณะของคีย์ และจะแคปซูลไว้ใน KeyBlob ที่ส่งคืนเพื่อให้เชื่อมโยงกับคีย์อย่างถาวร
ดูข้อมูลโดยละเอียดเกี่ยวกับค่าแท็กได้ในข้อกําหนดของอินเทอร์เฟซ HAL ต่อไปนี้
- KeyMint - แท็กทั้งหมดจะกำหนดไว้
ใน
Tag.aidl
ในสาขาการเผยแพร่ Android ที่เกี่ยวข้อง - Keymaster - มีการกำหนดแท็ก
ใน
platform/hardware/interfaces/keymaster/keymaster-version/types.hal
สำหรับkeymaster-version
ที่เกี่ยวข้องแต่ละรายการ เช่น3.0/types.hal
สำหรับ Keymaster 3 และ4.0/types.hal
สำหรับ Keymaster 4 สำหรับ Keymaster 2 และต่ำกว่า มีการกำหนดแท็ก ในplatform/hardware/libhardware/include/hardware/keymaster_defs.h