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

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_KEY
    • Tag::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