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

หน้านี้แสดงรายละเอียดเพื่อช่วยเหลือผู้ที่ติดตั้งใช้งาน HAL ของ Keymaster โดยจะครอบคลุมแต่ละแท็กใน HAL ซึ่งเป็นเวอร์ชัน Keymaster ที่แท็กนั้นมีอยู่ และระบุว่าแท็กทำซ้ำได้หรือไม่ ยกเว้นตามที่ระบุไว้ในคำอธิบายแท็ก แท็กทั้งหมดด้านล่างจะถูกใช้ในระหว่างการสร้างคีย์เพื่อระบุคีย์ ลักษณะพิเศษ

สำหรับ Keymaster 4 แท็กจะกำหนดไว้ใน platform/hardware/interfaces/keymaster/keymaster-version/types.hal, เช่น 3.0/types.hal สำหรับ Keymaster 3 และ 4.0/types.hal สำหรับ Keymaster 4 สำหรับ Keymaster 2 และต่ำกว่า แท็กจะกำหนดไว้ที่ platform/hardware/libhardware/include/hardware/keymaster_defs.h

สำหรับฟังก์ชัน โปรดดู ฟังก์ชัน Keymaster

แท็ก::ACTIVE_DATETIME

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุวันที่และเวลาที่คีย์จะใช้งานได้ ก่อนหน้านี้ ความพยายามใดๆ ในการใช้คีย์ล้มเหลว ErrorCode::KEY_NOT_YET_VALID

ค่านี้เป็นจำนวนเต็ม 64 บิตที่แสดงเป็นมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970

แท็ก::ALGORITHM

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุอัลกอริทึมการเข้ารหัสที่ใช้คีย์

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class Algorithm : uint32_t {
    RSA = 1,
    EC = 3,
    AES = 32,
    HMAC = 128,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_ALGORITHM_RSA = 1,
    KM_ALGORITHM_EC = 3,
    KM_ALGORITHM_AES = 32,
    KM_ALGORITHM_HMAC = 128,
} keymaster_algorithm_t;

แท็ก::ALL_APPLICATIONS

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

สงวนไว้สำหรับการใช้งานในอนาคต

แท็ก::ALLOW_WHILE_ON_BODY

เวอร์ชัน: 2, 3, 4

ทำซ้ำได้ ไม่

แท็กนี้ใช้ได้กับอุปกรณ์ Android Wear ที่มีเซ็นเซอร์บนร่างกายเท่านั้น ที่ ถึงจุดนี้ ไม่คิดว่า TEE ใดจะให้สิทธิ์เข้าถึงที่ปลอดภัย เซ็นเซอร์บนร่างกาย หรือเซ็นเซอร์บนร่างกาย มีความปลอดภัยมาก เป็นฟีเจอร์ที่บังคับใช้โดยซอฟต์แวร์เท่านั้น

แท็ก::ALL_USERS

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

สงวนไว้สำหรับการใช้งานในอนาคต

แท็ก::APPLICATION_DATA

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

เมื่อระบุให้กับ generateKey หรือ importKey แท็กนี้ระบุข้อมูลที่จำเป็นในระหว่างการใช้คีย์ทุกครั้ง ใน โดยเฉพาะการเรียกไปยัง exportKey และ getKeyCharacteristics ต้องระบุค่าเดียวกันให้กับพารามิเตอร์ clientId และการเรียก ถึง begin จะต้องระบุ แท็กนี้และข้อมูลที่เชื่อมโยงเดียวกันเป็นส่วนหนึ่งของ inParams ตั้งค่า หากไม่ได้ระบุข้อมูลที่ถูกต้อง ฟังก์ชันจะแสดงผล ErrorCode::INVALID_KEY_BLOB

เนื้อหาของแท็กนี้ผูกไว้กับคีย์แบบเข้ารหัส หมายความว่าเป็นไปไม่ได้ สำหรับฝ่ายตรงข้ามที่มีสิทธิ์เข้าถึง ข้อมูลลับของโลก แต่ไม่มีสิทธิ์เข้าถึงเนื้อหาของแท็กเพื่อถอดรหัส โดยไม่มีการใช้เนื้อหาแท็กแบบบรูตฟอร์ซ ซึ่งแอปพลิเคชันสามารถป้องกันได้โดย การระบุเนื้อหาที่มีเอนโทรปีสูงเพียงพอ

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::APPLICATION_ID

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

เมื่อระบุให้กับ generateKey หรือ importKey แท็กนี้ระบุข้อมูลที่จำเป็นในระหว่างการใช้คีย์ทุกครั้ง ใน โดยเฉพาะการเรียกไปยัง exportKey และ getKeyCharacteristics ต้องระบุค่าเดียวกันในพารามิเตอร์ clientId และ การโทรไปยัง เริ่มต้น จำเป็นต้อง ให้แท็กนี้และข้อมูลที่เกี่ยวข้องเดียวกันเป็นส่วนหนึ่งของ ตั้งค่า inParams แล้ว ถ้าไม่ได้ระบุข้อมูลที่ถูกต้อง ฟังก์ชัน แสดงผล ErrorCode::INVALID_KEY_BLOB

เนื้อหาของแท็กนี้ผูกไว้กับคีย์แบบเข้ารหัส ซึ่งหมายความว่าเป็นศัตรูที่สามารถเข้าถึงความลับของโลกที่ปลอดภัยทั้งหมด ไม่มีสิทธิ์เข้าถึงเนื้อหาแท็ก จึงไม่สามารถถอดรหัส (โดยไม่บังคับใช้เนื้อหาของแท็กแบบบรูต)

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ASSOCIATED_DATA

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

