KeyMint (เดิมชื่อ Keymaster) API ใช้ แท็กการให้สิทธิ์ อย่างกว้างขวาง ซึ่งเป็นคู่ชื่อ-ค่า แท็กที่เป็นไปได้แต่ละแท็กจะมีข้อมูลต่อไปนี้
- ชื่อ 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_KEYTag::BLOCK_MODEสำหรับคีย์ AES อาจรวมโหมด ECB, CBC, และ CTR
- จากนั้นคำขอ
begin()จะรวมค่าพารามิเตอร์ที่เฉพาะเจาะจง สำหรับการดำเนินการ เช่นbegin()มีพารามิเตอร์วัตถุประสงค์ที่ชัดเจนซึ่งต้องตรงกับค่าTag::PURPOSEค่าใดค่าหนึ่งของลักษณะสำคัญbegin()สำหรับการดำเนินการ AES ต้องมีค่าเดียวสำหรับTag::BLOCK_MODEในช่องparamsซึ่งต้องตรงกับค่าค่าใดค่าหนึ่งในลักษณะสำคัญ
ฟังก์ชัน 2 อย่างนี้มีความเกี่ยวข้องอย่างยิ่งกับการรวบรวมแท็กที่ส่งเป็น 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