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