HIDL การตรวจสอบสิทธิ์ด้วยใบหน้า

ภาพรวม

การตรวจสอบสิทธิ์ด้วยใบหน้าช่วยให้ผู้ใช้ปลดล็อกอุปกรณ์ได้ง่ายๆ เพียงมองไปที่ด้านหน้าของอุปกรณ์ Android 10 เพิ่มการรองรับสแต็กการตรวจสอบใบหน้าแบบใหม่ที่ประมวลผลเฟรมกล้องได้อย่างปลอดภัย เพื่อรักษาความปลอดภัยและความเป็นส่วนตัวในระหว่างการตรวจสอบใบหน้าบนฮาร์ดแวร์ที่รองรับ นอกจากนี้ Android 10 ยังมีวิธีง่ายๆ ในการติดตั้งใช้งานที่เป็นไปตามข้อกำหนดด้านความปลอดภัยเพื่อเปิดใช้การผสานรวมแอปพลิเคชันสำหรับธุรกรรม เช่น ธนาคารออนไลน์หรือบริการอื่นๆ

สแต็กการตรวจสอบสิทธิ์ด้วยใบหน้าของ Android เป็นการใช้งานใหม่ใน Android 10 การใช้งานใหม่จะเปิดตัวอินเทอร์เฟซ IBiometricsFace.hal, IBiometricsFaceClientCallback.hal และ types.hal

สถาปัตยกรรม

BiometricPrompt API มีการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกทั้งหมด ซึ่งรวมถึงใบหน้า นิ้ว และม่านตา HAL ใบหน้าโต้ตอบกับคอมโพเนนต์ต่อไปนี้

สแต็กข้อมูลไบโอเมตริก

รูปที่ 1 แพ็กเกจข้อมูลไบโอเมตริก

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() เมื่อมีการปฏิเสธใบหน้ามากเกินไป faced จะต้องเข้าสู่สถานะการล็อก (LOCKOUT หรือ LOCKOUT_PERMANENT) เมื่อเข้าสู่สถานะดังกล่าว faced จะต้องส่งเวลาที่เหลือไปยังเฟรมเวิร์กเพื่อให้เฟรมเวิร์กแสดงเวลาที่เหลือแก่ผู้ใช้ได้ เช่นเดียวกับ setFeature() วิธีนี้ต้องใช้โทเค็นการตรวจสอบสิทธิ์ฮาร์ดแวร์ (HAT) ที่ใช้งานอยู่เพื่อรีเซ็ตสถานะภายในอย่างปลอดภัย รีเซ็ตการล็อกเฉพาะผู้ใช้ปัจจุบัน

วิธีการที่เหลืออีก 3 วิธีเป็นแบบซิงค์ทั้งหมดและควรบล็อกเป็นระยะเวลาสั้นๆ เพื่อไม่ให้เฟรมเวิร์กหยุดทำงาน

วิธีการ คำอธิบาย
generateChallenge() สร้างโทเค็นสุ่มที่ไม่ซ้ำกันและปลอดภัยตามหลักวิทยาการเข้ารหัสลับเพื่อบ่งบอกการเริ่มต้นธุรกรรมที่ปลอดภัย
setFeature() เปิดหรือปิดใช้ฟีเจอร์สําหรับผู้ใช้ปัจจุบัน ด้วยเหตุนี้ HAT จึงต้องไม่ตรวจสอบ PIN/รูปแบบ/รหัสผ่านของผู้ใช้เทียบกับภารกิจข้างต้นเพื่อความปลอดภัย
getFeature() ดึงข้อมูลสถานะการเปิดใช้ปัจจุบันของฟีเจอร์ตามที่ค่าเริ่มต้นหรือการเรียกใช้ setFeature() ด้านบนกำหนด หาก Face ID ไม่ถูกต้อง การใช้งานต้องแสดงผลเป็น ILLEGAL_ARGUMENT
getAuthenticatorId() แสดงผลตัวระบุที่เชื่อมโยงกับชุดใบหน้าปัจจุบัน ตัวระบุนี้ต้องเปลี่ยนแปลงทุกครั้งที่มีการเพิ่มใบหน้า

แผนภาพสถานะ

เฟรมเวิร์กคาดหวังให้ faced เป็นไปตามแผนภาพสถานะด้านล่าง

แผนภาพสถานะ

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