มี "ข้อมูลที่เกี่ยวข้อง" สำหรับการเข้ารหัสหรือถอดรหัส AES-GCM แท็กนี้ ระบุเพื่ออัปเดต และ ระบุข้อมูลที่ไม่ได้เข้ารหัส/ถอดรหัส แต่ใช้ในการประมวลผล แท็ก GCM

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_APPLICATION_ID

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ใช้เพื่อระบุชุดของแอปพลิเคชันที่เป็นไปได้ ได้เริ่มเอกสารรับรองคีย์แล้ว

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_CHALLENGE

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ใช้เพื่อระบุการคัดค้านในเอกสารรับรอง

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_BRAND

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุชื่อแบรนด์ของอุปกรณ์ ตามที่ Build.BRAND แสดงผล ใน Android จะมีการตั้งค่าช่องนี้เมื่อขอเอกสารรับรองของ ตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_DEVICE

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุชื่ออุปกรณ์ตามที่ Build.DEVICE แสดงผล ใน Android จะมีการตั้งค่าช่องนี้เมื่อขอเอกสารรับรองของ ตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_IMEI

เวอร์ชัน: 3, 4

ทำซ้ำได้ ใช่

ระบุ IMEI ของวิทยุทุกสัญญาณในอุปกรณ์ ตั้งค่าช่องนี้เท่านั้น เมื่อขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_MANUFACTURER

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุชื่อผู้ผลิตอุปกรณ์ ตามที่แสดงโดย Build.MANUFACTURER ใน Android ฟิลด์นี้จะตั้งค่าเมื่อ ที่ขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_MEID

เวอร์ชัน: 3, 4

ทำซ้ำได้ ใช่

ระบุ MEID สำหรับสัญญาณวิทยุทั้งหมดในอุปกรณ์ ช่องนี้จะได้รับการตั้งค่าเท่านั้น เมื่อขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_MODEL

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุชื่อรุ่นของอุปกรณ์ ตามที่แสดงโดย Build.MODEL ใน Android ฟิลด์นี้จะตั้งค่าเมื่อ ที่ขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_PRODUCT

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุชื่อผลิตภัณฑ์ของอุปกรณ์ ตามที่ส่งคืนโดย Build.PRODUCT ใน Android ฟิลด์นี้จะตั้งค่าเมื่อ ที่ขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::ATTESTATION_ID_SERIAL

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุหมายเลขซีเรียลของอุปกรณ์ ฟิลด์นี้จะตั้งค่าเมื่อ ที่ขอเอกสารรับรองของตัวระบุของอุปกรณ์

หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ ก่อนหน้านี้มีการโทร destroyAttestationIds() และอุปกรณ์ ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::AUTH_TIMEOUT

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุเวลาเป็นวินาทีที่ได้รับอนุญาตให้ใช้คีย์ หลังจาก การตรวจสอบสิทธิ์ หากเป็น Tag::USER_SECURE_ID อยู่ และแท็กนี้ไม่มีอยู่ คีย์ต้องมีการตรวจสอบสิทธิ์สำหรับทุก (โปรดดูเริ่มต้นสำหรับ รายละเอียดของขั้นตอนการตรวจสอบสิทธิ์ต่อการดำเนินการ)

ค่านี้ต้องเป็นจำนวนเต็ม 32 บิตที่ระบุเวลาเป็นวินาทีหลังจาก การตรวจสอบสิทธิ์ที่สำเร็จของผู้ใช้ที่ระบุโดย Tag::USER_SECURE_ID ด้วยวิธีการตรวจสอบสิทธิ์ ระบุโดย Tag::USER_AUTH_TYPE ว่าสามารถใช้คีย์ดังกล่าวได้

แท็ก::AUTH_TOKEN

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

มี การตรวจสอบสิทธิ์ โทเค็นเป็น begin update หรือ เสร็จสิ้น เพื่อพิสูจน์การตรวจสอบสิทธิ์ผู้ใช้สำหรับการดำเนินการคีย์ที่จำเป็นต้องใช้ (คีย์มี แท็ก::USER_SECURE_ID)

ค่านี้คือ BLOB ที่มีโครงสร้าง hw_auth_token_t

แท็ก::BLOB_USAGE_REQUIREMENTS

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุเงื่อนไขสภาพแวดล้อมของระบบที่จำเป็นสำหรับไฟล์สร้าง ที่จะนำไปใช้

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class KeyBlobUsageRequirements : uint32_t {
    STANDALONE = 0,
    REQUIRES_FILE_SYSTEM = 1,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_BLOB_STANDALONE = 0,
    KM_BLOB_REQUIRES_FILE_SYSTEM = 1,
} keymaster_key_blob_usage_requirements_t;

สามารถระบุแท็กนี้ในระหว่างการสร้างคีย์เพื่อกำหนดว่าคีย์จะต้อง ใช้งานได้ในเงื่อนไขที่ระบุ คุณต้องส่งคืนคีย์ ลักษณะเฉพาะจาก generateKey และ getKeyCharacteristics หากผู้โทรระบุ Tag::BLOB_USAGE_REQUIREMENTS ด้วย ค่า KeyBlobUsageRequirements::STANDALONE ความน่าเชื่อถือแสดงผล BLOB คีย์ ที่สามารถใช้ได้โดยไม่มีการรองรับระบบไฟล์ การดำเนินการนี้สำคัญสำหรับอุปกรณ์ กับดิสก์ที่เข้ารหัส ซึ่งอาจไม่สามารถใช้ระบบไฟล์ได้จนกว่า หลังจากที่ใช้คีย์ Keymaster ในการถอดรหัสดิสก์

