ภาพรวม
การตรวจสอบสิทธิ์ด้วยใบหน้าช่วยให้ผู้ใช้ปลดล็อกอุปกรณ์ได้เพียงแค่มองไปที่ด้านหน้าของอุปกรณ์ Android 10 เพิ่มการรองรับสแต็กการตรวจสอบสิทธิ์ด้วยใบหน้าใหม่ที่สามารถประมวลผลเฟรมกล้องได้อย่างปลอดภัย โดยรักษาความปลอดภัยและความเป็นส่วนตัวระหว่างการตรวจสอบสิทธิ์ด้วยใบหน้าในฮาร์ดแวร์ที่รองรับ นอกจากนี้ Android 10 ยังมีวิธีง่ายๆ สำหรับการติดตั้งใช้งานที่เป็นไปตามข้อกำหนดด้านความปลอดภัยในการเปิดใช้การผสานรวมแอปพลิเคชันสำหรับการทำธุรกรรม เช่น การธนาคารออนไลน์หรือบริการอื่นๆ
สแต็กการตรวจสอบสิทธิ์ด้วยใบหน้าของ Android เป็นการติดตั้งใช้งานใหม่ใน Android 10 การติดตั้งใช้งานใหม่นี้จะแนะนำอินเทอร์เฟซ IBiometricsFace.hal,
IBiometricsFaceClientCallback.hal,
และ types.hal
สถาปัตยกรรม
BiometricPrompt API มีการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกทั้งหมด ซึ่งรวมถึงใบหน้า นิ้ว และม่านตา Face HAL จะโต้ตอบกับคอมโพเนนต์ต่อไปนี้
รูปที่ 1 สแต็กข้อมูลไบโอเมตริก
FaceManager
FaceManager เป็นอินเทอร์เฟซส่วนตัวที่รักษาการเชื่อมต่อกับ FaceService Keyguard ใช้เพื่อเข้าถึงการตรวจสอบสิทธิ์ด้วยใบหน้าด้วย UI ที่กำหนดเอง แอปไม่มีสิทธิ์เข้าถึง FaceManager และต้องใช้ BiometricPrompt แทน
FaceService
เป็นการติดตั้งใช้งานเฟรมเวิร์กที่จัดการการเข้าถึงฮาร์ดแวร์ตรวจสอบสิทธิ์ด้วยใบหน้า โดยมีเครื่องสถานะการลงทะเบียนและการตรวจสอบสิทธิ์พื้นฐาน รวมถึงเครื่องมือช่วยเหลืออื่นๆ (เช่น การแจกแจง) เนื่องจากข้อกังวลด้านความเสถียรและความปลอดภัย จึงไม่อนุญาตให้โค้ดของผู้ให้บริการทำงานในกระบวนการนี้ ระบบจะเข้าถึงโค้ดของผู้ให้บริการทั้งหมดผ่านอินเทอร์เฟซ Face 1.0 HIDL
faced
เป็นไฟล์ปฏิบัติการ Linux ที่ติดตั้งใช้งานอินเทอร์เฟซ Face 1.0 HIDL ซึ่ง FaceService ใช้ โดยจะลงทะเบียนตัวเองเป็น IBiometricsFace@1.0 เพื่อให้ FaceService ค้นหาได้
การใช้งาน
Face HIDL
หากต้องการติดตั้งใช้งาน Face HIDL คุณต้องติดตั้งใช้งาน เมธอดทั้งหมดของ IBiometricsFace.hal
ในไลบรารีเฉพาะของผู้ให้บริการ
ข้อความแสดงข้อผิดพลาด
ระบบจะส่งข้อความแสดงข้อผิดพลาดโดยการเรียกกลับและส่งเครื่องสถานะกลับไปที่สถานะไม่ได้ใช้งาน หลังจากส่งข้อความแล้ว ข้อความส่วนใหญ่จะมีสตริงที่แสดงต่อผู้ใช้ที่เกี่ยวข้องเพื่อแจ้งให้ผู้ใช้ทราบถึงข้อผิดพลาด แต่ไม่ใช่ข้อผิดพลาดทั้งหมดจะมีสตริงที่แสดงต่อผู้ใช้นี้ ดูข้อมูลเพิ่มเติมเกี่ยวกับข้อความแสดงข้อผิดพลาดได้ที่
types.hal
ข้อความแสดงข้อผิดพลาดทั้งหมดแสดงถึงสถานะสิ้นสุด ซึ่งหมายความว่าเฟรมเวิร์กจะถือว่า HAL กลับสู่สถานะไม่ได้ใช้งานหลังจากส่งข้อความแสดงข้อผิดพลาด
ข้อความการรับข้อมูล
ระบบจะส่งข้อความการรับข้อมูลระหว่างการลงทะเบียนหรือการตรวจสอบสิทธิ์ และมีวัตถุประสงค์เพื่อแนะนำผู้ใช้ให้ลงทะเบียนหรือตรวจสอบสิทธิ์ได้สำเร็จ
แต่ละลำดับจะมี
ข้อความที่เชื่อมโยงจากFaceAuthenticationManager.java
ไฟล์ คุณสามารถเพิ่มข้อความเฉพาะของผู้ให้บริการได้ตราบใดที่มีสตริงความช่วยเหลือที่เกี่ยวข้อง ข้อความการรับข้อมูลไม่ใช่สถานะสิ้นสุดในตัวของมันเอง โดยระบบคาดหวังให้ HAL ส่งข้อความเหล่านี้มากเท่าที่จำเป็นเพื่อดำเนินการลงทะเบียนหรือการตรวจสอบสิทธิ์ปัจจุบันให้เสร็จสมบูรณ์ หากข้อความการรับข้อมูลส่งผลให้เกิดสถานะสิ้นสุดที่ไม่สามารถดำเนินการต่อได้ HAL ควรส่งข้อความแสดงข้อผิดพลาดตามข้อความการรับข้อมูล เช่น กรณีที่รูปภาพมืดเกินไปและยังคงมืดเกินไปจนไม่สามารถดำเนินการต่อได้ ในกรณีนี้ การส่ง UNABLE_TO_PROCESS หลังจากพยายามหลายครั้งแล้วแต่ไม่สามารถดำเนินการต่อได้ถือเป็นเรื่องสมเหตุสมผล
ฮาร์ดแวร์
อุปกรณ์ต้องมีฮาร์ดแวร์ที่ปลอดภัยเพื่อให้เป็นไปตามข้อกำหนดข้อมูลไบโอเมตริกที่รัดกุม สำหรับ Android 10 เพื่อให้มั่นใจในความสมบูรณ์ของข้อมูลใบหน้าและการเปรียบเทียบการตรวจสอบสิทธิ์ขั้นสุดท้าย เอกสารประกอบเกี่ยวกับข้อกำหนดความเข้ากันได้ของ Android (CDD) ระบุระดับความปลอดภัยที่จำเป็นและอัตราการยอมรับการปลอมแปลง (SAR) ที่ยอมรับได้ ต้องมีสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) สำหรับการประมวลผลและการจดจำที่ปลอดภัย นอกจากนี้ ยังต้องมีฮาร์ดแวร์กล้องที่ปลอดภัยเพื่อป้องกันการโจมตีแบบแทรกแซงในการตรวจสอบสิทธิ์ด้วยใบหน้า เช่น หน้าหน่วยความจำที่เชื่อมโยงสำหรับข้อมูลรูปภาพอาจมีสิทธิ์และทำเครื่องหมายเป็นแบบอ่านอย่างเดียวเพื่อให้เฉพาะฮาร์ดแวร์กล้องเท่านั้นที่อัปเดตได้ ในอุดมคติแล้ว ไม่มีกระบวนการใดควรมีสิทธิ์เข้าถึง ยกเว้น TEE และฮาร์ดแวร์
เนื่องจากฮาร์ดแวร์ตรวจสอบสิทธิ์ด้วยใบหน้ามีความแตกต่างกันอย่างมาก จึงจำเป็นต้องพัฒนาไดรเวอร์เฉพาะฮาร์ดแวร์เพื่อเปิดใช้การตรวจสอบสิทธิ์ด้วยใบหน้า ทั้งนี้ขึ้นอยู่กับสถาปัตยกรรมของอุปกรณ์แต่ละเครื่อง ดังนั้นจึงไม่มีการติดตั้งใช้งานอ้างอิงสำหรับ faced
เมธอด
เมธอดต่อไปนี้ทั้งหมดเป็นแบบอะซิงโครนัสและต้องกลับสู่เฟรมเวิร์กทันที หากไม่ทำเช่นนั้น ระบบจะทำงานช้าลงและอาจมีการรีเซ็ต Watchdog เราขอแนะนำให้ใช้คิวข้อความที่มีหลายเธรดเพื่อหลีกเลี่ยงการบล็อกผู้เรียก คำขอ GET ทั้งหมดควรแคชข้อมูลเมื่อเป็นไปได้ เพื่อให้ผู้เรียกถูกบล็อกเป็นระยะเวลาสั้นที่สุด
| เมธอด | คำอธิบาย |
|---|---|
setCallback() |
FaceService เรียกใช้เพื่อส่งข้อความทั้งหมดกลับไปยังตัวเอง |
setActiveUser() |
ตั้งค่าผู้ใช้ที่ใช้งานอยู่ ซึ่งการดำเนินการ HAL ทั้งหมดในภายหลังจะนำไปใช้กับผู้ใช้รายนี้ การตรวจสอบสิทธิ์จะเป็นของผู้ใช้รายนี้เสมอจนกว่าจะมีการเรียกใช้เมธอดนี้อีกครั้ง |
revokeChallenge() |
สิ้นสุดธุรกรรมที่ปลอดภัยโดยทำให้คำท้าที่สร้างโดย
โดย generateChallenge() ไม่ถูกต้อง |
enroll() |
ลงทะเบียนใบหน้าของผู้ใช้ |
cancel() |
ยกเลิกการดำเนินการปัจจุบัน (เช่น ลงทะเบียน ตรวจสอบสิทธิ์
นำออก หรือแจกแจง) และส่ง faced กลับสู่สถานะไม่ได้ใช้งาน |
enumerate() |
แจกแจงเทมเพลตใบหน้าทั้งหมดที่เชื่อมโยงกับผู้ใช้ที่ใช้งานอยู่ |
remove() |
นำเทมเพลตใบหน้าหรือเทมเพลตใบหน้าทั้งหมดที่เชื่อมโยงกับผู้ใช้ที่ใช้งานอยู่ ออก |
authenticate() |
ตรวจสอบสิทธิ์ผู้ใช้ที่ใช้งานอยู่ |
userActivity() |
ควรใช้เมธอดนี้เมื่อ HAL อยู่ในสถานะตรวจสอบสิทธิ์หรือ
สแตนด์บายเท่านั้น การใช้เมธอดนี้เมื่อ HAL ไม่อยู่ในสถานะใดสถานะหนึ่งเหล่านี้
จะแสดงผล OPERATION_NOT_SUPPORTED การเรียกใช้เมธอดนี้ขณะที่ HAL กำลังตรวจสอบสิทธิ์อยู่แล้วอาจเพิ่มระยะเวลาที่ระบบค้นหาใบหน้า |
resetLockout() |
เมื่อปฏิเสธใบหน้ามากเกินไป ระบบจะกำหนดให้ faced เข้าสู่สถานะล็อกเอาต์ (LOCKOUT หรือ LOCKOUT_PERMANENT) เมื่อเป็นเช่นนั้น ระบบจะกำหนดให้ส่งเวลาที่เหลือไปยังเฟรมเวิร์กเพื่อให้แสดงต่อผู้ใช้ เช่นเดียวกับ setFeature() เมธอดนี้ต้องใช้โทเค็นการตรวจสอบสิทธิ์ด้วยฮาร์ดแวร์ (HAT) ที่ใช้งานอยู่เพื่อรีเซ็ตสถานะภายในอย่างปลอดภัย รีเซ็ตการล็อกเอาต์
เท่านั้น สำหรับผู้ใช้ปัจจุบัน |
เมธอดที่เหลืออีก 3 รายการเป็นแบบซิงโครนัสทั้งหมดและควรบล็อกเป็นระยะเวลาสั้นที่สุดเพื่อหลีกเลี่ยงการหยุดทำงานของเฟรมเวิร์ก
| เมธอด | คำอธิบาย |
|---|---|
generateChallenge() |
สร้างโทเค็นแบบสุ่มที่ไม่ซ้ำกันและปลอดภัยด้วยการเข้ารหัสลับ ซึ่งใช้เพื่อระบุจุดเริ่มต้นของธุรกรรมที่ปลอดภัย |
setFeature() |
เปิดหรือปิดใช้ฟีเจอร์สำหรับผู้ใช้ปัจจุบัน ด้วยเหตุผลด้านความปลอดภัย เมธอดนี้ต้องใช้ HAT จากการตรวจสอบ PIN/รูปแบบ/รหัสผ่านของผู้ใช้กับคำท้าข้างต้น |
getFeature() |
ดึงข้อมูลสถานะการเปิดใช้ปัจจุบันของฟีเจอร์ตามที่กำหนดโดย
ค่าเริ่มต้นหรือการเรียกใช้ setFeature() ข้างต้น หากรหัสใบหน้าไม่ถูกต้อง การ
ติดตั้งใช้งานต้องแสดงผล ILLEGAL_ARGUMENT |
getAuthenticatorId() |
แสดงผลตัวระบุที่เชื่อมโยงกับชุดใบหน้าปัจจุบัน ตัวระบุนี้ต้อง เปลี่ยนทุกครั้งที่เพิ่มใบหน้า |
แผนภาพสถานะ
เฟรมเวิร์กคาดหวังให้ faced เป็นไปตามแผนภาพสถานะด้านล่าง
รูปที่ 2 โฟลว์สถานะการตรวจสอบสิทธิ์ด้วยใบหน้า