Weaver

ระดับชั้นการจัดการฮาร์ดแวร์โดยตรง (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() ครั้งเดียว

  1. การยืนยัน: ตรวจสอบ LSKF โดยมีการจำกัดอัตราที่บังคับใช้โดย TEE
  2. การรับรอง: ออก 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