แท็กการให้สิทธิ์

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