หน้านี้แสดงรายละเอียดเพื่อช่วยเหลือผู้ที่ติดตั้งใช้งาน 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
แท็ก::ALGORITHM
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุอัลกอริทึมการเข้ารหัสที่ใช้คีย์
ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้
คีย์มาสเตอร์ 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
และการเรียก
ถึง begin จะต้องระบุ
แท็กนี้และข้อมูลที่เชื่อมโยงเดียวกันเป็นส่วนหนึ่งของ 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 จะมีการตั้งค่าช่องนี้เมื่อขอเอกสารรับรองของ
ตัวระบุของอุปกรณ์
หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ
ก่อนหน้านี้มีการโทร destroyAttestationIds()
และอุปกรณ์
ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี
แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS
ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้
แท็ก::ATTESTATION_ID_DEVICE
เวอร์ชัน: 3, 4
ทำซ้ำได้ ไม่
ระบุชื่ออุปกรณ์ตามที่ Build.DEVICE
แสดงผล
ใน Android จะมีการตั้งค่าช่องนี้เมื่อขอเอกสารรับรองของ
ตัวระบุของอุปกรณ์
หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ
ก่อนหน้านี้มีการโทร destroyAttestationIds()
และอุปกรณ์
ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี
แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS
ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้
แท็ก::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 ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้
แท็ก::ATTESTATION_ID_MEID
เวอร์ชัน: 3, 4
ทำซ้ำได้ ใช่
ระบุ MEID สำหรับสัญญาณวิทยุทั้งหมดในอุปกรณ์ ช่องนี้จะได้รับการตั้งค่าเท่านั้น เมื่อขอเอกสารรับรองของตัวระบุของอุปกรณ์
หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ
ก่อนหน้านี้มีการโทร destroyAttestationIds()
และอุปกรณ์
ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี
แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS
ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้
แท็ก::ATTESTATION_ID_MODEL
เวอร์ชัน: 3, 4
ทำซ้ำได้ ไม่
ระบุชื่อรุ่นของอุปกรณ์ ตามที่แสดงโดย
Build.MODEL
ใน Android ฟิลด์นี้จะตั้งค่าเมื่อ
ที่ขอเอกสารรับรองของตัวระบุของอุปกรณ์
หากอุปกรณ์ไม่รองรับเอกสารรับรองรหัส (หรือ
ก่อนหน้านี้มีการโทร destroyAttestationIds()
และอุปกรณ์
ไม่ได้รับรองรหัสอีกต่อไป) คำขอเอกสารรับรองคีย์ใดๆ ที่มี
แท็กนี้ทำงานไม่สำเร็จด้วย ErrorCode::CANNOT_ATTEST_IDS
ค่านี้คือ BLOB ซึ่งเป็นอาร์เรย์ของไบต์ที่มีความยาวเท่าใดก็ได้
แท็ก::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 ว่าสามารถใช้คีย์ดังกล่าวได้
แท็ก::AUTH_TOKEN
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
มี การตรวจสอบสิทธิ์ โทเค็นเป็น begin update หรือ เสร็จสิ้น เพื่อพิสูจน์การตรวจสอบสิทธิ์ผู้ใช้สำหรับการดำเนินการคีย์ที่จำเป็นต้องใช้ (คีย์มี แท็ก::USER_SECURE_ID)
ค่านี้คือ BLOB ที่มีโครงสร้าง hw_auth_token_t
แท็ก::BLOB_USAGE_REQUIREMENTS
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุเงื่อนไขสภาพแวดล้อมของระบบที่จำเป็นสำหรับไฟล์สร้าง ที่จะนำไปใช้
ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้
คีย์มาสเตอร์ 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
ความน่าเชื่อถือแสดงผล BLOB คีย์
ที่สามารถใช้ได้โดยไม่มีการรองรับระบบไฟล์ การดำเนินการนี้สำคัญสำหรับอุปกรณ์
กับดิสก์ที่เข้ารหัส ซึ่งอาจไม่สามารถใช้ระบบไฟล์ได้จนกว่า
หลังจากที่ใช้คีย์ Keymaster ในการถอดรหัสดิสก์
แท็ก::BLOCK_MODE
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ใช่
ระบุโหมดการเข้ารหัสแบบบล็อกที่อาจนําคีย์ไปใช้ แท็กนี้เกี่ยวข้องกับคีย์ AES เท่านั้น
ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้
คีย์มาสเตอร์ 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
ของ
begin
หากโหมดที่ระบุไม่ได้อยู่ในโหมดที่เชื่อมโยงกับคีย์
การดำเนินการล้มเหลวด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE
แท็ก::BOOT_PATCHLEVEL
เวอร์ชัน: 4
แท็ก::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 จะต้องระบุระดับแพตช์ของอิมเมจการเปิดเครื่อง กับสภาพแวดล้อมที่ปลอดภัย (กำหนดกลไกการทำงานแล้ว)
ต้องใช้ฮาร์ดแวร์
แท็ก::BOOTLOADER_ONLY
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุเฉพาะ Bootloader เท่านั้นที่ใช้คีย์ได้
แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)
การพยายามใช้คีย์กับ 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
ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้
คีย์มาสเตอร์ 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
หรือทั้ง 2 อย่าง
ค่าที่เป็นไปได้จะกำหนดโดยการแจงนับต่อไปนี้
คีย์มาสเตอร์ 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
หากคำขอมีทั้ง 2 อย่าง ให้ใช้เส้นโค้งที่ระบุโดย
Tag::EC_CURVE
แล้วตรวจสอบว่าขนาดคีย์ที่ระบุ
ที่เหมาะสมกับกราฟนั้น หากไม่ ให้ส่งคืน
ErrorCode::INVALID_ARGUMENT
แท็ก::INCLUDE_UNIQUE_ID
เวอร์ชัน: 2, 3, 4
ทำซ้ำได้ ไม่
มีการระบุแท็กนี้ระหว่างการสร้างคีย์เพื่อระบุว่าเอกสารรับรอง ใบรับรองของคีย์ที่สร้างควรมีขอบเขตระดับแอปพลิเคชันและ รหัสที่ไม่ซ้ำกันของอุปกรณ์ที่มีกำหนดเวลา ตามที่ระบุไว้โดย แท็ก::UNIQUE_ID
แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)
แท็ก::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
แท็ก::NO_AUTH_REQUIRED
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุว่าไม่ต้องมีการตรวจสอบสิทธิ์เพื่อใช้คีย์นี้ แท็กนี้ แยกต่างหากจาก Tag::USER_SECURE_ID
แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)
แท็ก::NONCE
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุหรือแสดงผล Nonce หรือ Initialization Vector (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
แท็ก::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
โปรดดู
การเชื่อมโยงเวอร์ชันเพิ่มเติม
รายละเอียด
แท็ก::OS_VERSION
เวอร์ชัน: 2, 3, 4
ทำซ้ำได้ ไม่
แท็กนี้จะไม่ถูกส่งไปยัง TA ของ keymaster แต่จะเพิ่มลงใน รายการการให้สิทธิ์ที่ใช้ฮาร์ดแวร์โดย 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, };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
PKCS#1 และ RSA PKCS#1 v1.5 เป็น Padding ตามลำดับ
PaddingMode::NONE
ใช้ได้กับ RSA หรือ
AES สำหรับคีย์ AES หากใช้ PaddingMode::NONE
ด้วยโหมดบล็อก ECB หรือ CBC และข้อมูลที่จะเข้ารหัสหรือถอดรหัส
ไม่ใช่การทวีคูณของขนาดบล็อก AES ความยาว คำขอเพื่อเสร็จสิ้น
ล้มเหลวด้วย ErrorCode::INVALID_INPUT_LENGTH
PaddingMode::PKCS7
จะใช้ได้กับคีย์ AES เท่านั้น และ
เฉพาะในโหมด ECB และ CBC เท่านั้น
แท็กนี้ใช้ซ้ำได้ ต้องระบุโหมดระยะห่างจากขอบในการเรียก
begin
หากโหมดที่ระบุไม่ได้รับอนุญาตสำหรับคีย์ การดำเนินการจะล้มเหลว
ด้วย ErrorCode::INCOMPATIBLE_BLOCK_MODE
แท็ก::PURPOSE
เวอร์ชัน: 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 };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
ทำซ้ำได้ ไม่
ระบุว่ามีการรีเซ็ตอุปกรณ์เป็นค่าเริ่มต้นหรือไม่ นับตั้งแต่การหมุนเวียนรหัสที่ไม่ซ้ำกันครั้งล่าสุด ใช้สำหรับเอกสารรับรองคีย์
แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)
แท็ก::ROLLBACK_RESISTANT
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
บ่งบอกว่าคีย์ป้องกันการย้อนกลับ ซึ่งหมายความว่าเมื่อลบแล้ว โดย deleteKey หรือ deleteAllKeys เรารับประกันว่าคีย์จะถูกลบอย่างถาวรและใช้งานไม่ได้ เป็นไปได้ คีย์ที่ไม่มีแท็กนี้จะถูกลบออกและกู้คืนจากข้อมูลสำรองได้
แท็กนี้เป็นบูลีน ค่าที่เป็นไปได้จึงเป็นจริง (หากมีแท็ก) และ false (หากไม่มีแท็ก)
แท็ก::ROOT_OF_TRUST
เวอร์ชัน: 1, 2, 3, 4
ทำซ้ำได้ ไม่
ระบุรูทของความน่าเชื่อถือ ซึ่งเป็นคีย์ที่ใช้ในการเปิดเครื่องที่ได้รับการยืนยันเพื่อ ตรวจสอบว่าระบบปฏิบัติการที่บูต (หากมี) ไม่เคยให้แท็กนี้ ไปยังหรือส่งคืนจาก Keymaster ในลักษณะเฉพาะที่สำคัญ
แท็ก::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 ดำเนินการด้วยคีย์ที่มีคีย์นี้
แท็กจะรับโทเค็นการตรวจสอบสิทธิ์ และแท็ก
ฟิลด์ 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, };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
แท็กนี้ระบุระดับแพตช์ความปลอดภัยของอิมเมจผู้ให้บริการที่มีคีย์
แท็กนี้จะไม่ถูกส่งไปยัง 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
IKeymasterDevice HAL ต้องอ่านระดับแพตช์ของผู้ให้บริการปัจจุบันจากระบบ
ro.vendor.build.security_patch
และส่งไปยัง
สภาพแวดล้อมที่ปลอดภัยเมื่อโหลด HAL ครั้งแรก (ระบบคือ
ที่กำหนดโดยการติดตั้งใช้งาน) สภาพแวดล้อมที่ปลอดภัยต้องไม่ยอมรับ
Patchlevel จนกระทั่ง
เปิดเครื่องครั้งถัดไป
ต้องใช้ฮาร์ดแวร์