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