แท็กการอนุญาตคีย์มาสเตอร์

หน้านี้ให้รายละเอียดเพื่อช่วยเหลือผู้ใช้งาน Keymaster HAL โดยครอบคลุมแต่ละแท็กใน 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

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

แท็ก::ACTIVE_DATETIME

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

ทำซ้ำได้ ? เลขที่

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

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

Tag::อัลกอริทึม

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

ทำซ้ำได้ ? เลขที่

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

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

คีย์มาสเตอร์ 3
enum class Algorithm : uint32_t {
    RSA = 1,
    EC = 3,
    AES = 32,
    HMAC = 128,
};
คีย์มาสเตอร์ 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

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

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

แท็ก::APPLICATION_ID

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

ทำซ้ำได้ ? เลขที่

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

เนื้อหาของแท็กนี้ผูกไว้กับคีย์ โดยการเข้ารหัส ซึ่งหมายความว่าเป็นฝ่ายตรงข้ามที่สามารถเข้าถึงความลับของโลกที่ปลอดภัยทั้งหมด—แต่ไม่สามารถเข้าถึงเนื้อหาของแท็กได้—ไม่สามารถถอดรหัสคีย์ได้ (โดยไม่ต้องบังคับเนื้อหาของแท็กอย่างดุร้าย ).

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

แท็ก::ASSOCIATED_DATA

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::ATTESTATION_APPLICATION_ID

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::ATTESTATION_CHALLENGE

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

ทำซ้ำได้ ? เลขที่

ใช้เพื่อโต้แย้งในการรับรอง

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

แท็ก::ATTESTATION_ID_BRAND

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::ATTESTATION_ID_DEVICE

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::ATTESTATION_ID_IMEI

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

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

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

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

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

แท็ก::ATTESTATION_ID_MANUFACTURER

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::ATTESTATION_ID_MEID

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

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

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

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

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

แท็ก::ATTESTATION_ID_MODEL

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::ATTESTATION_ID_PRODUCT

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::ATTESTATION_ID_SERIAL

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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::AUTH_TIMEOUT

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

ทำซ้ำได้ ? เลขที่

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

ทำซ้ำได้ ? เลขที่

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

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

คีย์มาสเตอร์ 3
enum class KeyBlobUsageRequirements : uint32_t {
    STANDALONE = 0,
    REQUIRES_FILE_SYSTEM = 1,
};
คีย์มาสเตอร์ 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 จะส่งกลับคีย์ Blob ที่สามารถใช้ได้โดยไม่ต้องรองรับระบบไฟล์ นี่เป็นสิ่งสำคัญสำหรับอุปกรณ์ที่มีดิสก์ที่เข้ารหัส ซึ่งระบบไฟล์อาจไม่พร้อมใช้งานจนกว่าจะมีการใช้คีย์ Keymaster เพื่อถอดรหัสดิสก์

แท็ก::BLOCK_MODE

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

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

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

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

คีย์มาสเตอร์ 3
enum class BlockMode : uint32_t {
    ECB = 1,
    CBC = 2,
    CTR = 3,
    GCM = 32,
};
คีย์มาสเตอร์ 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 ของ beginning หากโหมดที่ระบุไม่อยู่ในโหมดที่เกี่ยวข้องกับคีย์ การดำเนินการจะล้มเหลวด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE

แท็ก::BOOT_PATCHLEVEL

เวอร์ชั่น : 4

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

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

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

จะต้องบังคับใช้ฮาร์ดแวร์

แท็ก::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

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

คีย์มาสเตอร์ 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,
};
คีย์มาสเตอร์ 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 ของ beginning หากการแยกย่อยที่ระบุไม่อยู่ในการแยกย่อยที่เชื่อมโยงกับคีย์ การดำเนินการจะล้มเหลวด้วย ErrorCode::INCOMPATIBLE_DIGEST

แท็ก::EC_CURVE

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

ทำซ้ำได้ ? เลขที่

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

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

คีย์มาสเตอร์ 3
enum class EcCurve : uint32_t {
    P_224 = 0,
    P_256 = 1,
    P_384 = 2,
    P_521 = 3,
};
คีย์มาสเตอร์ 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

ทำซ้ำได้ ? เลขที่

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

ค่านี้เป็นจำนวนเต็ม 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 และส่งคืนตั้งแต่เริ่มต้น

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

แท็ก::ต้นกำเนิด

เวอร์ชัน : 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

ทำซ้ำได้ ? เลขที่

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

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

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

แท็ก::OS_VERSION

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

ทำซ้ำได้ ? เลขที่

แท็กนี้จะไม่ถูกส่งไปยังคีย์มาสเตอร์ TA แต่จะถูกเพิ่มลงในรายการอนุญาตที่บังคับใช้ฮาร์ดแวร์โดย 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,
};
คีย์มาสเตอร์ 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 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

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

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

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

คีย์มาสเตอร์ 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
};
คีย์มาสเตอร์ 2 และก่อนหน้า
typedef enum {
    KM_PURPOSE_ENCRYPT = 0,
    KM_PURPOSE_DECRYPT = 1,
    KM_PURPOSE_SIGN = 2,
    KM_PURPOSE_VERIFY = 3,
} keymaster_purpose_t;

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

แท็ก::RESET_SINCE_ID_ROTATION

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::ROLLBACK_RESISTANT

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::ROOT_OF_TRUST

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::USAGE_EXPIRE_DATETIME

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

ทำซ้ำได้ ? เลขที่

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

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

แท็ก::USER_AUTH_TYPE

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

ทำซ้ำได้ ? เลขที่

ระบุประเภทของตัวตรวจสอบสิทธิ์ผู้ใช้ที่อาจใช้ในการอนุญาตคีย์นี้ เมื่อ Keymaster ได้รับการร้องขอให้ดำเนินการกับคีย์ด้วยแท็กนี้ 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,
};
คีย์มาสเตอร์ 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 แต่จะถูกเพิ่มลงในรายการอนุญาตที่บังคับใช้ฮาร์ดแวร์โดย TA ความพยายามใดๆ ในการใช้คีย์ที่มีค่า Tag::VENDOR_PATCHLEVEL แตกต่างจากระดับแพตช์ของระบบที่ทำงานอยู่ในปัจจุบัน จะต้องทำให้ begin() , getKeyCharacteristics() หรือ exportKey() ส่งคืน ErrorCode::KEY_REQUIRES_UPGRADE ดู upgradeKey() สำหรับรายละเอียด

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

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

จะต้องบังคับใช้ฮาร์ดแวร์