แท็ก::BLOCK_MODE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ใช่

ระบุโหมดการเข้ารหัสแบบบล็อกที่อาจนําคีย์ไปใช้ แท็กนี้เกี่ยวข้องกับคีย์ AES เท่านั้น

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class BlockMode : uint32_t {
    ECB = 1,
    CBC = 2,
    CTR = 3,
    GCM = 32,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_MODE_ECB = 1,
    KM_MODE_CBC = 2,
    KM_MODE_CTR = 3,
    KM_MODE_GCM = 32,
} keymaster_block_mode_t;

แท็กนี้ใช้ซ้ำได้ และสำหรับการดำเนินการคีย์ AES ให้ระบุโหมดใน อาร์กิวเมนต์ additionalParams ของ begin หากโหมดที่ระบุไม่ได้อยู่ในโหมดที่เชื่อมโยงกับคีย์ การดำเนินการล้มเหลวด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE

แท็ก::BOOT_PATCHLEVEL

เวอร์ชัน: 4

แท็ก::BOOT_PatchLEVEL ระบุระดับแพตช์ความปลอดภัยของอิมเมจการเปิดเครื่อง (เคอร์เนล) ที่สามารถใช้คีย์ได้ แท็กนี้ไม่เคยส่งไปยัง TA ของ keymaster แต่ จะเพิ่มลงในรายการการให้สิทธิ์ที่ใช้ฮาร์ดแวร์โดย TA ความพยายามใดๆ ใช้คีย์ที่มีค่า Tag::BOOT_PATCHLEVEL แตกต่างจาก การเรียกใช้ระดับแพตช์ของระบบในขณะนี้จะทําให้เกิด begin() getKeyCharacteristics() หรือ exportKey() เพื่อส่งคืน ErrorCode::KEY_REQUIRES_UPGRADE โปรดดู upgradeKey() เพื่อดูรายละเอียด

ค่าของแท็กคือจำนวนเต็มของรูปแบบ YYYYMMDD โดยที่ YYYY คือค่า ปีของการอัปเดตครั้งล่าสุดเป็นเลข 4 หลัก MM คือเดือนที่มีเลข 2 หลัก และ DD คือตัวเลข วันแบบ 2 หลักของการอัปเดตครั้งล่าสุด ตัวอย่างเช่น สำหรับคีย์ที่สร้างใน อุปกรณ์ Android อัปเดตครั้งล่าสุดเมื่อวันที่ 5 มิถุนายน 2018 ค่าจะเป็น 20180605 หากไม่ทราบวัน อาจใช้ 00 แทน

ในระหว่างการเปิดเครื่องแต่ละครั้ง Bootloader จะต้องระบุระดับแพตช์ของอิมเมจการเปิดเครื่อง กับสภาพแวดล้อมที่ปลอดภัย (กำหนดกลไกการทำงานแล้ว)

ต้องใช้ฮาร์ดแวร์

แท็ก::BOOTLOADER_ONLY

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุเฉพาะ Bootloader เท่านั้นที่ใช้คีย์ได้

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

การพยายามใช้คีย์กับ Tag::BOOTLOADER_ONLY จาก ระบบ Android ทำงานไม่สำเร็จด้วยErrorCode::INVALID_KEY_BLOB

แท็ก::CALLER_NONCE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุว่าผู้เรียกใช้สามารถให้ค่า Nonce สำหรับการดำเนินการที่กำหนดค่า Nonce

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

แท็กนี้ใช้สำหรับคีย์ AES เท่านั้น และเกี่ยวข้องกับ CBC, CTR และ GCM เท่านั้น โหมดบล็อก หากไม่มีแท็ก การติดตั้งใช้งานควรปฏิเสธ การดำเนินการที่ให้ Tag::NONCE เป็น เริ่ม กับ ErrorCode::CALLER_NONCE_PROHIBITED

แท็ก::CREATION_DATETIME

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุวันที่และเวลาที่สร้างคีย์ หน่วยเป็นมิลลิวินาทีตั้งแต่ 1 มกราคม 1970 แท็กนี้ไม่บังคับและเป็นการให้ข้อมูลเท่านั้น

แท็ก::DIGEST

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ใช่

ระบุอัลกอริทึมไดเจสต์ที่สามารถใช้กับคีย์เพื่อดำเนินการ การดำเนินการลงชื่อและยืนยัน แท็กนี้เกี่ยวข้องกับ RSA, ECDSA และ คีย์ HMAC

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class Digest : uint32_t {
    NONE = 0,
    MD5 = 1,
    SHA1 = 2,
    SHA_2_224 = 3,
    SHA_2_256 = 4,
    SHA_2_384 = 5,
    SHA_2_512 = 6,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_DIGEST_NONE = 0,
    KM_DIGEST_MD5 = 1,
    KM_DIGEST_SHA1 = 2,
    KM_DIGEST_SHA_2_224 = 3,
    KM_DIGEST_SHA_2_256 = 4,
    KM_DIGEST_SHA_2_384 = 5,
    KM_DIGEST_SHA_2_512 = 6,
}
keymaster_digest_t;

