แท็กการให้สิทธิ์ 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

Tag::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 ใดที่ให้การเข้าถึงที่ปลอดภัย เซ็นเซอร์บนร่างกาย หรือเซ็นเซอร์บนร่างกาย มีความปลอดภัยมาก เป็นฟีเจอร์ที่บังคับใช้โดยซอฟต์แวร์เท่านั้น

Tag::ALL_USERS

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

ใช้ซ้ำได้ ไม่

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

แท็ก::APPLICATION_DATA

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

ทำซ้ำได้ ไม่

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

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

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

Tag::APPLICATION_ID

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

ใช้ซ้ำได้ ไม่

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

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

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

Tag::ASSOCIATED_DATA

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

ทำซ้ำได้ ไม่

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

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

Tag::ATTESTATION_APPLICATION_ID

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

ทำซ้ำได้ ไม่

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

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

Tag::ATTESTATION_CHALLENGE

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

ใช้ซ้ำได้ ไม่

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

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

Tag::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 ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามต้องการ

Tag::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 ซึ่งเป็นอาร์เรย์ไบต์ที่มีความยาวตามต้องการ

Tag::ATTESTATION_ID_MEID

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

ทำซ้ำได้ ใช่

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

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

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

Tag::ATTESTATION_ID_MODEL

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

ใช้ซ้ำได้ ไม่

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

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

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

Tag::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 ว่าสามารถใช้คีย์ดังกล่าวได้

Tag::AUTH_TOKEN

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

ทำซ้ำได้ ไม่

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

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

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

Tag::BOOT_PATCHLEVEL

เวอร์ชัน: 4

Tag::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 จะต้องระบุระดับแพตช์ของอิมเมจการเปิดเครื่อง กับสภาพแวดล้อมที่ปลอดภัย (กำหนดกลไกการทำงานแล้ว)

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

Tag::BOOTLOADER_ONLY

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

ใช้ซ้ำได้ ไม่

ระบุว่ามีเพียงโปรแกรมโหลดบูตเท่านั้นที่จะใช้คีย์ได้

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

การพยายามใช้คีย์กับ 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 จากคีย์ที่ระบุ ขนาด 100 x 240 นับจากนี้ไป Keymaster 2 จึงเพิ่มความยืดหยุ่น จึงได้เปิดตัว ในการระบุเส้นโค้ง คำขอสร้างคีย์ EC อาจมี Tag::EC_CURVE, Tag::KEY_SIZE หรือทั้ง 2 อย่าง

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

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

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

Tag::INCLUDE_UNIQUE_ID

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

ใช้ซ้ำได้ ไม่

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

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

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

Tag::NO_AUTH_REQUIRED

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

ทำซ้ำได้ ไม่

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

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

แท็ก::NONCE

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

ทำซ้ำได้ ไม่

ให้หรือแสดงผล Nonce หรือเวกเตอร์การเริ่มต้น (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

Tag::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 โปรดดู การเชื่อมโยงเวอร์ชันเพิ่มเติม รายละเอียด

Tag::OS_VERSION

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

ทำซ้ำได้ ไม่

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

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

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

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

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

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

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

ทำซ้ำได้ ไม่

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

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

แท็ก::ROLLBACK_RESISTANT

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

ทำซ้ำได้ ไม่

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

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

แท็ก::ROOT_OF_TRUST

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

ทำซ้ำได้ ไม่

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

Tag::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 ดำเนินการกับคีย์ที่มีแท็กนี้ 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;

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

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

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