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

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