แท็กนี้ใช้ซ้ำได้ สำหรับการดำเนินการลงชื่อและยืนยัน ให้ระบุ ไดเจสต์ในอาร์กิวเมนต์ additionalParams ของ begin หากไดเจสต์ที่ระบุไม่อยู่ในไดเจสต์ที่เชื่อมโยงกับคีย์นั้น การดำเนินการล้มเหลวด้วย ErrorCode::INCOMPATIBLE_DIGEST

แท็ก::EC_CURVE

เวอร์ชัน: 2, 3, 4

ทำซ้ำได้ ไม่

ใน Keymaster 1 มีการคาดเดาเส้นโค้งที่ใช้สำหรับคีย์ EC จากคีย์ที่ระบุ ขนาด นับจากนี้ไป Keymaster 2 จึงเพิ่มความยืดหยุ่น จึงได้เปิดตัว ในการระบุเส้นโค้ง คำขอการสร้างคีย์ EC อาจมี Tag::EC_CURVE, Tag::KEY_SIZE หรือทั้ง 2 อย่าง

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
    P_521 = 3,
};
Keymaster 2 และรุ่นก่อนหน้า
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
P_521 = 3,
};

หากคำขอสร้างมีเฉพาะ Tag::KEY_SIZE กลับไปใช้ตรรกะ Keymaster 1 โดยเลือกเส้นโค้ง NIST ที่เหมาะสม

หากคำขอมีเฉพาะ Tag::EC_CURVE ให้ใช้ เส้นโค้งที่ระบุ สำหรับ Keymaster 3 ขึ้นไป เส้นโค้งจะกำหนดไว้ใน EcCurve สำหรับ Keymaster 2 และเวอร์ชันก่อนหน้า ระบบจะกำหนดเส้นโค้ง ใน keymaster_ec_curve_t

หากคำขอมีทั้ง 2 อย่าง ให้ใช้เส้นโค้งที่ระบุโดย Tag::EC_CURVE แล้วตรวจสอบว่าขนาดคีย์ที่ระบุ ที่เหมาะสมกับกราฟนั้น หากไม่ ให้ส่งคืน ErrorCode::INVALID_ARGUMENT

แท็ก::INCLUDE_UNIQUE_ID

เวอร์ชัน: 2, 3, 4

ทำซ้ำได้ ไม่

มีการระบุแท็กนี้ระหว่างการสร้างคีย์เพื่อระบุว่าเอกสารรับรอง ใบรับรองของคีย์ที่สร้างควรมีขอบเขตระดับแอปพลิเคชันและ รหัสที่ไม่ซ้ำกันของอุปกรณ์ที่มีกำหนดเวลา ตามที่ระบุไว้โดย แท็ก::UNIQUE_ID

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

แท็ก::KEY_SIZE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุขนาดของคีย์เป็นหน่วยบิต ซึ่งวัดด้วยวิธีปกติสำหรับฟังก์ชัน ของคีย์ ตัวอย่างเช่น Tag::KEY_SIZE จะระบุสำหรับคีย์ RSA ขนาดของโมดูลัสสาธารณะ สำหรับคีย์ AES จะระบุความยาว ของเนื้อหาคีย์ลับ

แท็ก::MAC_LENGTH

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุความยาวที่ขอของแท็กการตรวจสอบสิทธิ์ MAC หรือ GCM เป็นบิต

ค่าคือความยาว MAC ในหน่วยบิต เป็นผลคูณของ 8 และที่ ใหญ่เท่ากับค่าของ Tag::MIN_MAC_LENGTH ที่เชื่อมโยงกับคีย์

แท็ก::MAX_USES_PER_BOOT

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุจำนวนครั้งสูงสุดที่สามารถใช้คีย์ได้ระหว่างระบบ การรีบูต นี่เป็นอีกกลไกหนึ่งในการให้คะแนนการจำกัดการใช้คีย์

ค่านี้จะเป็นจำนวนเต็ม 32 บิตที่แสดงถึงการใช้งานต่อการเปิดเครื่อง

เมื่อมีการใช้คีย์ที่มีแท็กนี้ในการดำเนินงาน ตัวนับที่เชื่อมโยงกับคีย์ ควรเพิ่มขึ้นในระหว่าง เริ่มต้นการโทร หลังคีย์ ตัวนับเกินค่านี้ ความพยายามใช้คีย์ครั้งต่อๆ มาทั้งหมดไม่สำเร็จ กับ ErrorCode::MAX_OPS_EXCEEDED จนกว่าอุปกรณ์จะรีสตาร์ท ซึ่งหมายความว่า Trustlet ได้เก็บตารางตัวนับการใช้งานสำหรับคีย์ที่มีตัวระบุนี้ แท็ก เนื่องจากหน่วยความจำของ Keymaster มักมีจำกัด ตารางนี้จึงสามารถมี ขนาดสูงสุดและ Keymaster อาจล้มเหลวในการดำเนินการที่พยายามใช้คีย์ แท็กนี้เมื่อตารางเต็ม ตารางต้องมีคีย์อย่างน้อย 16 คีย์ หากการดำเนินการล้มเหลวเนื่องจากตารางเต็ม Keymaster จะแสดงผล ErrorCode::TOO_MANY_OPERATIONS

แท็ก::MIN_MAC_LENGTH

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

แท็กนี้ระบุความยาวขั้นต่ำของ MAC ที่สามารถขอหรือ ยืนยันด้วยคีย์นี้สำหรับคีย์ HMAC และคีย์ AES ที่รองรับโหมด GCM

