แท็กการให้สิทธิ์คีย์มาสเตอร์

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

สำหรับ 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

สำหรับฟังก์ชัน โปรดดูหน้า ฟังก์ชันคีย์มาสเตอร์

แท็ก::ACTIVE_DATETIME

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::ALGORITHM

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

ทำซ้ำ ได้ ? ไม่

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

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

Keymaster 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 และการเรียกเพื่อ เริ่มต้น จำเป็นต้องระบุแท็กนี้และข้อมูลที่เกี่ยวข้องเหมือนกันซึ่งเป็นส่วนหนึ่งของชุด 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 ฟิลด์นี้ถูกตั้งค่าเมื่อขอการรับรองตัวระบุอุปกรณ์เท่านั้น

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_DEVICE

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

ทำซ้ำ ได้ ? ไม่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_IMEI

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

ทำซ้ำ ได้ ? ใช่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_MANUFACTURER

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

ทำซ้ำ ได้ ? ไม่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_MEID

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

ทำซ้ำ ได้ ? ใช่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_MODEL

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

ทำซ้ำ ได้ ? ไม่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_PRODUCT

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

ทำซ้ำ ได้ ? ไม่

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

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::ATTESTATION_ID_SERIAL

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

ทำซ้ำ ได้ ? ไม่

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

หากอุปกรณ์ไม่รองรับการรับรอง ID (หรือ destroyAttestationIds() ถูกเรียกก่อนหน้านี้ และอุปกรณ์ไม่สามารถยืนยัน ID ได้อีกต่อไป) คำขอการรับรองคีย์ที่มีแท็กนี้จะล้มเหลวด้วย 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

ทำซ้ำ ได้ ? ไม่

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

ค่าเป็นหยดที่มีโครงสร้าง hw_auth_token_t

แท็ก::BLOB_USAGE_REQUIREMENTS

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

ทำซ้ำ ได้ ? ไม่

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

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

Keymaster 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 trustlet จะส่งคืน key blob ที่สามารถใช้ได้โดยไม่ต้องรองรับระบบไฟล์ นี่เป็นสิ่งสำคัญสำหรับอุปกรณ์ที่มีดิสก์เข้ารหัส ซึ่งระบบไฟล์อาจไม่พร้อมใช้งานจนกว่าจะใช้คีย์มาสเตอร์คีย์เพื่อถอดรหัสดิสก์

แท็ก::BLOCK_MODE

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

ทำซ้ำ ได้ ? ใช่

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

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

Keymaster 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 ของ start หากโหมดที่ระบุไม่อยู่ในโหมดที่เกี่ยวข้องกับคีย์ การดำเนินการจะล้มเหลวด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE

แท็ก::BOOT_PATCHLEVEL

เวอร์ชัน : 4

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

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

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

ต้องมีการบังคับใช้ฮาร์ดแวร์

แท็ก::BOOTLOADER_ONLY

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

ทำซ้ำ ได้ ? ไม่

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

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

ความพยายามในการใช้คีย์กับ Tag::BOOTLOADER_ONLY จากระบบ Android ล้มเหลวด้วย ErrorCode::INVALID_KEY_BLOB

แท็ก::CALLER_NONCE

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

ทำซ้ำ ได้ ? ไม่

ระบุว่าผู้เรียกสามารถจัดเตรียม nonce สำหรับการดำเนินการที่ไม่ต้องการ

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

แท็กนี้ใช้สำหรับคีย์ 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

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

Keymaster 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 หรือทั้งสองอย่าง

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

Keymaster 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

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

แท็ก::INCLUDE_UNIQUE_ID

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::KEY_SIZE

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

ทำซ้ำ ได้ ? ไม่

ระบุขนาดของคีย์ เป็นบิต วัดด้วยวิธีปกติสำหรับอัลกอริทึมของคีย์ ตัวอย่างเช่น สำหรับคีย์ RSA Tag::KEY_SIZE จะระบุขนาดของโมดูลัสสาธารณะ สำหรับคีย์ 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 บิต แทนวินาทีระหว่างการดำเนินการที่อนุญาต

เมื่อใช้คีย์ที่มีแท็กนี้ในการดำเนินการ ให้เริ่มจับเวลาระหว่าง เสร็จสิ้น หรือ ยกเลิก การโทร การเรียกใด ๆ เพื่อ เริ่มต้น ที่ได้รับก่อนจับเวลาบ่งชี้ว่าช่วงที่ระบุโดย 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

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

แท็ก::NONCE

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

ทำซ้ำ ได้ ? ไม่

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ ความยาวที่อนุญาตขึ้นอยู่กับโหมด: GCM nonce มีความยาว 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 ที่ให้ไว้เพื่อ เริ่มต้นจะ ล้มเหลวด้วย ErrorCode::KEY_EXPIRED

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

แท็ก::OS_PATCHLEVEL

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

ทำซ้ำ ได้ ? ไม่

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

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

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

แท็ก::OS_VERSION

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::PADDING

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

ทำซ้ำ ได้ ? ใช่

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

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

Keymaster 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 padding และ RSA PKCS#1 v1.5 randomized padding ตามลำดับ PaddingMode::RSA_PSS และ PaddingMode::RSA_PKCS1_1_5_SIGN ใช้สำหรับคีย์การลงนาม/การยืนยัน RSA เท่านั้น และระบุ RSA PKCS#1v2 PSS padding และ RSA PKCS#1 v1.5 deterministic padding ตามลำดับ

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

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

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

แท็ก::วัตถุประสงค์

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

ทำซ้ำ ได้ ? ใช่

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

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

Keymaster 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;

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

แท็ก::RESET_SINCE_ID_ROTATION

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::ROLLBACK_RESISTANT

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::ROOT_OF_TRUST

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

ทำซ้ำ ได้ ? ไม่

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

แท็ก::RSA_PUBLIC_EXPONENT

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::UNIQUE_ID

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

ทำซ้ำ ได้ ? ไม่

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

ค่านี้เป็น Blob ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามอำเภอใจ

แท็ก::USAGE_EXPIRE_DATETIME

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

ทำซ้ำ ได้ ? ไม่

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

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

แท็ก::USER_AUTH_TYPE

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

ทำซ้ำ ได้ ? ไม่

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

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

Keymaster 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

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

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

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

ต้องมีการบังคับใช้ฮาร์ดแวร์