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 แทน

บริการ 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 เป็นไปตามแผนภาพสถานะด้านล่าง

แผนภาพสถานะ

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