ค่านี้จะยาวขั้นต่ำของ MAC ในหน่วยบิต ได้ผลคูณของ 8 สำหรับ คีย์ HMAC มีค่าอย่างน้อย 64 สำหรับคีย์ GCM ค่าคือ 96 เป็นอย่างน้อย และไม่เกิน 128 บัญชี

แท็ก::MIN_SECONDS_BETWEEN_OPS

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุระยะเวลาขั้นต่ำที่ผ่านไประหว่างที่ได้รับอนุญาต โดยใช้คีย์ ใช้เพื่อให้คะแนนจำกัดการใช้คีย์ในบริบทต่างๆ ที่การใช้งานแบบไม่จำกัดอาจทำให้เกิดการโจมตีแบบบรูตฟอร์ซ

ค่านี้ต้องเป็นจำนวนเต็ม 32 บิตซึ่งแสดงวินาทีระหว่างที่อนุญาต การดำเนินงาน

เมื่อใช้คีย์ที่มีแท็กนี้ในการทำงาน ให้เริ่มตัวจับเวลา ในระหว่างเสร็จสิ้น หรือ ล้มเลิกการโทร ช่วง begin ที่เป็นค่า ได้รับก่อนตัวจับเวลาแสดงว่าช่วงเวลาที่ระบุโดย Tag::MIN_SECONDS_BETWEEN_OPS ที่ผ่านมาล้มเหลวด้วย ErrorCode::KEY_RATE_LIMIT_EXCEEDED ช่วงเวลานี้ กล่าวเป็นนัยว่า Trustlet เก็บตารางตัวนับการใช้งานสำหรับคีย์ที่มีแท็กนี้ เนื่องจากหน่วยความจำของ Keymaster มักมีขีดจำกัด ตารางนี้จึงมีขีดจำกัดสูงสุดคงที่ ขนาดและ Keymaster อาจทำให้การดำเนินการที่พยายามใช้คีย์กับแท็กนี้ล้มเหลว เมื่อโต๊ะเต็ม ตารางต้องรองรับผู้ใช้อย่างน้อย 32 คน คีย์และใช้ช่องตารางซ้ำเชิงรุกเมื่อช่วงเวลาการใช้งานขั้นต่ำของคีย์หมดอายุ หากการดำเนินการล้มเหลวเนื่องจากตารางเต็ม Keymaster จะแสดงผล ErrorCode::TOO_MANY_OPERATIONS

แท็ก::NO_AUTH_REQUIRED

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุว่าไม่ต้องมีการตรวจสอบสิทธิ์เพื่อใช้คีย์นี้ แท็กนี้ แยกต่างหากจาก Tag::USER_SECURE_ID

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

แท็ก::NONCE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุหรือแสดงผล Nonce หรือ Initialization Vector (IV) สำหรับ AES GCM, CBC หรือการเข้ารหัสหรือถอดรหัส CTR แท็กนี้มอบให้แก่ เริ่ม ในระหว่างการดำเนินการเข้ารหัสและถอดรหัส มอบให้กับ เริ่ม หากคีย์มี Tag::CALLER_NONCE หากไม่ได้ระบุ ค่า Nonce หรือ IV ที่เหมาะสมจะสร้างขึ้นแบบสุ่มโดย Keymaster และแสดงผลจากจุดเริ่มต้น

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้ ความยาวที่อนุญาต ขึ้นอยู่กับโหมด: nonces ใน GCM มีความยาว 12 ไบต์ CBC และ CTR IV เท่ากับ 16 ความยาวไบต์

แท็ก::ORIGIN

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุตำแหน่งที่สร้างคีย์ หากทราบ ไม่สามารถระบุแท็กนี้ ในระหว่างการสร้างหรือนำเข้าคีย์ และต้องเพิ่มลงในลักษณะคีย์ โดย Trustlet

คีย์มาสเตอร์ 3

โปรดดูค่าที่เป็นไปได้ใน android::hardware::keymaster::v3_0::KeyOrigin:

enum class KeyOrigin : uint32_t {
    GENERATED = 0,
    DERIVED = 1,
    IMPORTED = 2,
    UNKNOWN = 3,
};
Keymaster 2 และรุ่นก่อนหน้า

ค่าที่เป็นไปได้กำหนดไว้ใน keymaster_origin_t:

typedef enum {
    KM_ORIGIN_GENERATED = 0,
    KM_ORIGIN_IMPORTED = 2,
    KM_ORIGIN_UNKNOWN = 3,
} keymaster_key_origin_t

ความหมายที่สมบูรณ์ของมูลค่าไม่เพียงขึ้นอยู่กับมูลค่า แต่ขึ้นอยู่กับว่า พบในรายการลักษณะเฉพาะที่บังคับใช้ด้วยฮาร์ดแวร์หรือซอฟต์แวร์

GENERATED บ่งชี้ว่า Keymaster สร้างคีย์ หากอยู่ในรายการที่บังคับใช้ฮาร์ดแวร์ คีย์ถูกสร้างขึ้นในฮาร์ดแวร์ที่ปลอดภัยและเชื่อมโยงกับฮาร์ดแวร์อย่างถาวร ถ้า ในรายการที่บังคับใช้ของซอฟต์แวร์ คีย์จะถูกสร้างขึ้นใน SoftKeymaster และ ไม่ได้เชื่อมโยงกับฮาร์ดแวร์

DERIVED บ่งชี้ว่าคีย์มาจาก Keymaster น่าจะอยู่นอกอุปกรณ์

