ระดับชั้นการจัดการฮาร์ดแวร์โดยตรง (HAL) ของ Weaver
(IWeaver.aidl)
ซึ่งเปิดตัวใน Android 8.1 มีอินเทอร์เฟซที่ปลอดภัยสำหรับการตรวจสอบสิทธิ์ผู้ใช้
ด้วยปัจจัยความรู้ของหน้าจอล็อก (LSKF) เช่น PIN, รูปแบบ และรหัสผ่าน
Weaver จะแทนที่ฟังก์ชันการตรวจสอบ LSKF ของ Gatekeeper อย่างไรก็ตาม ระบบยังคงใช้ Gatekeeper เพื่อสร้างโทเค็นการตรวจสอบสิทธิ์ฮาร์ดแวร์
ใน Android 9 ขึ้นไป CDD 9.11.2 กำหนดให้อุปกรณ์ที่รองรับ StrongBox ต้องมีฮาร์ดแวร์ที่ปลอดภัยโดยเฉพาะซึ่ง รองรับการตรวจสอบสิทธิ์ผู้ใช้ที่ปลอดภัย การใช้ Weaver HAL โดยใช้ฮาร์ดแวร์ที่ปลอดภัยนี้ เป็นไปตามข้อกำหนด "การตรวจสอบสิทธิ์ผู้ใช้ที่ปลอดภัย"
ในอุปกรณ์ที่ไม่มี Secure Element (SE) โดยเฉพาะ คุณยังคงใช้ Weaver ในสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) เช่น Trusty ได้
คอมโพเนนต์
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) ไม่ได้ใช้งานอยู่ และคีย์ที่ระบุตรงกับคีย์ที่จัดเก็บไว้ทุกประการ
ดูข้อกำหนดอินเทอร์เฟซทั้งหมดได้ที่
IWeaver.aidl
ใช้โดย Android
เมื่อมีการใช้งาน Weaver LockSettingsService เซิร์ฟเวอร์ระบบ Android จะใช้เพื่อปกป้องข้อมูลผู้ใช้ สำหรับผู้ใช้ทุกคนในอุปกรณ์ LockSettingsService จะจัดการสล็อต Weaver ดังนี้
- คีย์สล็อต (
weaverKey): แฮชของ LSKF ของผู้ใช้ หากผู้ใช้ไม่ได้ล็อกหน้าจอ ระบบจะใช้สตริงเริ่มต้น แทน - ค่าช่อง (
weaverSecret): ข้อมูลลับเข้ารหัสที่สร้างขึ้นแบบสุ่ม ที่มีเอนโทรปีสูง
weaverSecret ออกแบบมาเพื่อให้เรียกข้อมูลได้โดยบุคคลต่อไปนี้เท่านั้น
- ระบุ
weaverKeyที่ถูกต้องให้กับ Weaver TA ภายใน นโยบายการจำกัดอัตรา - การบุกรุกสภาพแวดล้อมที่ปลอดภัยซึ่ง Weaver TA ทำงานอยู่ ซึ่งเป็น สิ่งที่ตั้งใจให้ทำได้ยากมาก
LockSettingsService ใช้ทั้ง weaverKey และ
weaverSecret เพื่อเข้ารหัสรหัสผ่านสังเคราะห์ของผู้ใช้ เนื่องจากรหัสผ่านสังเคราะห์จะปกป้องที่เก็บข้อมูลที่เข้ารหัสด้วยข้อมูลเข้าสู่ระบบ (CE) ของผู้ใช้สำหรับการเข้ารหัสตามไฟล์ (FBE) และคีย์ที่เชื่อมโยงกับการตรวจสอบสิทธิ์ใน Android Keystore ของผู้ใช้ ข้อมูลจึงยังคงเข้าถึงไม่ได้จนกว่า Weaver จะเผยแพร่ข้อมูลลับ
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 |
รหัสอ้างอิง
รหัสอ้างอิงสำหรับการติดตั้งใช้งาน Weaver ในองค์ประกอบที่ปลอดภัยซึ่งเข้ากันได้กับ ISO/IEC7816-4 มีอยู่ใน AOSP ที่ external/libese/
การทดสอบ
หากต้องการตรวจสอบการติดตั้งใช้งาน Weaver ให้ใช้
VtsHalWeaverTargetTest
atest VtsHalWeaverTargetTest
หรือ
vts-tradefed run vts -m VtsHalWeaverTargetTest