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