IMPORTED บ่งบอกว่าคีย์สร้างขึ้นภายนอก ของ Keymaster และนำเข้าไปยัง Keymaster หากอยู่ในรายการฮาร์ดแวร์ที่บังคับใช้ รายการนั้นผูกโยงฮาร์ดแวร์อย่างถาวร แม้ว่าอาจมีสำเนาที่อยู่นอกฮาร์ดแวร์ที่ปลอดภัย หากอยู่ใน รายการที่บังคับใช้ของซอฟต์แวร์ ระบบนำเข้าคีย์ไปยัง SoftKeymaster และไม่ได้ เชื่อมโยงกับฮาร์ดแวร์

UNKNOWN ควรปรากฏในรายการที่ใช้ฮาร์ดแวร์เท่านั้น ซึ่งแสดงว่าคีย์คือ เชื่อมโยงกับฮาร์ดแวร์ แต่ไม่รู้ว่าคีย์เดิมสร้างขึ้นใน ฮาร์ดแวร์ที่ปลอดภัยหรือมีการนำเข้า กรณีนี้จะเกิดขึ้นเมื่อฮาร์ดแวร์ keymaster0 เท่านั้น ซึ่งใช้เพื่อจำลองบริการ keymaster1

แท็ก::ORIGINATION_EXPIRE_DATETIME

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุวันที่และเวลาที่คีย์หมดอายุสำหรับการลงชื่อและ เพื่อการเข้ารหัส หลังจากเวลาดังกล่าว ความพยายามในการใช้คีย์กับ KeyPurpose::SIGN หรือ มีการระบุ KeyPurpose::ENCRYPT to begin ล้มเหลว กับ ErrorCode::KEY_EXPIRED

ค่านี้จะเป็นจำนวนเต็ม 64 บิตซึ่งแสดงมิลลิวินาทีตั้งแต่ 1 มกราคม 1970

แท็ก::OS_PATCHLEVEL

เวอร์ชัน: 2, 3, 4

ทำซ้ำได้ ไม่

แท็กนี้จะไม่ถูกส่งไปยัง TA ของ keymaster แต่จะเพิ่มลงใน รายการการให้สิทธิ์ที่ใช้ฮาร์ดแวร์โดย TA

ค่าของแท็กคือจำนวนเต็มของรูปแบบ YYYYMM โดยที่ YYYY คือค่า ปีแบบ 4 หลักของการอัปเดตครั้งล่าสุด และ MM เป็นเลขเดือน 2 หลักของวันสุดท้าย อัปเดต ตัวอย่างเช่น สำหรับคีย์ที่สร้างขึ้นในอุปกรณ์ Android อัปเดตครั้งล่าสุดใน ค่าในเดือนธันวาคม 2015 จะเป็น 201512

คีย์ที่มีระดับแพตช์แตกต่างจากระดับแพตช์ปัจจุบันจะไม่ ใช้งานได้ การพยายามใช้สาเหตุหลักดังกล่าว begin getKeyCharacteristics หรือ exportKey เพื่อส่งคืน ErrorCode::KEY_REQUIRES_UPGRADE โปรดดู การเชื่อมโยงเวอร์ชันเพิ่มเติม รายละเอียด

แท็ก::OS_VERSION

เวอร์ชัน: 2, 3, 4

ทำซ้ำได้ ไม่

แท็กนี้จะไม่ถูกส่งไปยัง TA ของ keymaster แต่จะเพิ่มลงใน รายการการให้สิทธิ์ที่ใช้ฮาร์ดแวร์โดย TA

ค่าของแท็กคือจํานวนเต็มในรูปแบบ MMmmss โดยที่ MM เป็นค่าหลัก หมายเลขเวอร์ชัน mm คือหมายเลขเวอร์ชันย่อย และ ss คือเวอร์ชันย่อย หมายเลข ตัวอย่างเช่น สำหรับคีย์ที่สร้างใน Android เวอร์ชัน 4.0.3 ค่า จะเป็น 040003

แท็ก::PADDING

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ใช่

ระบุโหมดระยะห่างจากขอบที่อาจใช้กับคีย์ แท็กนี้ ที่เกี่ยวข้องกับคีย์ RSA และ AES

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class PaddingMode : uint32_t {
    NONE = 1,
    RSA_OAEP = 2,
    RSA_PSS = 3,
    RSA_PKCS1_1_5_ENCRYPT = 4,
    RSA_PKCS1_1_5_SIGN = 5,
    PKCS7 = 64,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_PAD_NONE = 1,
    KM_PAD_RSA_OAEP = 2,
    KM_PAD_RSA_PSS = 3,
    KM_PAD_RSA_PKCS1_1_5_ENCRYPT = 4,
    KM_PAD_RSA_PKCS1_1_5_SIGN = 5,
    KM_PAD_PKCS7 = 64,
} keymaster_padding_t;

PaddingMode::RSA_OAEP และ ใช้งาน PaddingMode::RSA_PKCS1_1_5_ENCRYPT สำหรับคีย์การเข้ารหัส/ถอดรหัส RSA เท่านั้น และระบุ RSA PKCS#1v2 OAEP ระยะห่างจากขอบและระยะห่างจากขอบของ RSA PKCS#1 v1.5 แบบสุ่มตามลำดับ PaddingMode::RSA_PSS และ PaddingMode::RSA_PKCS1_1_5_SIGN ใช้สำหรับ RSA เท่านั้น คีย์การลงชื่อ/ยืนยันและระบุ RSA PKCS#1v2 PSS PKCS#1 และ RSA PKCS#1 v1.5 เป็น Padding ตามลำดับ

