KeyMint (เดิมคือ Keymaster) API ใช้แท็กการให้สิทธิ์อย่างแพร่หลาย ซึ่งเป็นคู่ชื่อ-ค่า แท็กที่เป็นไปได้แต่ละรายการมีข้อมูลต่อไปนี้
- ชื่อ enum ที่มีค่าที่เกี่ยวข้อง
- ประเภทที่เกี่ยวข้อง (เช่น จำนวนเต็ม ไบต์ วันที่ รายการแบบจำกัด) ซึ่งระบุถึงอนุญาตให้ใช้ค่าหลายค่าหรือไม่
เช่น แท็กที่มีชื่อ Tag::BLOCK_MODE
มีค่า Enum พื้นฐานเป็น 4
และเครื่องหมายประเภท TagType::ENUM_REP
ที่ระบุว่าค่าที่เชื่อมโยงคือ Enum ที่ซ้ำได้ (ในกรณีนี้คือ BlockMode
)
แท็กทํางาน 2 หน้าที่ใน API ดังนี้
- เป็นพารามิเตอร์สําหรับการดำเนินการที่ดำเนินการกับ API เช่น
Tag::MAC_LENGTH
ในการดำเนินการลงนาม HMAC จะระบุความยาว HMAC ที่ขอ - ลักษณะคีย์คือค่าที่เชื่อมโยงกับคีย์หนึ่งๆ อย่างถาวร (กล่าวคือ รวมอยู่ในบล็อกคีย์) เช่น
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 ที่แสดงผล - แท็กอื่นๆ จะเชื่อมโยงกับคีย์ที่สร้างขึ้นใหม่เป็นลักษณะของคีย์ และได้รับการบรรจุไว้ในคีย์บล็อกที่ส่งคืนเพื่อให้เชื่อมโยงกับคีย์อย่างถาวร
ดูข้อมูลโดยละเอียดเกี่ยวกับค่าแท็กได้ในข้อกําหนดของอินเทอร์เฟซ 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