ระดับชั้นการจัดการฮาร์ดแวร์โดยตรง (HAL) ของ Weaver
(IWeaver.aidl)
ซึ่งเปิดตัวใน Android 8.1 มีอินเทอร์เฟซที่ปลอดภัยสำหรับการตรวจสอบสิทธิ์ผู้ใช้
ด้วยปัจจัยความรู้ของหน้าจอล็อก (LSKF) เช่น PIN, รูปแบบ และรหัสผ่าน
Weaver จะแทนที่ฟังก์ชันการตรวจสอบ LSKF ของ Gatekeeper อย่างไรก็ตาม ระบบยังคงใช้ Gatekeeper เพื่อสร้างโทเค็นการตรวจสอบสิทธิ์ฮาร์ดแวร์
ใน Android 9 ขึ้นไป CDD 9.11.2 กำหนดให้อุปกรณ์ที่รองรับ StrongBox ต้องมีฮาร์ดแวร์ที่ปลอดภัยโดยเฉพาะซึ่ง รองรับการตรวจสอบสิทธิ์ผู้ใช้ที่ปลอดภัย การใช้ HAL ของ Weaver โดยใช้ฮาร์ดแวร์ที่ปลอดภัยนี้จะตรงตามข้อกำหนด "การตรวจสอบสิทธิ์ผู้ใช้ที่ปลอดภัย"
ในอุปกรณ์ที่ไม่มี Secure Element (SE) โดยเฉพาะ คุณยังคงใช้ Weaver ในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) เช่น Trusty ได้
ใน Android 17 ขึ้นไป เราขอแนะนำอย่างยิ่งให้ใช้ Weaver แม้ในอุปกรณ์ที่ไม่มีองค์ประกอบความปลอดภัยโดยเฉพาะ
คอมโพเนนต์
Weaver ประกอบด้วยคอมโพเนนต์ 3 อย่าง ได้แก่
- อินเทอร์เฟซ Weaver AIDL (
IWeaver) ข้อกำหนดอย่างเป็นทางการของ HAL Android 13 และต่ำกว่าใช้ HIDL แทน AIDL - บริการ Weaver ระดับชั้นการจัดการฮาร์ดแวร์โดยตรง (HAL)
กระบวนการ Android เฉพาะของผู้ให้บริการที่ใช้
อินเทอร์เฟซ
IWeaver - แอปพลิเคชันที่เชื่อถือได้ (TA) ของ Weaver: ตรรกะหลักที่ทำงานในสภาพแวดล้อมที่ปลอดภัย โดยจะทำการยืนยัน LSKF และบังคับใช้การจำกัดอัตรา บริการ HAL สื่อสารกับ TA โดยใช้ช่องทางที่ปลอดภัยซึ่งเฉพาะเจาะจงกับการใช้งาน
SDK โฆษณา B
อินเทอร์เฟซของ Weaver จะแสดงอาร์เรย์ขนาดคงที่ของช่องแบบถาวร โดยแต่ละช่อง
จะมีคีย์และค่าขนาดคงที่ แต่ละช่องจะระบุด้วยรหัส ซึ่งเป็นจำนวนเต็มในช่วง [0, numSlots - 1] เข้าถึงค่าของช่องได้ก็ต่อเมื่อระบุคีย์ที่ตรงกับคีย์ที่จัดเก็บไว้เท่านั้น
อินเทอร์เฟซของ Weaver ประกอบด้วยส่วนต่างๆ ดังนี้
getConfig(): เรียกข้อมูลจำนวนช่อง ขนาดคีย์ และ ขนาดค่าที่การติดตั้งใช้งานรองรับwrite(): เขียนทับช่องที่ระบุด้วยคู่คีย์-ค่าใหม่ การดำเนินการนี้เป็นแบบอะตอมและทำให้ข้อมูลก่อนหน้ากู้คืนไม่ได้อย่างถาวร (การลบอย่างปลอดภัย)read(): พยายามดึงค่าของช่องที่ระบุ การดำเนินการนี้จะสำเร็จก็ต่อเมื่อการหมดเวลาการจำกัดอัตรา (บังคับใช้โดย TA) ไม่ได้ใช้งานอยู่ และคีย์ที่ระบุตรงกับคีย์ที่จัดเก็บไว้ทุกประการwarmUp(): ใน Android 17 ขึ้นไป จะสื่อถึงคำแนะนำว่าอาจมีการอ่านหรือเขียนในเร็วๆ นี้
ดูข้อกำหนดอินเทอร์เฟซทั้งหมดได้ที่
IWeaver.aidl
ใช้โดย Android
เมื่อมีการใช้งาน Weaver LockSettingsService ในเซิร์ฟเวอร์ระบบ Android จะใช้เพื่อปกป้องข้อมูลผู้ใช้ สำหรับผู้ใช้ทุกคนในอุปกรณ์ LockSettingsService จะจัดการสล็อต Weaver ดังนี้
- คีย์ช่อง (
weaverKey): แฮชของ LSKF ของผู้ใช้ หากผู้ใช้ไม่ได้ล็อกหน้าจอ ระบบจะใช้สตริงเริ่มต้น - ค่าช่อง (
weaverSecret): ข้อมูลลับเข้ารหัสที่สร้างขึ้นแบบสุ่ม ที่มีเอนโทรปีสูง
weaverSecret ออกแบบมาเพื่อให้เรียกข้อมูลได้โดยบุคคลต่อไปนี้เท่านั้น
- ระบุ
weaverKeyที่ถูกต้องให้กับ TA ของ Weaver ภายใน นโยบายการจำกัดอัตรา - การบุกรุกสภาพแวดล้อมที่ปลอดภัยซึ่ง Weaver TA ทำงานอยู่ ซึ่ง ตั้งใจให้ทำได้ยากมาก
LockSettingsService ใช้ทั้ง weaverKey และ
weaverSecret เพื่อเข้ารหัสรหัสผ่านสังเคราะห์ของผู้ใช้ เนื่องจากรหัสผ่านสังเคราะห์จะปกป้องที่เก็บข้อมูลที่เข้ารหัสด้วยข้อมูลเข้าสู่ระบบ (CE) ของผู้ใช้สำหรับ
การเข้ารหัสตามไฟล์ (FBE)
และคีย์ที่เชื่อมโยงกับการตรวจสอบสิทธิ์ใน Android Keystore ของผู้ใช้
ข้อมูลจึงยังคงเข้าถึงไม่ได้จนกว่า Weaver จะเผยแพร่ข้อมูลลับ
ใน Android 17 ขึ้นไป
LockSettingsService จะเรียกใช้เมธอด warmUp() ของ Weaver
เมื่อเริ่มป้อน LSKF การติดตั้งใช้งาน Weaver สามารถใช้สัญญาณนี้
เพื่อเปลี่ยนฮาร์ดแวร์ที่ปลอดภัยจากสถานะพลังงานต่ำเพื่อลดเวลาในการตอบสนองสำหรับread()คำขอที่กำลังจะมาถึง
Weaver เทียบกับ Gatekeeper
ในอดีต
Gatekeeper HAL
มีบทบาทที่แตกต่างกัน 2 อย่างในการโทร verify() ครั้งเดียว
- การยืนยัน: ตรวจสอบ LSKF โดยมีการจำกัดอัตราที่บังคับใช้โดย TEE
- การรับรอง: ออก
HardwareAuthTokenเพื่อ แจ้งให้ KeyMint (เดิมคือ Keymaster) ทราบว่าการตรวจสอบสิทธิ์ LSKF สำเร็จ
ทำไมจึงเปลี่ยนมาใช้ Weaver
เมื่อเปิดตัวโทเค็นการรีเซ็ตรหัสผ่านที่ปลอดภัยใน Android 8.1 "รหัสผ่านสังเคราะห์" จึงกลายเป็น
ข้อมูลลับการเข้ารหัสหลัก ตอนนี้บทบาททั้ง 2 อย่างที่อธิบายไว้ข้างต้นจะได้รับการจัดการโดย
การลงทะเบียน Gatekeeper แยกกัน โดยบทบาทหนึ่งสำหรับ LSKF อยู่ใน userId + 100000
และอีกบทบาทหนึ่งสำหรับรหัสผ่านสังเคราะห์อยู่ใน userId
Weaver ได้รับการเปิดตัวเพื่อรับช่วงบทบาทแรก โดยใช้ HAL ที่เรียบง่ายกว่าพร้อมรองรับการใช้งานที่อิงตาม Secure Element (SE)
| ฟีเจอร์ | Weaver | Gatekeeper |
|---|---|---|
| การลบอย่างปลอดภัย | การลบอย่างปลอดภัยเป็นสิ่งจำเป็น และการติดตั้งใช้งานก็ทำได้ง่ายเนื่องจาก อินเทอร์เฟซใช้ช่องที่มีขนาดคงที่จำนวนหนึ่ง | ไม่จำเป็นต้องลบอย่างปลอดภัย และการติดตั้งใช้งานก็ทำได้ยาก เนื่องจากอินเทอร์เฟซรองรับการลงทะเบียนได้ไม่จำกัด |
| ฮาร์ดแวร์ | เพิ่มประสิทธิภาพสำหรับ SE แต่ก็ใช้ได้ใน TEE ด้วย | TEE เท่านั้น การติดตั้งใช้งานใน SE ไม่ได้ให้ประโยชน์ด้านความปลอดภัย ตามการออกแบบปัจจุบัน |
| การจัดการข้อผิดพลาด | รหัสข้อผิดพลาดที่ชัดเจนยิ่งขึ้น | รหัสข้อผิดพลาดที่ไม่ชัดเจน ดังนั้น หน้าจอล็อกจึงไม่ แยกแยะระหว่าง LSKF ที่ไม่ถูกต้องกับความล้มเหลวที่ไม่เกี่ยวข้อง |
| ความเป็นปรมาณู | โค้ดใน LockSettingsService ที่ใช้ Weaver จะทำการเปลี่ยนแปลง LSKF แบบอะตอมมิก
ระบบจะเขียนข้อมูลใหม่ลงในช่อง Weaver ใหม่ และ
จะลบช่องเก่าก็ต่อเมื่อปลอดภัยที่จะทำเช่นนั้น |
โค้ดใน LockSettingsService ที่ใช้ Gatekeeper
ไม่ได้ทำการเปลี่ยนแปลง LSKF แบบอะตอม ข้อมูลผู้ใช้ทั้งหมดอาจสูญหายหาก
เกิดข้อผิดพลาดขณะเปลี่ยน LSKF |
รหัสอ้างอิง
AOSP มีการใช้งานอ้างอิงของ Weaver 2 รายการ ดังนี้
-
ใน Android 17 ขึ้นไป
system/weaver/มีการใช้งาน Weaver สำหรับสภาพแวดล้อมที่ปลอดภัยทั่วไป -
ใน Android 8.1 ขึ้นไป
external/libese/มีการติดตั้งใช้งาน Weaver สำหรับองค์ประกอบที่ปลอดภัยที่เข้ากันได้กับ ISO/IEC7816-4
การทดสอบ
หากต้องการตรวจสอบการติดตั้งใช้งาน Weaver ให้ใช้
VtsHalWeaverTargetTest
atest VtsHalWeaverTargetTest
หรือ
vts-tradefed run vts -m VtsHalWeaverTargetTest