PaddingMode::NONE ใช้ได้กับ RSA หรือ AES สำหรับคีย์ AES หากใช้ PaddingMode::NONE ด้วยโหมดบล็อก ECB หรือ CBC และข้อมูลที่จะเข้ารหัสหรือถอดรหัส ไม่ใช่การทวีคูณของขนาดบล็อก AES ความยาว คำขอเพื่อเสร็จสิ้น ล้มเหลวด้วย ErrorCode::INVALID_INPUT_LENGTH

PaddingMode::PKCS7 จะใช้ได้กับคีย์ AES เท่านั้น และ เฉพาะในโหมด ECB และ CBC เท่านั้น

แท็กนี้ใช้ซ้ำได้ ต้องระบุโหมดระยะห่างจากขอบในการเรียก begin หากโหมดที่ระบุไม่ได้รับอนุญาตสำหรับคีย์ การดำเนินการจะล้มเหลว ด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE

แท็ก::PURPOSE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ใช่

ระบุชุดวัตถุประสงค์ที่อาจใช้คีย์ดังกล่าว

ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้

คีย์มาสเตอร์ 3
enum class KeyPurpose : uint32_t {
    ENCRYPT = 0,
    DECRYPT = 1,
    SIGN = 2,
    VERIFY = 3,
    DERIVE_KEY = 4,  // since 3.0
    WRAP_KEY = 5,    // since 3.0
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    KM_PURPOSE_ENCRYPT = 0,
    KM_PURPOSE_DECRYPT = 1,
    KM_PURPOSE_SIGN = 2,
    KM_PURPOSE_VERIFY = 3,
} keymaster_purpose_t;

แท็กนี้ใช้ซ้ำได้ สามารถสร้างคีย์ได้ด้วยค่าหลายค่า แม้ว่าการดำเนินการมีวัตถุประสงค์เดียว เมื่อ เรียกใช้ฟังก์ชัน begin เพื่อเริ่มต้นการดำเนินการ จะมีการระบุวัตถุประสงค์ของการดำเนินการ หากวัตถุประสงค์ที่ระบุในการดำเนินการไม่ได้รับอนุญาตจาก การดำเนินการล้มเหลวด้วย ErrorCode::INCOMPATIBLE_PURPOSE

แท็ก::RESET_SINCE_ID_ROTATION

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ระบุว่ามีการรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นหรือไม่ นับตั้งแต่การหมุนเวียนรหัสที่ไม่ซ้ำกันครั้งล่าสุด ใช้สำหรับเอกสารรับรองคีย์

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

แท็ก::ROLLBACK_RESISTANT

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

บ่งบอกว่าคีย์ป้องกันการย้อนกลับ ซึ่งหมายความว่าเมื่อลบแล้ว โดย deleteKey หรือ deleteAllKeys เรารับประกันว่าคีย์จะถูกลบอย่างถาวรและใช้งานไม่ได้ เป็นไปได้ คีย์ที่ไม่มีแท็กนี้จะถูกลบออกและกู้คืนจากข้อมูลสำรองได้

แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)

แท็ก::ROOT_OF_TRUST

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุรูทของความน่าเชื่อถือ ซึ่งเป็นคีย์ที่ใช้ในการเปิดเครื่องที่ได้รับการยืนยันเพื่อ ตรวจสอบว่าระบบปฏิบัติการที่บูต (หากมี) ไม่เคยให้แท็กนี้ ไปยังหรือส่งคืนจาก Keymaster ในลักษณะเฉพาะที่สำคัญ

แท็ก::RSA_PUBLIC_EXPONENT

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุค่าของเลขชี้กำลังสาธารณะสำหรับคู่คีย์ RSA แท็กนี้ เกี่ยวข้องกับคีย์ RSA เท่านั้น และจําเป็นสําหรับคีย์ RSA ทั้งหมด

ค่านี้จะเป็นจำนวนเต็มที่ไม่มีเครื่องหมาย 64 บิตซึ่งเป็นไปตามข้อกำหนดของแอตทริบิวต์ เลขยกกำลังสาธารณะของ RSA ค่านี้ต้องเป็นจำนวนเฉพาะ Trustlet สนับสนุนฟังก์ชัน ค่า 2^16+1 และอาจรองรับค่าอื่นๆ ที่สมเหตุสมผล โดยเฉพาะค่า 3 หากไม่ได้ระบุเลขชี้กำลังหรือระบบไม่รองรับเลขชี้กำลังที่ระบุ สร้างคีย์ไม่สำเร็จด้วย ErrorCode::INVALID_ARGUMENT

แท็ก::UNIQUE_ID

เวอร์ชัน: 3, 4

ทำซ้ำได้ ไม่

ใช้เพื่อระบุรหัสที่ไม่ซ้ำกันในเอกสารรับรอง

ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้

แท็ก::USAGE_EXPIRE_DATETIME

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุวันที่และเวลาที่คีย์หมดอายุสำหรับการยืนยันและ เพื่อถอดรหัสได้ หลังจากเวลาดังกล่าว ความพยายามในการใช้คีย์กับ KeyPurpose::VERIFY หรือ KeyPurpose::DECRYPT มีไว้สำหรับ begin ล้มเหลว กับ ErrorCode::KEY_EXPIRED

