หน้านี้ให้รายละเอียดเพื่อช่วยเหลือผู้ติดตั้ง 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 3enum 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 3enum 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 3enum 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 3enum 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 3enum 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 3enum 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 3enum 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 3enum 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 เป็นครั้งแรก (กลไกถูกกำหนดการใช้งาน) สภาพแวดล้อมที่ปลอดภัยต้องไม่ยอมรับระดับแพตช์อื่นจนกว่าจะบูตครั้งถัดไป
ต้องมีการบังคับใช้ฮาร์ดแวร์