หน้านี้แสดงรายละเอียดเพื่อช่วยเหลือผู้ที่ติดตั้งใช้งาน Keymaster เลเยอร์นามธรรมฮาร์ดแวร์ (HAL) ซึ่งครอบคลุมแต่ละฟังก์ชันในส่วน API และเวอร์ชัน Keymaster ที่ฟังก์ชันนั้นพร้อมใช้งานใน และ จะอธิบายการใช้งานเริ่มต้น สำหรับแท็ก โปรดดูส่วน แท็ก Keymaster
หลักเกณฑ์การใช้งานทั่วไป
ทุกฟังก์ชันใน API จะต้องปฏิบัติตามหลักเกณฑ์ต่อไปนี้
พารามิเตอร์ตัวชี้อินพุต
เวอร์ชัน: 1, 2
พารามิเตอร์ตัวชี้อินพุตที่ไม่ได้ใช้สำหรับการเรียกที่ระบุอาจ
NULL
ผู้โทรไม่จำเป็นต้องระบุตัวยึดตำแหน่ง
เช่น คีย์บางประเภทและโหมดอาจไม่ใช้ค่าใดๆ จาก
inParams
เป็น begin ดังนั้นผู้โทรอาจ
ตั้งค่า inParams
เป็น NULL
หรือระบุพารามิเตอร์ที่ว่างเปล่า
ตั้งค่า ผู้โทรยังระบุพารามิเตอร์ที่ไม่ได้ใช้ได้อีกด้วย โดยเมธอด Keymaster ควร
ไม่ใช่ข้อผิดพลาด
หากพารามิเตอร์อินพุตที่จำเป็นคือ NULL เมธอด Keymaster ควรแสดงผล
ErrorCode::UNEXPECTED_NULL_POINTER
เริ่มต้นใน Keymaster 3 จะไม่มีพารามิเตอร์ตัวชี้ พารามิเตอร์ทั้งหมด มีการส่งผ่านด้วยค่าหรือการอ้างอิง Const
พารามิเตอร์ตัวชี้เอาต์พุต
เวอร์ชัน: 1, 2
คล้ายกับพารามิเตอร์ตัวชี้อินพุต พารามิเตอร์ตัวชี้เอาต์พุตที่ไม่ได้ใช้
อาจเป็นNULL
หากเมธอดจำเป็นต้องส่งคืนข้อมูลในเอาต์พุต
พบว่าพารามิเตอร์เป็น NULL
พารามิเตอร์ควรแสดงผล
ErrorCode::OUTPUT_PARAMETER_NULL
เริ่มต้นใน Keymaster 3 จะไม่มีพารามิเตอร์ตัวชี้ พารามิเตอร์ทั้งหมด มีการส่งผ่านด้วยค่าหรือการอ้างอิง Const
การใช้ API ในทางที่ผิด
เวอร์ชัน: 1, 2, 3
มีหลายวิธีที่ผู้โทรจะส่งคำขอที่ไม่สมเหตุสมผล หรือ นั้นโง่ แต่ก็ไม่ได้ผิดทางเทคนิค การติดตั้งใช้งาน Keymaster ไม่เป็นไปตาม ไม่สำเร็จในกรณีดังกล่าวหรือดำเนินการวินิจฉัย ใช้คีย์ขนาดเล็กเกินไป การกำหนดพารามิเตอร์อินพุตที่ไม่เกี่ยวข้อง การใช้ IV หรือ nonces ซ้ำ การสร้างคีย์โดยไม่มีวัตถุประสงค์ใดๆ (จึงไร้ประโยชน์) และไม่ควรจะมี วินิจฉัยจากการติดตั้งใช้งาน การละเว้นพารามิเตอร์ที่จำเป็น ข้อกำหนดของ พารามิเตอร์ที่จำเป็นไม่ถูกต้อง และต้องวินิจฉัยข้อผิดพลาดที่คล้ายกัน
เฟรมเวิร์ก และคีย์สโตร์ของ Android มีหน้าที่ดังนี้ ตรวจสอบว่าการเรียกโมดูล Keymaster มีเหตุผลและเป็นประโยชน์
ฟังก์ชัน
รับฟีเจอร์ฮาร์ดแวร์
เวอร์ชัน: 3
เมธอด getHardwareFeatures
ใหม่จะแสดงให้ลูกค้าบางส่วนเห็น
ลักษณะสำคัญของฮาร์ดแวร์ความปลอดภัยพื้นฐาน
เมธอดนี้ไม่ต้องใช้อาร์กิวเมนต์และแสดงผลค่า 4 ค่า โดยเป็นบูลีนทั้งหมด ดังนี้
isSecure
มีค่าเป็นtrue
หากเก็บคีย์ไว้ใน ฮาร์ดแวร์ที่ปลอดภัย (TEE ฯลฯ) ไว้เสมอsupportsEllipticCurve
มีค่าเป็นtrue
หาก ฮาร์ดแวร์รองรับการเข้ารหัสแบบ Elliptic Curve ด้วยเส้นโค้ง NIST (P-224 P-256, P-384 และ P-521)supportsSymmetricCryptography
true
ในกรณีที่ฮาร์ดแวร์รองรับวิทยาการเข้ารหัสแบบสมมาตร ซึ่งรวมถึง AES และ HMACsupportsAttestation
มีค่าเป็นtrue
หาก ฮาร์ดแวร์รองรับการสร้างใบรับรองเอกสารรับรองคีย์สาธารณะ Keymaster ลงนามด้วยคีย์ที่แทรกอยู่ในสภาพแวดล้อมที่ปลอดภัย
รหัสข้อผิดพลาดเดียวที่วิธีนี้อาจแสดงได้คือ ErrorCode:OK
ErrorCode::KEYMASTER_NOT_CONFIGURED
หรือรหัสข้อผิดพลาดรายการใดรายการหนึ่ง
แสดงว่าสื่อสารกับฮาร์ดแวร์รักษาความปลอดภัยไม่สำเร็จ
getHardwareFeatures() generates(bool isSecure, bool supportsEllipticCurve, bool supportsSymmetricCryptography, bool supportsAttestation, bool supportsAllDigests, string keymasterName, string keymasterAuthorName);
กำหนดค่า
เวอร์ชัน: 2
ฟังก์ชันนี้เปิดตัวใน Keymaster 2 และเลิกใช้งานแล้วใน Keymaster 3 เนื่องจากข้อมูลนี้มีอยู่ในไฟล์คุณสมบัติของระบบ และผู้ผลิต จะอ่านไฟล์ดังกล่าวระหว่างเริ่มต้นได้
กำหนดค่าคีย์มาสเตอร์ ระบบจะเรียกวิธีนี้เพียงครั้งเดียวหลังจากเปิดอุปกรณ์
และก่อนที่จะนำไปใช้ ใช้เพื่อ
KM_TAG_OS_VERSION และ
KM_TAG_OS_PATCHLEVEL ถึง
คีย์มาสเตอร์ เมธอดอื่นๆ ทั้งหมดจะแสดงผล จนกว่าจะมีการเรียกใช้เมธอดนี้
KM_ERROR_KEYMASTER_NOT_CONFIGURED
ค่าที่ระบุโดย
คีย์มาสเตอร์จะยอมรับเมธอดได้เพียงครั้งเดียวต่อการเปิดเครื่อง ลำดับต่อมา
โทรกลับ KM_ERROR_OK
แต่ไม่ทำอะไรเลย
การใช้งานคีย์มาสเตอร์ใช้ฮาร์ดแวร์ที่ปลอดภัยและเป็นเวอร์ชันระบบปฏิบัติการหรือไม่
ค่าระดับแพตช์ที่ระบุไม่ตรงกับค่าที่ให้ไว้กับ
ฮาร์ดแวร์โดย Bootloader (หรือหาก Bootloader ไม่ระบุค่า)
เมธอดนี้จะส่งคืน KM_ERROR_INVALID_ARGUMENT
และเมธอดอื่นๆ ทั้งหมด
เมธอดยังคงแสดงผล KM_ERROR_KEYMASTER_NOT_CONFIGURED
keymaster_error_t (*configure)(const struct keymaster2_device* dev, const keymaster_key_param_set_t* params);
เพิ่มRngEntropy
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ add_rng_entropy
และเปลี่ยนชื่อใน Keymaster 3
เพิ่มเอนโทรปีที่ได้จากผู้โทรไปยังพูลที่การใช้งาน Keymaster 1 ใช้ สำหรับสร้างตัวเลขแบบสุ่ม สำหรับคีย์ IV ฯลฯ
การติดตั้งใช้งาน Keymaster ต้องผสมผสานสัญญาณที่ให้ไว้อย่างปลอดภัย
เอนโทรปีลงในพูลของมัน ซึ่งจะต้องมี
เอนโทรปีที่สร้างขึ้นภายในจากเครื่องมือสร้างหมายเลขสุ่มของฮาร์ดแวร์
ควรจัดการการผสมผสานเพื่อให้ผู้โจมตีที่ควบคุมได้โดยสมบูรณ์
ของบิตที่ให้ไว้ addRngEntropy
หรือที่ฮาร์ดแวร์สร้างขึ้น
แต่ไม่ใช่ทั้ง 2 การตั้งค่า ไม่มีข้อได้เปรียบที่ไม่ส่งผลเสียในการคาดการณ์ส่วนบิต
ที่สร้างขึ้นจากเอนโทรปีพูล
การติดตั้งใช้งาน Keymaster ที่พยายามจะประมาณเอนโทรปีใน
พูลภายในจะถือว่าข้อมูลมาจาก
addRngEntropy
ไม่มีเอนโทรปี การติดตั้งใช้งาน Keymaster อาจ
แสดงผล ErrorCode::INVALID_INPUT_LENGTH
หากได้รับโฆษณามากกว่า 2
KiB ของข้อมูลในการโทรครั้งเดียว
คีย์สร้าง
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ generate_key
และเปลี่ยนชื่อใน Keymaster 3
สร้างคีย์การเข้ารหัสใหม่ ระบุการให้สิทธิ์ที่เกี่ยวข้อง
ซึ่งจะผูกกับคีย์อย่างถาวร การติดตั้งใช้งาน Keymaster
เป็นไปไม่ได้ที่จะใช้คีย์ที่ไม่สอดคล้องกับการให้สิทธิ์
ที่ระบุในเวลาที่สร้าง เกี่ยวกับการให้สิทธิ์ที่
ไม่สามารถบังคับใช้ฮาร์ดแวร์ ภาระหน้าที่ของฮาร์ดแวร์ที่ปลอดภัยจะจำกัดไว้เพียง
ตรวจสอบให้แน่ใจว่าการให้สิทธิ์ที่ไม่สามารถบังคับใช้ได้ซึ่งเชื่อมโยงกับคีย์นั้นไม่สามารถ
ดังนั้นทุกการเรียก
getKeyCharacteristics
จะแสดงค่าเดิม นอกจากนี้ ลักษณะเฉพาะที่แสดงผลโดย
generateKey
จัดสรรการให้สิทธิ์อย่างถูกต้องระหว่าง
รายการที่ใช้ฮาร์ดแวร์และซอฟต์แวร์ โปรดดู
getKeyCharacteristics สำหรับรายละเอียดเพิ่มเติม
พารามิเตอร์ที่ระบุให้กับ generateKey
จะขึ้นอยู่กับประเภทของคีย์
กำลังสร้างขึ้น ส่วนนี้สรุปแท็กที่จําเป็นและไม่บังคับสำหรับ
คีย์แต่ละประเภท แท็ก::ALGORITHM
จำเป็นต้องระบุประเภท
คีย์ RSA
พารามิเตอร์ต่อไปนี้จำเป็นสำหรับการสร้างคีย์ RSA
- แท็ก::KEY_SIZE
ระบุขนาดของโมดูลัสสาธารณะในหน่วยบิต หากไม่ระบุ
เมธอดจะแสดง
ErrorCode::UNSUPPORTED_KEY_SIZE
ค่าที่รองรับคือ 1024, 2048, 3072 และ 4096 ค่าที่แนะนำ คือขนาดคีย์ทั้งหมดที่เป็นพหุคูณของ 8 - แท็ก::RSA_PUBLIC_EXPONENT
ระบุค่าเลขยกกำลังสาธารณะของ RSA หากไม่ระบุ เมธอด
แสดงผล
ErrorCode::INVALID_ARGUMENT
ค่าที่รองรับคือ 3 และ 65537 ค่าที่แนะนำคือ ค่าเฉพาะทั้งหมดที่ไม่เกิน 2^64
พารามิเตอร์ต่อไปนี้ไม่จำเป็นต่อการสร้างคีย์ RSA แต่
การสร้างคีย์ RSA โดยไม่มีคีย์จะทำให้คีย์ใช้ไม่ได้ อย่างไรก็ตาม
ฟังก์ชัน generateKey
ไม่แสดงผลข้อผิดพลาดหากพารามิเตอร์เหล่านี้
ละเว้น
- Tag::PURPOSE ระบุ วัตถุประสงค์ที่อนุญาต คีย์ RSA ต้องมีการรองรับวัตถุประสงค์ทั้งหมด ชุดค่าผสมใดก็ได้
- Tag::DIGEST ระบุ
อัลกอริทึมไดเจสต์ที่สามารถใช้กับคีย์ใหม่ได้ การใช้งาน
ที่ไม่รองรับอัลกอริทึมไดเจสต์ทั้งหมดจะต้องยอมรับการสร้างคีย์
คําขอที่มีไดเจสต์ที่ไม่รองรับ ไดเจสต์ที่ไม่รองรับควรเป็น
ในส่วน "ซอฟต์แวร์ที่เพิ่มประสิทธิภาพ" ในคุณลักษณะสำคัญที่แสดงผล
ที่เป็นเช่นนี้เพราะสามารถใช้คีย์กับไดเจสต์อื่นๆ เหล่านั้นได้ แต่ไดเจสต์
ที่ดำเนินการในซอฟต์แวร์ จากนั้นจะมีการเรียกใช้ฮาร์ดแวร์เพื่อดำเนินการ
ด้วย
Digest::NONE
- Tag::PADDING ระบุ
โหมดระยะห่างจากขอบที่อาจใช้กับคีย์ใหม่ การใช้งาน
ที่ไม่รองรับอัลกอริทึมไดเจสต์ทั้งหมดที่จะต้องวาง
PaddingMode::RSA_PSS
และPaddingMode::RSA_OAEP
นิ้ว รายการคุณลักษณะสำคัญที่บังคับใช้โดยซอฟต์แวร์ หากมี มีการระบุอัลกอริทึมไดเจสต์
คีย์ ECDSA
เฉพาะแท็ก::KEY_SIZE เท่านั้น ที่จำเป็นต่อการสร้างคีย์ ECDSA ซึ่งใช้เพื่อเลือกกลุ่ม EC ค่าที่รองรับคือ 224, 256, 384 และ 521 ซึ่งแสดงถึง เส้นโค้ง NIST p-224, p-256, p-384 และ p521 ตามลำดับ
แท็ก::DIGEST ก็จำเป็นสำหรับคีย์ ECDSA ที่มีประโยชน์ แต่ไม่จำเป็นสำหรับการสร้าง
คีย์ AES
เฉพาะแท็ก::KEY_SIZE
ที่จำเป็นต่อการสร้างคีย์ AES หากไม่ระบุ ระบบจะแสดงเมธอด
ErrorCode::UNSUPPORTED_KEY_SIZE
ค่าที่รองรับมีดังนี้
128 และ 256 พร้อมการสนับสนุนเสริมสำหรับคีย์ AES 192 บิต
พารามิเตอร์ต่อไปนี้เกี่ยวข้องกับคีย์ AES โดยเฉพาะ แต่ ที่จำเป็นในการสร้างขึ้นมา
Tag::BLOCK_MODE
ระบุโหมดการบล็อก อาจใช้คีย์ใหม่Tag::PADDING
จะระบุโหมดระยะห่างจากขอบที่อาจเพิ่มขึ้น ข้อมูลนี้เกี่ยวข้องกับโหมด ECB และ CBC เท่านั้น
หากระบุโหมดบล็อก GCM ให้ระบุฟิลด์
แท็ก::MIN_MAC_LENGTH
หากไม่ระบุ เมธอดจะแสดง ErrorCode::MISSING_MIN_MAC_LENGTH
ค่าแท็กคือผลคูณของ 8 และระหว่าง 96 ถึง 128
คีย์ HMAC
ต้องใช้พารามิเตอร์ต่อไปนี้ในการสร้างคีย์ HMAC
- แท็ก::KEY_SIZE ระบุขนาดคีย์เป็นบิต ค่าน้อยกว่า 64 และระบบไม่รองรับค่าที่ไม่ใช่พหุคูณของ 8 ทั้งหมด รองรับค่าพหุคูณของ 8 ตั้งแต่ 64 ถึง 512 ค่าที่มากกว่านี้อาจเป็น ที่รองรับ
- แท็ก::MIN_MAC_LENGTH ระบุความยาวขั้นต่ำของ MAC ที่สร้างหรือยืนยันได้ด้วยคีย์นี้ ค่าคือ ผลคูณของ 8 และอย่างน้อย 64
- แท็ก::DIGEST
ระบุอัลกอริทึมไดเจสต์สำหรับคีย์ ตรงทั้งหมด
ระบุไดเจสต์ 1 รายการ มิเช่นนั้นให้แสดงผล
ErrorCode::UNSUPPORTED_DIGEST
หากระบบไม่รองรับไดเจสต์ โดย Trustlet ส่งคืนErrorCode::UNSUPPORTED_DIGEST
ลักษณะสำคัญ
หากอาร์กิวเมนต์ลักษณะไม่ใช่ค่าว่าง generateKey
จะแสดงผล
ลักษณะของคีย์ที่สร้างขึ้นใหม่โดยแบ่งอย่างเหมาะสม
รายการที่ใช้ฮาร์ดแวร์และซอฟต์แวร์ โปรดดู
getKeyCharacteristics สำหรับคำอธิบาย
ว่าลักษณะเฉพาะใดบ้างที่อยู่ในลิสต์ ลักษณะเฉพาะที่แสดงผล
รวมพารามิเตอร์ทั้งหมดที่ระบุให้กับการสร้างคีย์ ยกเว้น
แท็ก::APPLICATION_ID และ
แท็ก::APPLICATION_DATA
หากแท็กเหล่านี้รวมอยู่ในพารามิเตอร์หลัก แท็กดังกล่าวจะถูกนำออกจาก
ลักษณะที่แสดงขึ้นมาเพื่อไม่ให้ค้นหาค่า
โดยการตรวจสอบ BLOB คีย์ที่แสดงผล อย่างไรก็ตาม คุกกี้ดังกล่าวอยู่ภายใต้การเข้ารหัส
ลงใน BLOB คีย์ เพื่อที่ว่าหากไม่มีการระบุค่าที่ถูกต้องเมื่อคีย์
ใช้แล้ว การใช้งานล้มเหลว ในทำนองเดียวกัน
Tag::ROOT_OF_TRUST คือ
เชื่อมโยงกับคีย์แบบเข้ารหัส แต่ไม่สามารถระบุได้ระหว่าง
การสร้างหรือนำเข้าคีย์และไม่มีการส่งคืน
นอกจากแท็กที่มีให้ Trustlet ยัง
เพิ่ม Tag::ORIGIN,
ที่มีค่า KeyOrigin::GENERATED
และหากคีย์ป้องกันการย้อนกลับได้
ป้องกันการย้อนกลับ
การป้องกันการย้อนกลับหมายถึงเมื่อลบคีย์ด้วย deleteKeyหรือ deleteAllKeys ซึ่งมีการรับประกันโดยฮาร์ดแวร์ที่ปลอดภัย ใช้งานไม่ได้อีก โดยทั่วไปการติดตั้งใช้งานที่ไม่มีการปฏิเสธการย้อนกลับ ส่งคืนเนื้อหาคีย์ที่สร้างขึ้นหรือนำเข้าไปยังผู้โทรเป็น BLOB คีย์ ที่มีการเข้ารหัสและตรวจสอบสิทธิ์แล้ว เมื่อคีย์สโตร์ลบ BLOB คีย์ คีย์นั้นจะ หายไป แต่ผู้โจมตีที่ก่อนหน้านี้สามารถสืบค้นเนื้อหาสำคัญดังกล่าวได้ อาจคืนค่าการเข้าถึงไปยังอุปกรณ์ได้
คีย์ป้องกันการย้อนกลับหากฮาร์ดแวร์ที่ปลอดภัยรับประกันว่าถูกลบไปแล้ว คีย์จะกู้คืนในภายหลังไม่ได้ ซึ่งโดยทั่วไปจะทำโดยการจัดเก็บคีย์เพิ่มเติม ข้อมูลเมตาในตำแหน่งที่เชื่อถือได้ซึ่งผู้โจมตีไม่สามารถดัดแปลงได้ เปิด อุปกรณ์เคลื่อนที่ ซึ่งกลไกนี้มักใช้การเล่นซ้ำหน่วยความจำที่มีการป้องกัน การบล็อก (RPMB) เนื่องจากหลักๆ แล้ว จำนวนคีย์ที่อาจสร้างขึ้นได้ ไม่จำกัดและพื้นที่เก็บข้อมูลที่เชื่อถือได้ซึ่งใช้สำหรับการป้องกันการย้อนกลับอาจมีจำกัด จะต้องใช้วิธีนี้ได้สำเร็จแม้จะมีการต้านทานย้อนกลับ ไม่สามารถให้คีย์ใหม่ ในกรณีดังกล่าว แท็ก::ROLLBACK_RESISTANT ไม่ควรเพิ่มไว้ในลักษณะเด่น
getKeyCharacteristics
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ
get_key_characteristics
และเปลี่ยนชื่อใน Keymaster 3
แสดงผลพารามิเตอร์และการให้สิทธิ์ที่เชื่อมโยงกับคีย์ที่ระบุ จะแบ่งออกเป็น 2 ชุด ได้แก่ แบบใช้ฮาร์ดแวร์กับซอฟต์แวร์ คำอธิบาย ค่าต่อไปนี้จะมีผลกับรายการลักษณะสำคัญที่แสดงโดย generateKey และ importKey
หากระบุ Tag::APPLICATION_ID
ในระหว่างการสร้างคีย์
หรือนำเข้า ระบบจะระบุค่าเดียวกันให้กับ
เมธอดนี้ในอาร์กิวเมนต์ clientId
มิเช่นนั้น แอตทริบิวต์
เมธอดจะแสดง ErrorCode::INVALID_KEY_BLOB
ในทำนองเดียวกัน
หากมีการจัดเตรียม Tag::APPLICATION_DATA
ไว้ระหว่างการสร้าง
หรือนำเข้า ระบบจะระบุค่าเดียวกันให้กับ
เมธอดนี้ในอาร์กิวเมนต์ appData
ลักษณะที่แสดงโดยวิธีการนี้จะอธิบายประเภทและ ของคีย์ที่ระบุ
กฎทั่วไปในการตัดสินว่าแท็กหนึ่งๆ เป็นของแท็ก รายการที่บังคับใช้ด้วยฮาร์ดแวร์หรือซอฟต์แวร์ คือถ้าความหมายของแท็ก ด้วยฮาร์ดแวร์ที่ปลอดภัย มั่นใจได้ทุกอย่าง เพราะมีการบังคับใช้ด้วยฮาร์ดแวร์ มิเช่นนั้น มีการบังคับใช้ซอฟต์แวร์ ด้านล่างนี้คือรายการของแท็กเฉพาะซึ่งมีการจัดสรรที่ถูกต้อง อาจไม่ชัดเจน
- แท็ก::อัลกอริทึม แท็ก::KEY_SIZE, และ Tag::RSA_PUBLIC_EXPONENT เป็นคุณสมบัติเฉพาะของคีย์ สำหรับคีย์ที่ฮาร์ดแวร์รักษาความปลอดภัย แท็กเหล่านี้จะอยู่ในรายการที่บังคับใช้ด้วยฮาร์ดแวร์
- ค่า Tag::DIGEST ที่ฮาร์ดแวร์ที่ปลอดภัยรองรับจะอยู่ใน รายการที่ฮาร์ดแวร์สนับสนุน ไดเจสต์ที่ไม่รองรับจะอยู่ในรายการที่ซอฟต์แวร์รองรับ
- ค่า Tag::PADDING จะอยู่ในรายการที่สนับสนุนฮาร์ดแวร์ ยกเว้นกรณีที่มี เป็นไปได้ว่าซอฟต์แวร์อาจต้องทำโหมดระยะห่างจากขอบที่เจาะจง ในกรณีนี้ แอปดังกล่าวจะอยู่ในรายการที่ซอฟต์แวร์บังคับใช้ ที่เป็นไปได้ เกิดขึ้นสำหรับคีย์ RSA ที่อนุญาตระยะห่างจากขอบของ PSS หรือ OAEP กับอัลกอริทึมไดเจสต์ ที่ฮาร์ดแวร์การรักษาความปลอดภัยไม่สนับสนุน
- แท็ก::USER_SECURE_ID และแท็ก::USER_AUTH_TYPE บังคับใช้ฮาร์ดแวร์เฉพาะเมื่อการตรวจสอบสิทธิ์ผู้ใช้มีการบังคับใช้ด้วยฮาร์ดแวร์เท่านั้น ถึง คีย์มาสเตอร์ และการตรวจสอบสิทธิ์ที่เกี่ยวข้อง ทั้ง Trustlet ต้องปลอดภัยและแชร์คีย์ HMAC ลับที่ใช้ในการลงนาม ตรวจสอบโทเค็นการตรวจสอบสิทธิ์ โปรดดู หน้าการตรวจสอบสิทธิ์เพื่อดูรายละเอียด
- แท็ก::ACTIVE_DATETIME, แท็ก::ORIGINATION_EXPIRE_DATETIME, และแท็ก Tag::USAGE_EXPIRE_DATETIME ต้องมีการเข้าถึงนาฬิกาติดผนังที่ยืนยันได้ว่าถูกต้อง ฮาร์ดแวร์ที่ปลอดภัยที่สุด มีสิทธิ์เข้าถึงเฉพาะข้อมูลเวลาจากระบบปฏิบัติการที่ไม่ปลอดภัย หมายความว่าแท็กมีการบังคับใช้ด้วยซอฟต์แวร์
- แท็ก::ORIGIN คือ อยู่ในรายการฮาร์ดแวร์เสมอสำหรับคีย์ที่เชื่อมโยงกับฮาร์ดแวร์ การมีอยู่ของโซลูชัน คือการที่เลเยอร์ที่สูงขึ้นพิจารณาว่าคีย์เป็นคีย์สำรอง
คีย์นำเข้า
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ import_key
และเปลี่ยนชื่อใน Keymaster 3
นำเข้าเนื้อหาคีย์ไปยังฮาร์ดแวร์ Keymaster พารามิเตอร์คำจำกัดความคีย์และ
มีการจัดการลักษณะเอาต์พุตเช่นเดียวกับ generateKey
โดยมีข้อยกเว้นต่อไปนี้
- แท็ก::KEY_SIZE และ
แท็ก::RSA_PUBLIC_EXPONENT
(สำหรับคีย์ RSA เท่านั้น) ไม่จำเป็นในพารามิเตอร์อินพุต หากไม่ได้ระบุ
Trustlet จะอนุมานค่าจากเนื้อหาคีย์ที่ระบุและเพิ่ม
แท็กและค่าที่เหมาะสมกับลักษณะคีย์ หากพารามิเตอร์คือ
ที่ให้ไว้ ความน่าเชื่อถือจะตรวจสอบความถูกต้องของข้อมูลกับเนื้อหาของคีย์ ใน
เหตุการณ์ที่ไม่ตรงกัน เมธอดจะแสดง
ErrorCode::IMPORT_PARAMETER_MISMATCH
- แท็ก::ORIGIN ที่แสดงผลมี
ค่าเดียวกับ
KeyOrigin::IMPORTED
ExportKey
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ export_key
และเปลี่ยนชื่อใน Keymaster 3
ส่งออกคีย์สาธารณะจากคู่คีย์ RSA หรือ EC ของ Keymaster
หากระบุ Tag::APPLICATION_ID
ระหว่างการสร้างคีย์ หรือ
ระบบจะระบุค่าเดียวกันให้กับเมธอดนี้ใน
อาร์กิวเมนต์ clientId
มิฉะนั้น ระบบจะแสดงเมธอด
ErrorCode::INVALID_KEY_BLOB
ในทำนองเดียวกัน หาก
Tag::APPLICATION_DATA
มีการระบุระหว่างการสร้างหรือการนําเข้า ค่าเดียวกันจะมีการระบุให้กับ
เมธอดนี้ในอาร์กิวเมนต์ appData
คีย์ลบ
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ delete_key
และเปลี่ยนชื่อใน Keymaster 3
ลบคีย์ที่ระบุ วิธีนี้เป็นขั้นตอนที่ไม่บังคับ และมีเพียง ซึ่งติดตั้งใช้งานโดยโมดูล Keymaster ที่ให้การป้องกันย้อนกลับ
deleteAllKeys
เวอร์ชัน: 1, 2, 3
ฟังก์ชันนี้เปิดตัวใน Keymaster 1 ในชื่อ delete_all_keys
และเปลี่ยนชื่อใน Keymaster 3
ลบคีย์ทั้งหมด วิธีการนี้เป็นแบบไม่บังคับ และจะใช้เฉพาะ โดยโมดูล Keymaster ที่มอบความต้านทานการย้อนกลับ
รหัสการรับรองการทำลาย
เวอร์ชัน: 3
เมธอด destroyAttestationIds()
ใช้เพื่อ
ปิดใช้โฆษณาใหม่ (ไม่บังคับแต่แนะนำอย่างยิ่ง)
เอกสารรับรองรหัส
หาก TEE ไม่มีวิธีที่จะมั่นใจได้ว่าเอกสารรับรองของรหัสอย่างถาวร
ปิดใช้หลังจากเรียกใช้เมธอดนี้ เอกสารรับรองรหัสจะต้องไม่ใช่
เลย ซึ่งในกรณีนี้ วิธีการนี้ไม่ดำเนินการใดๆ และ
แสดงผล ErrorCode::UNIMPLEMENTED
หากเอกสารรับรองรหัสคือ
รองรับ ต้องมีการติดตั้งใช้งานวิธีนี้และต้องปิดใช้อย่างถาวร
ความพยายามในการรับรองรหัสทั้งหมดในอนาคต วิธีการนี้อาจเรียกว่าจำนวนใดก็ได้ของ
ครั้ง หากปิดใช้เอกสารรับรองรหัสอย่างถาวรแล้ว เมธอดจะ
ไม่มีผลลัพธ์และแสดงผล ErrorCode::OK
รหัสข้อผิดพลาดเดียวที่วิธีนี้อาจแสดงได้คือ
ErrorCode::UNIMPLEMENTED
(หากไม่รองรับเอกสารรับรองของรหัส)
ErrorCode:OK
, ErrorCode::KEYMASTER_NOT_CONFIGURED
หรือ
หนึ่งในรหัสข้อผิดพลาดที่ระบุว่าการสื่อสารล้มเหลวกับ
ฮาร์ดแวร์
เริ่มต้น
เวอร์ชัน: 1, 2, 3
เริ่มการดำเนินการเข้ารหัสโดยใช้คีย์ที่ระบุ
ด้วยพารามิเตอร์ที่ระบุ (ตามความเหมาะสม) และแสดง
แฮนเดิลดำเนินการที่ใช้กับ update และ finish เพื่อให้การดำเนินการเสร็จสมบูรณ์ แฮนเดิลการดำเนินการคือ
ยังใช้เป็น "ภารกิจ" โทเค็นในการดำเนินงานที่ตรวจสอบสิทธิ์แล้ว และสำหรับการดำเนินการดังกล่าว
จะรวมอยู่ในฟิลด์ challenge
ของ
โทเค็นการตรวจสอบสิทธิ์
การใช้งาน Keymaster รองรับการทำงานพร้อมกันอย่างน้อย 16 รายการ
การดำเนินงาน คีย์สโตร์ใช้ได้สูงสุด 15 รายการ เหลือไว้ 1 รายการสำหรับ vold ที่จะใช้เป็นรหัสผ่าน
การเข้ารหัส เมื่อคีย์สโตร์มีการดำเนินการ 15 รายการอยู่ระหว่างดำเนินการ (begin
มีการดำเนินการที่กำลังดำเนินการอยู่
ถูกเรียก แต่ finish
หรือ abort
ยังไม่ได้รับการโทร
) และได้รับคำขอเพื่อเริ่มต้นในวันที่ 16 ระบบโทร
abort
ในการดำเนินการที่ใช้น้อยที่สุดเพื่อลดจำนวนของ
การดำเนินการที่ดำเนินอยู่เป็น 14 ก่อนเรียก begin
เพื่อเริ่มต้น
การดำเนินการที่ขอใหม่
ถ้าเป็น Tag::APPLICATION_ID
หรือ Tag::APPLICATION_DATA แล้ว
ในระหว่างการสร้างหรือนำเข้าคีย์ การเรียก begin
จะรวม
ด้วยค่าที่ระบุในตอนแรกในอาร์กิวเมนต์ inParams
วิธีนี้
การบังคับใช้การให้สิทธิ์
ระหว่างวิธีการนี้ การให้สิทธิ์คีย์ต่อไปนี้จะถูกบังคับใช้โดย
Trustlet หากการใช้งานนั้นอยู่ในประเภท "ใช้ฮาร์ดแวร์"
ลักษณะหนึ่ง และหากการดำเนินการดังกล่าวไม่ใช่การดำเนินการคีย์สาธารณะ คีย์สาธารณะ
การดำเนินการ หมายถึง KeyPurpose::ENCRYPT
และ KeyPurpose::VERIFY
ด้วยคีย์ RSA หรือ EC จะได้รับอนุญาต แม้ว่าจะได้รับสิทธิ์
ไม่ตรงตามข้อกำหนด
- Tag::PURPOSE: วัตถุประสงค์
ที่ระบุในการเรียก
begin()
ต้องตรงกับวัตถุประสงค์ข้อใดข้อหนึ่ง ในการให้สิทธิ์คีย์ เว้นแต่การดำเนินการที่ขอจะเป็นคีย์สาธารณะ หากวัตถุประสงค์ที่ระบุไม่ตรงกันและการดำเนินการไม่ตรงกัน การดำเนินการคีย์สาธารณะbegin
จะส่งกลับErrorCode::UNSUPPORTED_PURPOSE
การดำเนินการคีย์สาธารณะคือ การเข้ารหัสแบบอสมมาตรหรือการยืนยัน - แท็ก::ACTIVE_DATETIME
จะบังคับใช้ได้ก็ต่อเมื่อมีแหล่งข้อมูลเวลา UTC ที่เชื่อถือได้เท่านั้น หาก
วันที่และเวลาปัจจุบันอยู่ก่อนค่าแท็ก โดยเมธอดจะแสดงผล
ErrorCode::KEY_NOT_YET_VALID
- แท็ก::ORIGINATION_EXPIRE_DATETIME
จะบังคับใช้ได้ก็ต่อเมื่อมีแหล่งข้อมูลเวลา UTC ที่เชื่อถือได้เท่านั้น หาก
วันที่และเวลาปัจจุบันอยู่หลังค่าแท็กและจุดประสงค์คือ
KeyPurpose::ENCRYPT
หรือKeyPurpose::SIGN
เมธอด แสดงผลErrorCode::KEY_EXPIRED
- แท็ก::USAGE_EXPIRE_DATETIME
จะบังคับใช้ได้ก็ต่อเมื่อมีแหล่งข้อมูลเวลา UTC ที่เชื่อถือได้เท่านั้น หาก
วันที่และเวลาปัจจุบันอยู่หลังค่าแท็กและจุดประสงค์คือ
KeyPurpose::DECRYPT
หรือKeyPurpose::VERIFY
เมธอด แสดงผลErrorCode::KEY_EXPIRED
- แท็ก::MIN_SECONDS_BETWEEN_OPS
จะถูกเปรียบเทียบกับตัวจับเวลาแบบสัมพัทธ์ที่เชื่อถือได้ ซึ่งระบุการใช้
คีย์ หากเวลาใช้งานล่าสุดบวกค่าแท็กน้อยกว่าเวลาปัจจุบัน
เมธอดจะแสดง
ErrorCode::KEY_RATE_LIMIT_EXCEEDED
โปรดดู คำอธิบายแท็ก เพื่อดูรายละเอียดการติดตั้งใช้งานที่สำคัญ - แท็ก:MAX_USES_PER_BOOT
จะเปรียบเทียบกับตัวนับที่ปลอดภัยที่ติดตามการใช้คีย์
ตั้งแต่เปิดเครื่อง หากจำนวนการใช้งานก่อนหน้านี้เกินค่าแท็ก
เมธอดจะแสดง
ErrorCode::KEY_MAX_OPS_EXCEEDED
- แท็ก::USER_SECURE_ID
จะถูกบังคับใช้โดยวิธีการนี้เมื่อคีย์
แท็ก::AUTH_TIMEOUT
หากคีย์มีทั้ง 2 อย่าง เมธอดนี้ต้องได้รับแอตทริบิวต์ที่ถูกต้อง
แท็ก::AUTH_TOKEN ใน
inParams
เพื่อให้โทเค็นการตรวจสอบสิทธิ์ใช้งานได้ เงื่อนไขทุกข้อต่อไปนี้ ต้องเป็นจริง- ช่อง HMAC ได้รับการตรวจสอบอย่างถูกต้อง
- อย่างน้อย 1 แท็ก::USER_SECURE_ID จากคีย์ตรงกับค่ารหัสที่ปลอดภัยอย่างน้อย 1 ค่าใน โทเค็น
- คีย์จะมี แท็ก::USER_AUTH_TYPE ที่ตรงกับประเภทการตรวจสอบสิทธิ์ในโทเค็น
หากไม่เป็นไปตามเงื่อนไขใดๆ ต่อไปนี้ ระบบจะแสดงเมธอด
ErrorCode::KEY_USER_NOT_AUTHENTICATED
- แท็ก::CALLER_NONCE
อนุญาตให้ผู้โทรระบุ Nonce หรือเวกเตอร์การเริ่มต้น (IV) หากคีย์
ไม่มีแท็กนี้ แต่ผู้โทรระบุไว้
แท็ก::NONCE กับเมธอดนี้
ระบบส่งกลับ
ErrorCode::CALLER_NONCE_PROHIBITED
- แท็ก::BOOTLOADER_ONLY
ระบุว่ามีเพียง Bootloader เท่านั้นที่ใช้คีย์ได้ หากวิธีนี้คือ
ด้วยคีย์ Bootloader เท่านั้นหลังจากที่ Bootloader ดำเนินการเสร็จแล้ว
จะแสดง
ErrorCode::INVALID_KEY_BLOB
คีย์ RSA
การดำเนินการคีย์ RSA ทั้งหมดจะระบุโหมดระยะห่างจากขอบเพียงโหมดเดียวใน inParams
หากไม่ได้ระบุหรือระบุมากกว่า 1 ครั้ง ระบบจะแสดงผลเมธอด
ErrorCode::UNSUPPORTED_PADDING_MODE
การดำเนินการลงชื่อและยืนยัน RSA จำเป็นต้องมีข้อมูลสรุป เช่นเดียวกับการเข้ารหัส RSA
และการดำเนินการถอดรหัสด้วยโหมด Padding แบบ OAEP สำหรับกรณีเหล่านั้น ผู้โทร
ระบุไดเจสต์เพียง 1 รายการใน inParams
หากไม่ได้ระบุหรือระบุไว้
มากกว่า 1 ครั้ง เมธอดนี้จะแสดง ErrorCode::UNSUPPORTED_DIGEST
การดำเนินการของคีย์ส่วนตัว (KeyPurpose::DECYPT
และ KeyPurpose::SIGN
)
ต้องมีสิทธิ์ไดเจสต์และระยะห่างจากขอบ ซึ่งหมายความว่าการให้สิทธิ์คีย์
ต้องมีค่าที่ระบุ หากไม่เป็นเช่นนั้น เมธอดจะแสดง
ErrorCode::INCOMPATIBLE_DIGEST
หรือ ErrorCode::INCOMPATIBLE_PADDING
ได้ตามความเหมาะสม การดำเนินการคีย์สาธารณะ
(KeyPurpose::ENCRYPT
และ KeyPurpose::VERIFY
) ได้รับอนุญาตกับ
ไดเจสต์หรือระยะห่างจากขอบที่ไม่ได้รับอนุญาต
โหมดระยะห่างจากขอบของ RSA ทั้งหมด ยกเว้น PaddingMode::NONE
ใช้ได้กับวัตถุประสงค์บางอย่างเท่านั้น โดยเฉพาะอย่างยิ่ง
PaddingMode::RSA_PKCS1_1_5_SIGN
และ PaddingMode::RSA_PSS
รองรับเฉพาะการลงชื่อเข้าใช้และการยืนยัน ขณะที่ PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
และ PaddingMode::RSA_OAEP
รองรับเฉพาะการเข้ารหัสและการถอดรหัส
เมธอดจะแสดง ErrorCode::UNSUPPORTED_PADDING_MODE
หากเมธอด
โหมดที่ระบุไม่รองรับวัตถุประสงค์ที่ระบุ
การโต้ตอบที่สำคัญระหว่างโหมดระยะห่างจากขอบและไดเจสต์มีดังนี้
PaddingMode::NONE
ระบุว่า "ข้อมูลดิบ" การดำเนินการ RSA คือ ที่ได้รับ หากลงนามหรือยืนยันDigest::NONE
คือ สำหรับไดเจสต์ ไม่จำเป็นต้องมีไดเจสต์สำหรับการเข้ารหัสที่ไม่เข้มงวด หรือ การถอดรหัส- ระยะห่างจากขอบ
PaddingMode::RSA_PKCS1_1_5_SIGN
ต้องมีไดเจสต์ ไดเจสต์อาจเป็นDigest::NONE
ซึ่งในกรณีนี้คือ Keymaster ไม่สามารถสร้างโครงสร้างลายเซ็น PKCS#1 v1.5 ที่เหมาะสมได้ เนื่องจาก แอปจะเพิ่มโครงสร้าง DigestInfo ไม่ได้ แต่การนำไปใช้งาน สร้าง0x00 || 0x01 || PS || 0x00 || M
โดยที่ M คือ ที่ระบุและ PS คือสตริงระยะห่างจากขอบ ขนาดของคีย์ RSA ต้องไม่เกิน มีขนาดใหญ่กว่าข้อความอย่างน้อย 11 ไบต์ มิฉะนั้นเมธอดจะแสดงErrorCode::INVALID_INPUT_LENGTH
- ระยะห่างจากขอบของ
PaddingMode::RSA_PKCS1_1_1_5_ENCRYPT
ไม่จำเป็นต้องมีไดเจสต์ - ระยะห่างจากขอบ
PaddingMode::RSA_PSS
ต้องมีไดเจสต์ ซึ่งอาจไม่ใช่Digest::NONE
หากระบุDigest::NONE
ค่า แสดงผลErrorCode::INCOMPATIBLE_DIGEST
นอกจากนี้ ขนาดของคีย์ RSA ต้องใหญ่กว่าเอาต์พุต 2 + D ไบต์เป็นอย่างน้อย ขนาดของไดเจสต์ โดย D คือขนาดของไดเจสต์ในหน่วยไบต์ กรณีอื่น เมธอดจะแสดงErrorCode::INCOMPATIBLE_DIGEST
ขนาดเกลือ คือ D - ระยะห่างจากขอบ
PaddingMode::RSA_OAEP
ต้องมีไดเจสต์ ซึ่งอาจไม่ใช่Digest::NONE
หากระบุDigest::NONE
ค่า แสดงผลErrorCode::INCOMPATIBLE_DIGEST
คีย์ EC
การดำเนินการของแป้น EC ระบุโหมดระยะห่างจากขอบ 1 โหมดใน inParams
หากไม่ได้ระบุหรือระบุมากกว่า 1 ครั้ง
แสดงผล ErrorCode::UNSUPPORTED_PADDING_MODE
การดำเนินการคีย์ส่วนตัว (KeyPurpose::SIGN
) ต้องได้รับอนุญาต
หรือไดเจสต์และระยะห่างจากขอบ
ซึ่งหมายความว่าการให้สิทธิ์ที่สำคัญ
ต้องมีค่าที่ระบุ หากไม่ ให้ส่งคืน
ErrorCode::INCOMPATIBLE_DIGEST
การดำเนินการคีย์สาธารณะ
(KeyPurpose::VERIFY
) อนุญาตให้มีไดเจสต์หรือระยะห่างจากขอบที่ไม่ได้รับอนุญาต
คีย์ AES
การทำงานของปุ่ม AES ระบุโหมดบล็อก 1 โหมดและโหมดระยะห่างจากขอบอย่างละ 1 โหมด
ใน inParams
หากไม่ได้ระบุหรือระบุค่ามากกว่า
มากกว่า 1 ครั้ง ส่งคืน ErrorCode::UNSUPPORTED_BLOCK_MODE
หรือ
ErrorCode::UNSUPPORTED_PADDING_MODE
โหมดที่ระบุต้องเป็น
ได้รับอนุญาตโดยคีย์ มิเช่นนั้นเมธอดจะแสดง
ErrorCode::INCOMPATIBLE_BLOCK_MODE
หรือ
ErrorCode::INCOMPATIBLE_PADDING_MODE
หากโหมดบล็อกคือ BlockMode::GCM
, inParams
ระบุ Tag::MAC_LENGTH
และ
ค่าที่ระบุคือผลคูณของ 8 ที่ไม่เกิน 128
หรือน้อยกว่าค่าของ Tag::MIN_MAC_LENGTH
ในคอลัมน์
การให้สิทธิ์ใช้งานคีย์ สำหรับ MAC ที่มีความยาวมากกว่า 128 หรือไม่ใช่ค่าพหุคูณของ
8 แสดงผล ErrorCode::UNSUPPORTED_MAC_LENGTH
สำหรับค่าที่ต่ำกว่า
ความยาวขั้นต่ำของคีย์ ให้แสดงผล ErrorCode::INVALID_MAC_LENGTH
หากโหมดบล็อกคือ BlockMode::GCM
หรือ BlockMode::CTR
โหมดระยะห่างจากขอบที่ระบุต้องเป็น PaddingMode::NONE
สำหรับ BlockMode::ECB
หรือ BlockMode::CBC
โหมดนี้อาจเป็น
PaddingMode::NONE
หรือ PaddingMode::PKCS7
หากโหมดระยะห่างจากขอบ
ไม่ตรงตามเงื่อนไขเหล่านี้ แสดงผล ErrorCode::INCOMPATIBLE_PADDING_MODE
หากโหมดบล็อกคือ BlockMode::CBC
, BlockMode::CTR
หรือ BlockMode::GCM
ต้องมีเวกเตอร์การเริ่มต้นหรือ Nonce
ในกรณีส่วนใหญ่ ผู้โทรไม่ควรระบุ IV หรือ Nonce ในกรณีดังกล่าว ค่า
การติดตั้งใช้งาน Keymaster จะสร้าง IV หรือ Nonce แบบสุ่มและแสดงผลผ่าน
แท็ก::NONCE ใน outParams
CBC และ CTR IV มีขนาด 16 ไบต์ Nonces ใน GCM มีขนาด 12 ไบต์ หากคีย์
การให้สิทธิ์ประกอบด้วย
แท็ก::CALLER_NONCE
ผู้โทรอาจให้ IV/nonce
แท็ก::NONCE
ใน inParams
หากมีการระบุ Nonce เมื่อ
แท็ก::CALLER_NONCE
ไม่ได้รับอนุญาต ส่งคืน ErrorCode::CALLER_NONCE_PROHIBITED
หากไม่ได้ระบุ Nonce เมื่อ
แท็ก::CALLER_NONCE
ได้รับอนุญาต ให้สร้าง IV/nonce แบบสุ่ม
คีย์ HMAC
การดำเนินการคีย์ HMAC ระบุ Tag::MAC_LENGTH
ใน inParams
ค่าที่ระบุต้องเป็นพหุคูณของ 8 ที่ไม่มากกว่า
ความยาวไดเจสต์หรือน้อยกว่าค่าของ Tag::MIN_MAC_LENGTH
ในการให้สิทธิ์คีย์ สำหรับความยาว MAC ที่มากกว่าความยาวของไดเจสต์หรือ
ค่าที่ไม่ใช่พหุคูณของ 8 แสดงผล ErrorCode::UNSUPPORTED_MAC_LENGTH
สำหรับค่าที่น้อยกว่าความยาวขั้นต่ำของคีย์ ให้แสดงผล
ErrorCode::INVALID_MAC_LENGTH
อัปเดต
เวอร์ชัน: 1, 2, 3
ให้ข้อมูลสำหรับประมวลผลในการดำเนินการที่ต่อเนื่องซึ่งเริ่มต้นด้วย begin
การดำเนินการถูกระบุโดยพารามิเตอร์ operationHandle
การใช้เมธอดนี้เพื่อให้จัดการบัฟเฟอร์ได้อย่างยืดหยุ่นมากขึ้น
จะมีทางเลือกในการใช้ข้อมูลน้อยกว่าที่ระบุไว้ ผู้โทรคือ
มีหน้าที่วนซ้ำเพื่อป้อนข้อมูลที่เหลือในการเรียกครั้งต่อๆ ไป
และจะแสดงผลปริมาณอินพุตในพารามิเตอร์ inputConsumed
การติดตั้งใช้งานจะใช้อย่างน้อย 1 ไบต์เสมอ เว้นแต่
การดำเนินการไม่สามารถยอมรับได้อีกต่อไป หากมีการระบุมากกว่า 0 ไบต์และ 0
จำนวนไบต์ที่ใช้ไป ผู้โทรจะถือว่านี่เป็นข้อผิดพลาดและล้มเลิกการดำเนินการ
การติดตั้งใช้งานอาจเลือกปริมาณข้อมูลที่จะแสดงด้วย ซึ่งเป็นผลมาจาก อัปเดต การตั้งค่านี้เกี่ยวข้องกับการดำเนินการเข้ารหัสและถอดรหัสเท่านั้นเนื่องจาก การลงชื่อและการยืนยันจะไม่แสดงข้อมูลจนกว่าจะเสร็จสิ้น แสดงผลข้อมูลให้เร็วที่สุดเท่าที่จะทำได้ แทนที่จะบัฟเฟอร์ไว้
การจัดการข้อผิดพลาด
หากวิธีนี้แสดงรหัสข้อผิดพลาดอื่นที่ไม่ใช่ ErrorCode::OK
ล้มเลิกการดำเนินการ และแฮนเดิลการดำเนินการจะใช้ไม่ได้ ช่วง
ของแฮนเดิลนั้นในอนาคต ด้วยวิธีนี้
เสร็จสิ้น หรือล้มเลิก
แสดงผล ErrorCode::INVALID_OPERATION_HANDLE
การบังคับใช้การให้สิทธิ์
การบังคับใช้การให้สิทธิ์คีย์จะดำเนินการในเริ่มต้นเป็นหลัก ยกเว้นกรณีที่คีย์มีลักษณะดังนี้
- Tag::USER_SECURE_IDs อย่างน้อย 1 รายการ และ
- ไม่มีแท็ก::AUTH_TIMEOUT
ในกรณีนี้ คีย์จะต้องมีการให้สิทธิ์ต่อการดำเนินการและการอัปเดต
จะได้รับ แท็ก::AUTH_TOKEN
ในอาร์กิวเมนต์ inParams
HMAC จะยืนยันว่าโทเค็นถูกต้องและมี
รหัสผู้ใช้ที่ปลอดภัยที่ตรงกัน ตรงกับ
แท็ก::USER_AUTH_TYPE
และมีที่จับสำหรับการดำเนินการปัจจุบันในส่วน
ในชาเลนจ์นี้ หากไม่เป็นไปตามเงื่อนไขเหล่านี้
ErrorCode::KEY_USER_NOT_AUTHENTICATED
ผู้โทรจะให้โทเค็นการตรวจสอบสิทธิ์กับทุกการเรียกเพื่ออัปเดตและ เสร็จสิ้น การติดตั้งใช้งานจะต้องตรวจสอบโทเค็นเพียงครั้งเดียวเมื่อต้องการ
คีย์ RSA
สำหรับการดำเนินการลงชื่อและยืนยันกับ Digest::NONE
วิธีนี้ยอมรับการบล็อกทั้งหมดเพื่อให้ลงนามหรือยืนยันได้ในคราวเดียว
อัปเดต ซึ่งอาจใช้เพียงบางส่วนของการบล็อก อย่างไรก็ตาม หากผู้โทร
เลือกที่จะให้ข้อมูลในการอัปเดตหลายครั้ง วิธีนี้จะเป็นการยอมรับข้อมูลดังกล่าว
หากผู้โทรให้ข้อมูลที่จะลงนามมากเกินกว่าที่ใช้ได้ (ความยาว
ข้อมูลมีขนาดเกินคีย์ RSA) แสดงผล ErrorCode::INVALID_INPUT_LENGTH
คีย์ ECDSA
สำหรับการดำเนินการลงชื่อและยืนยันกับ Digest::NONE
วิธีนี้ยอมรับการบล็อกทั้งหมดเพื่อให้ลงนามหรือยืนยันได้ในคราวเดียว
อัปเดต วิธีนี้อาจใช้การบล็อกเพียงส่วนหนึ่งเท่านั้น
อย่างไรก็ตาม หากผู้โทรเลือกที่จะให้ข้อมูลในการอัปเดตหลายครั้ง วิธีนี้ยอมรับ ในกรณีที่ผู้โทรให้ข้อมูลเพิ่มเติมสำหรับการลงนาม ที่ใช้ประโยชน์ได้ ข้อมูลจึงถูกตัดออกอย่างเงียบๆ (ซึ่งแตกต่างจาก การจัดการข้อมูลส่วนเกินที่ให้ไว้ในการดำเนินการ RSA ที่คล้ายกัน เหตุผลที่เป็นเช่นนี้ สามารถทำงานร่วมกับไคลเอ็นต์เดิมได้)
คีย์ AES
โหมด AES GCM สนับสนุน "ข้อมูลการตรวจสอบสิทธิ์ที่เชื่อมโยง" ที่ให้บริการผ่าน
แท็ก::ASSOCIATED_DATA
ในอาร์กิวเมนต์ inParams
ข้อมูลที่เกี่ยวข้องอาจมีให้ในการเรียกซ้ำ (สำคัญหาก
ข้อมูลมีขนาดใหญ่เกินกว่าจะส่งได้บล็อกเดียว) แต่จะแสดงก่อนข้อมูลเสมอ
เพื่อเข้ารหัสหรือถอดรหัส การเรียกใช้เพื่ออัปเดตอาจได้รับทั้งข้อมูลที่เชื่อมโยง
และข้อมูลที่จะเข้ารหัส/ถอดรหัส แต่การอัปเดตในครั้งต่อๆ ไปอาจไม่รวม
หากผู้โทรให้ข้อมูลที่เกี่ยวข้องสำหรับการโทรที่อัปเดตแล้วหลังจากการโทร
ที่มีข้อมูลที่จะเข้ารหัส/ถอดรหัส ให้แสดงผล ErrorCode::INVALID_TAG
สำหรับการเข้ารหัส GCM แท็กจะต่อท้ายข้อความเข้ารหัสโดย
เสร็จสิ้น ในระหว่างการถอดรหัส
Tag::MAC_LENGTH
ไบต์ของข้อมูลที่ให้ไว้ไปยัง
การเรียกใช้การอัปเดตคือแท็ก ตั้งแต่การเรียกใช้
update ไม่สามารถทราบได้ว่าเป็นการเรียกสุดท้ายหรือไม่
ระบบจะประมวลผลทั้งหมดยกเว้นความยาวของแท็กและบัฟเฟอร์ข้อมูลแท็กที่เป็นไปได้
ระหว่างสิ้นสุด
เสร็จสิ้น
เวอร์ชัน: 1, 2, 3
สิ้นสุดการดำเนินการที่ดำเนินอยู่โดยเริ่มจาก begin การประมวลผลข้อมูลที่ยังไม่ได้ประมวลผลทั้งหมดที่ได้รับจาก การอัปเดต
วิธีนี้เป็นวิธีสุดท้ายที่ถูกเรียกใช้ในการดำเนินการ ดังนั้น ข้อมูลที่ประมวลผลแล้วจะส่งกลับ
วิธีนี้จะทำให้การดำเนินการเสร็จสมบูรณ์ไม่ว่าจะเสร็จสมบูรณ์หรือส่งคืนข้อผิดพลาด
การดำเนินการและทำให้แฮนเดิลการดำเนินการที่ระบุเป็นโมฆะ ช่วง
การใช้แฮนเดิลในอนาคต โดยใช้เมธอดนี้หรืออัปเดต หรือ
abort แสดงผล ErrorCode::INVALID_OPERATION_HANDLE
การดำเนินการลงชื่อจะส่งคืนลายเซ็นเป็นเอาต์พุต การดำเนินการยืนยัน
ยอมรับลายเซ็นในพารามิเตอร์ signature
และไม่แสดงผลเอาต์พุต
การบังคับใช้การให้สิทธิ์
การบังคับใช้การให้สิทธิ์คีย์จะเกิดขึ้นใน begin ยกเว้นกรณีที่คีย์มีลักษณะดังนี้
- อย่างน้อย 1 รายการ แท็ก::USER_SECURE_IDs และ
- ไม่มี แท็ก::AUTH_TIMEOUT
ในกรณีนี้ คีย์จะต้องมีการให้สิทธิ์ต่อการดำเนินการและการอัปเดต
จะได้รับ แท็ก::AUTH_TOKEN
ในอาร์กิวเมนต์ inParams
HMAC จะยืนยันว่าโทเค็น
ถูกต้อง และมีรหัสผู้ใช้ที่ปลอดภัยที่ตรงกัน และตรงกับ
แท็ก::USER_AUTH_TYPE และ
มีที่จับสำหรับการดำเนินการปัจจุบันในส่วน
ในชาเลนจ์นี้ หากไม่เป็นไปตามเงื่อนไขเหล่านี้
ErrorCode::KEY_USER_NOT_AUTHENTICATED
ผู้โทรจะให้โทเค็นการตรวจสอบสิทธิ์กับทุกการเรียก อัปเดตและเสร็จสิ้น การติดตั้งใช้งานจะต้องตรวจสอบโทเค็นเพียงครั้งเดียวเมื่อต้องการ
คีย์ RSA
ข้อกำหนดเพิ่มเติมบางส่วนขึ้นอยู่กับโหมดระยะห่างจากขอบ
PaddingMode::NONE
สำหรับการดำเนินการลงชื่อและเข้ารหัสที่ไม่ได้เข้ารหัส หากข้อมูลที่ระบุสั้นกว่าคีย์ ข้อมูลนั้นจะถูกไม่ต้องใส่ ทางด้านซ้ายก่อนลงชื่อ/เข้ารหัส หากข้อมูลมีความยาวเท่ากับคีย์ แต่ตัวเลขจะมีค่ามากกว่า ให้แสดงผลErrorCode::INVALID_ARGUMENT
สำหรับ การยืนยันและถอดรหัส ข้อมูลต้องมีความยาว เป็นคีย์ หรือไม่เช่นนั้น ให้ส่งคืนErrorCode::INVALID_INPUT_LENGTH.
PaddingMode::RSA_PSS
สำหรับการดำเนินการลายเซ็นที่เพิ่มด้วย PSS Salt ของ PSS คือขนาดของไดเจสต์ของข้อความและสร้างขึ้นแบบสุ่ม ไดเจสต์ที่ระบุด้วย Tag::DIGEST ในinputParams
บน begin มีการใช้เป็นไดเจสต์ PSS และในฐานะอัลกอริทึมไดเจสต์ MGF1PaddingMode::RSA_OAEP
ไดเจสต์ที่ระบุด้วย แท็ก::DIGEST ในinputParams
ใน begin ถูกใช้เป็น OAEP อัลกอริทึมไดเจสต์ และใช้ SHA1 เป็นอัลกอริทึมไดเจสต์ MGF1
คีย์ ECDSA
หากข้อมูลที่ระบุสำหรับการลงนามหรือการยืนยันที่ไม่ได้ใส่อักขระเพิ่มเติมยาวเกินไป ให้ตัดให้สั้นลง ได้
คีย์ AES
เงื่อนไขเพิ่มเติมบางประการ โดยขึ้นอยู่กับโหมดการบล็อก
BlockMode::ECB
หรือBlockMode::CBC
หากระยะห่างจากขอบเป็นPaddingMode::NONE
และ ความยาวของข้อมูลไม่ได้เป็นผลคูณของขนาดบล็อก AES,ErrorCode::INVALID_INPUT_LENGTH
หากระยะห่างจากขอบเป็นPaddingMode::PKCS7
ป้อนข้อมูลตามข้อกำหนด PKCS#7 โปรดทราบว่า PKCS#7 แนะนำให้เพิ่มบล็อกระยะห่างจากขอบเพิ่มเติม ถ้าข้อมูลเป็นพหุคูณของความยาวบล็อกBlockMode::GCM
ระหว่างการเข้ารหัสหลังการประมวลผล ข้อความธรรมดาทั้งหมด คำนวณแท็ก (แท็ก::MAC_LENGTH ไบต์) แล้วนำไปต่อท้ายข้อความเข้ารหัสที่แสดง ในระหว่างการถอดรหัส ให้ประมวลผล แท็ก::MAC_LENGTH สุดท้าย เท่ากับแท็ก หากยืนยันแท็กไม่สำเร็จ ให้แสดงผลErrorCode::VERIFICATION_FAILED
ล้มเลิก
เวอร์ชัน: 1, 2, 3
ล้มเลิกการดำเนินการที่กำลังดำเนินการ หลังจากโทรเพื่อล้มเลิกแล้ว ให้ย้อนกลับ
ErrorCode::INVALID_OPERATION_HANDLE
สำหรับ
การใช้แฮนเดิลการดำเนินการที่ระบุหลังจากนั้นกับ update
เสร็จสิ้น หรือล้มเลิก
อัลกอริทึม get_supported_
เวอร์ชัน: 1
แสดงรายการอัลกอริทึมที่ฮาร์ดแวร์ Keymaster รองรับ การใช้งานของคุณ การใช้ซอฟต์แวร์ส่งคืนรายการที่ว่างเปล่า ไฮบริด จะแสดงผลรายการที่มีเฉพาะอัลกอริทึมที่ ที่รองรับโดยฮาร์ดแวร์
การติดตั้งใช้งาน Keymaster 1 รองรับ RSA, EC, AES และ HMAC
get_supported_block_modes
เวอร์ชัน: 1
แสดงรายการโหมดการบล็อก AES ที่ฮาร์ดแวร์ Keymaster รองรับ ตามอัลกอริทึมและวัตถุประสงค์ที่ระบุ
สำหรับ RSA, EC และ HMAC ซึ่งไม่ใช่การเข้ารหัสแบบบล็อก เมธอดจะแสดง
รายการว่างเปล่าสำหรับวัตถุประสงค์ที่ถูกต้องทั้งหมด วัตถุประสงค์ที่ไม่ถูกต้องควรทำให้เมธอด
การคืนสินค้า ErrorCode::INVALID_PURPOSE
การติดตั้งใช้งาน Keymaster 1 รองรับ ECB, CBC, CTR และ GCM สำหรับ AES การเข้ารหัสและการถอดรหัส
get_supported_padding_modes
เวอร์ชัน: 1
แสดงรายการโหมดระยะห่างจากขอบที่ฮาร์ดแวร์ Keymaster รองรับ ตามอัลกอริทึมและวัตถุประสงค์ที่ระบุ
HMAC และ EC ไม่มีการใช้ระยะห่างจากขอบ ดังนั้นเมธอดจึงแสดงรายการที่ว่างเปล่า
เพื่อวัตถุประสงค์ที่ถูกต้องทั้งหมด วัตถุประสงค์ที่ไม่ถูกต้องอาจทำให้เมธอดแสดงผล
ErrorCode::INVALID_PURPOSE
สำหรับ RSA จะรองรับการใช้งาน Keymaster 1 ดังนี้
- การเข้ารหัส การถอดรหัส การรับรอง และการยืนยันที่ไม่มีการเข้ารหัส สำหรับแบบไม่บุนวม การเข้ารหัสและการลงชื่อ ถ้าข้อความสั้นกว่าโมดูลัสสาธารณะ การนำไปใช้งานจะต้องมีค่าเป็นศูนย์ สำหรับการถอดรหัสแบบไม่ต้องพ่นและ ความยาวของอินพุตต้องตรงกับขนาดโมดูลัสสาธารณะ
- การเข้ารหัส PKCS#1 v1.5 โหมดระยะห่างจากขอบในการลงนาม
- PSS ความยาว Salt ขั้นต่ำที่ 20
- OAEP
สำหรับ AES ในโหมด ECB และ CBC การติดตั้งใช้งาน Keymaster 1 จะไม่รองรับหมายเลข และ PKCS#7 โหมด CTR และ GCM รองรับเฉพาะระยะห่างจากขอบเท่านั้น
get_supported_digests
เวอร์ชัน: 1
แสดงรายการโหมดไดเจสต์ที่ฮาร์ดแวร์ Keymaster รองรับ ตามอัลกอริทึมและวัตถุประสงค์ที่ระบุ
ไม่รองรับโหมด AES หรือต้องสรุปข้อมูล ดังนั้นเมธอดจึงแสดงผลค่าที่ว่างเปล่า เพื่อวัตถุประสงค์ที่ถูกต้อง
การติดตั้งใช้งาน Keymaster 1 สามารถใช้ชุดย่อยของ ไดเจสต์ การติดตั้งใช้งานจะมี SHA-256 และรองรับ MD5, SHA1, SHA-224 SHA-256, SHA384 และ SHA512 (ชุดไดเจสต์ที่กำหนดทั้งชุด)
get_supported_import_formats
เวอร์ชัน: 1
แสดงรายการรูปแบบการนำเข้าที่ฮาร์ดแวร์ Keymaster รองรับ การใช้งานอัลกอริทึมที่ระบุ
การติดตั้งใช้งาน Keymaster 1 รองรับรูปแบบ PKCS#8 (โดยไม่ต้องใช้รหัสผ่าน ) สำหรับการนำเข้าคู่คีย์ RSA และ EC และรองรับการนำเข้า RAW เนื้อหาคีย์ AES และ HMAC
get_supported_export_formats
เวอร์ชัน: 1
แสดงรายการรูปแบบการส่งออกที่ฮาร์ดแวร์ Keymaster รองรับ การใช้งานอัลกอริทึมที่ระบุ
การติดตั้งใช้งาน Keymaster1 รองรับรูปแบบ X.509 สำหรับการส่งออก RSA และ คีย์สาธารณะ EC ไม่รองรับการส่งออกคีย์ส่วนตัวหรือคีย์อสมมาตร
ฟังก์ชันที่ผ่านมา
คีย์มาสเตอร์ 0
ฟังก์ชันต่อไปนี้เป็นของคำจำกัดความ Keymaster 0 ต้นฉบับ โฆษณาเหล่านี้ มีอยู่ใน struct keymaster1_device_t ของ Keymaster 1 อย่างไรก็ตาม ใน Keymaster 1.0 ไม่มีการใช้งาน และตัวชี้ฟังก์ชันมีการตั้งค่าเป็น NULL
generate_keypair
import_keypair
get_keypair_public
delete_keypair
delete_all
sign_data
Verify_data
คีย์มาสเตอร์ 1
ฟังก์ชันต่อไปนี้เป็นของคำจำกัดความของ Keymaster 1 แต่ ที่นำออกใน Keymaster 2 รวมถึงฟังก์ชัน Keymaster 0 ที่ระบุข้างต้น
get_supported_algorithms
get_supported_block_modes
get_supported_padding_modes
get_supported_digests
get_supported_import_formats
get_supported_export_formats
คีย์มาสเตอร์ 2
ฟังก์ชันต่อไปนี้เป็นของคำจำกัดความของ Keymaster 2 แต่ ที่นำออกใน Keymaster 3 รวมถึงฟังก์ชัน Keymaster 1 ที่แสดงอยู่ด้านบน
configure