ภาพรวม
การตรวจสอบสิทธิ์ด้วยใบหน้าช่วยให้ผู้ใช้ปลดล็อกอุปกรณ์ได้เพียงแค่ มองไปที่ด้านหน้าของอุปกรณ์ Android 10 เพิ่มการรองรับ สแต็กการตรวจสอบสิทธิ์ด้วยใบหน้าแบบใหม่ที่ประมวลผลเฟรมกล้องได้อย่างปลอดภัย พร้อมรักษาความปลอดภัยและความเป็นส่วนตัวระหว่างการตรวจสอบสิทธิ์ด้วยใบหน้าในฮาร์ดแวร์ที่รองรับ นอกจากนี้ Android 10 ยังมีวิธีง่ายๆ สำหรับการติดตั้งใช้งานที่สอดคล้องกับข้อกำหนดด้านความปลอดภัยเพื่อเปิดใช้การผสานรวมแอปพลิเคชันสำหรับธุรกรรม เช่น ธนาคารออนไลน์หรือบริการอื่นๆ
สแต็กการตรวจสอบสิทธิ์ด้วยใบหน้าของ Android เป็นการใช้งานใหม่ใน Android
10 การติดตั้งใช้งานใหม่นี้จะเปิดตัวอินเทอร์เฟซ IBiometricsFace.hal
IBiometricsFaceClientCallback.hal
และ types.hal
สถาปัตยกรรม
BiometricPrompt API มีการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกทั้งหมด ซึ่งรวมถึง ใบหน้า ลายนิ้วมือ และม่านตา Face HAL จะโต้ตอบกับคอมโพเนนต์ต่อไปนี้

รูปที่ 1 Biometric Stack
FaceManager
FaceManager
เป็นอินเทอร์เฟซส่วนตัวที่รักษาการเชื่อมต่อกับ FaceService
Keyguard ใช้เพื่อ
เข้าถึงการตรวจสอบสิทธิ์ด้วยใบหน้าด้วย UI ที่กำหนดเอง แอปไม่มีสิทธิ์เข้าถึง FaceManager และต้องใช้ BiometricPrompt
แทน
FaceService
นี่คือการใช้งานเฟรมเวิร์กที่จัดการการเข้าถึงฮาร์ดแวร์การตรวจสอบสิทธิ์ด้วยใบหน้า ซึ่งประกอบด้วยเครื่องสถานะการลงทะเบียนและการตรวจสอบสิทธิ์พื้นฐาน รวมถึงตัวช่วยอื่นๆ อีกมากมาย (เช่น การแจงนับ) เนื่องจากข้อกังวลด้านความเสถียรและความปลอดภัย จึงไม่อนุญาตให้ใช้โค้ดของผู้ให้บริการในกระบวนการนี้ เข้าถึงโค้ดของผู้ให้บริการทั้งหมดผ่านอินเทอร์เฟซ HIDL ของ Face 1.0
เผชิญ
ซึ่งเป็นไฟล์ปฏิบัติการของ Linux ที่ใช้การติดตั้งใช้งานอินเทอร์เฟซ HIDL ของ Face 1.0 ที่ 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() |
เมื่อปฏิเสธใบหน้ามากเกินไป ระบบจะต้องเข้าสู่สถานะล็อกเอาต์ (LOCKOUT หรือ LOCKOUT_PERMANENT ) เมื่อเข้าสู่สถานะดังกล่าว ระบบจะต้องส่งเวลาที่เหลือไปยังเฟรมเวิร์กเพื่อให้แสดงต่อผู้ใช้ได้faced เช่นเดียวกับ setFeature() วิธีนี้ต้องใช้
โทเค็นการตรวจสอบสิทธิ์ฮาร์ดแวร์ (HAT) ที่ใช้งานอยู่เพื่อรีเซ็ตสถานะภายในอย่างปลอดภัย รีเซ็ตการล็อกเอาต์
เฉพาะผู้ใช้ปัจจุบัน |
ส่วนอีก 3 วิธีที่เหลือเป็นแบบซิงโครนัสทั้งหมด และควรบล็อกเป็นระยะเวลาสั้นที่สุดเพื่อไม่ให้เฟรมเวิร์กหยุดทำงาน
วิธีการ | คำอธิบาย |
---|---|
generateChallenge() |
สร้างโทเค็นแบบสุ่มที่ไม่ซ้ำกันและปลอดภัยแบบเข้ารหัสลับซึ่งใช้เพื่อ ระบุจุดเริ่มต้นของธุรกรรมที่ปลอดภัย |
setFeature() |
เปิดหรือปิดใช้ฟีเจอร์สำหรับผู้ใช้ปัจจุบัน ด้วยเหตุผลด้านความปลอดภัย จึงต้องใช้ HAT จากการตรวจสอบ PIN/รูปแบบ/รหัสผ่านของผู้ใช้กับคำท้าข้างต้น |
getFeature() |
เรียกสถานะการเปิดใช้ปัจจุบันของฟีเจอร์ตามที่กำหนดโดย
ค่าเริ่มต้นหรือการเรียกใช้ setFeature() ด้านบน หาก Face ID ไม่ถูกต้อง การติดตั้งใช้งานต้องแสดงผล ILLEGAL_ARGUMENT |
getAuthenticatorId() |
แสดงตัวระบุที่เชื่อมโยงกับชุดใบหน้าปัจจุบัน ตัวระบุนี้ต้องเปลี่ยนทุกครั้งที่มีการเพิ่มใบหน้า |
แผนภาพสถานะ
เฟรมเวิร์กคาดหวังให้ faced
ทำตามแผนภาพสถานะด้านล่าง

รูปที่ 2 โฟลว์สถานะการตรวจสอบสิทธิ์ด้วยใบหน้า