ค่านี้จะเป็นจำนวนเต็ม 64 บิตซึ่งแสดงมิลลิวินาทีตั้งแต่ 1 มกราคม 1970

แท็ก::USER_AUTH_TYPE

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุประเภทตัวตรวจสอบสิทธิ์ผู้ใช้ที่อาจใช้เพื่อให้สิทธิ์นี้ เมื่อมีการขอให้ Keymaster ดำเนินการด้วยคีย์ที่มีคีย์นี้ แท็กจะรับโทเค็นการตรวจสอบสิทธิ์ และแท็ก ฟิลด์ authenticator_type ต้องตรงกับค่าในแท็ก เช่น (ntoh(token.authenticator_type) & auth_type_tag_value) != 0 โดยที่ ntoh คือฟังก์ชันที่ จะแปลงจำนวนเต็มที่เรียงลำดับเครือข่ายเป็นจำนวนเต็มที่เรียงลำดับตามโฮสต์และ auth_type_tag_value คือค่าของแท็กนี้

ค่าจะเป็นบิตมาสก์จำนวนเต็ม 32 บิตของค่าจากการแจงนับ ดังนี้

คีย์มาสเตอร์ 3
enum class HardwareAuthenticatorType : uint32_t {
    NONE = 0u, // 0
    PASSWORD = 1 << 0,
    FINGERPRINT = 1 << 1,
    ANY = UINT32_MAX,
};
Keymaster 2 และรุ่นก่อนหน้า
typedef enum {
    HW_AUTH_NONE = 0,
    HW_AUTH_PASSWORD = 1 << 0,
    HW_AUTH_FINGERPRINT = 1 << 1,
    // Additional entries should be powers of 2.
    HW_AUTH_ANY = UINT32_MAX,
} hw_authenticator_type_t;

แท็ก::USER_SECURE_ID

เวอร์ชัน: 1, 2, 3, 4

ทำซ้ำได้ ไม่

ระบุว่าสามารถใช้คีย์ภายใต้ผู้ใช้ที่ปลอดภัยรายหนึ่งๆ เท่านั้น สถานะการตรวจสอบสิทธิ์ แท็กนี้ใช้พร้อมกันไม่ได้ ที่มี Tag::NO_AUTH_REQUIRED

ค่านี้ต้องเป็นจำนวนเต็ม 64 บิตที่ระบุสถานะนโยบายการตรวจสอบสิทธิ์ ซึ่งจำเป็นต้องแสดงอยู่ในโทเค็นการตรวจสอบสิทธิ์ (ระบุให้กับ เริ่มต้น ด้วย Tag::AUTH_TOKEN) เพื่อให้สิทธิ์การใช้คีย์ ช่วง การโทรหาเริ่มต้น ด้วยคีย์ที่มีแท็กนี้ซึ่งไม่ได้ระบุค่า โทเค็นการตรวจสอบสิทธิ์ หรือระบุ โทเค็นการตรวจสอบสิทธิ์ไม่มีค่าสถานะนโยบายที่ตรงกัน จะล้มเหลว

แท็กนี้ใช้ซ้ำได้ หากค่าใดค่าหนึ่งที่ระบุตรงกับนโยบายใดๆ ในโทเค็นการตรวจสอบสิทธิ์ คีย์ดังกล่าวได้รับสิทธิ์ให้ใช้งานแล้ว มิฉะนั้น การดำเนินการจะล้มเหลวโดย ErrorCode::KEY_USER_NOT_AUTHENTICATED

แท็ก::VENDOR_PATCHLEVEL

เวอร์ชัน: 4

แท็กนี้ระบุระดับแพตช์ความปลอดภัยของอิมเมจผู้ให้บริการที่มีคีย์ แท็กนี้จะไม่ถูกส่งไปยัง TA ของ keymaster แต่จะเพิ่มลงใน รายการการให้สิทธิ์ที่ใช้ฮาร์ดแวร์โดย TA การพยายามใช้คีย์กับ ค่า Tag::VENDOR_PATCHLEVEL แตกต่างจากค่าที่ใช้งานอยู่ในปัจจุบัน ระดับแพตช์ของระบบต้องทำให้ begin() getKeyCharacteristics() หรือ exportKey() เพื่อส่งคืน ErrorCode::KEY_REQUIRES_UPGRADE โปรดดู upgradeKey() เพื่อดูรายละเอียด

ค่าของแท็กคือจำนวนเต็มของรูปแบบ YYYYMMDD โดยที่ YYYY คือค่า ปีของการอัปเดตครั้งล่าสุดเป็นเลข 4 หลัก MM คือเดือนที่มีเลข 2 หลัก และ DD คือตัวเลข วันแบบ 2 หลักของการอัปเดตครั้งล่าสุด ตัวอย่างเช่น สำหรับคีย์ที่สร้างใน อุปกรณ์ Android อัปเดตครั้งล่าสุดเมื่อวันที่ 5 มิถุนายน 2018 ค่าจะเป็น 20180605

IKeymasterDevice HAL ต้องอ่านระดับแพตช์ของผู้ให้บริการปัจจุบันจากระบบ ro.vendor.build.security_patch และส่งไปยัง สภาพแวดล้อมที่ปลอดภัยเมื่อโหลด HAL ครั้งแรก (ระบบคือ ที่กำหนดโดยการติดตั้งใช้งาน) สภาพแวดล้อมที่ปลอดภัยต้องไม่ยอมรับ Patchlevel จนกระทั่ง เปิดเครื่องครั้งถัดไป

ต้องใช้ฮาร์ดแวร์