การตรวจสอบใบหน้า HIDL

ภาพรวม

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

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

สถาปัตยกรรม

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

กองไบโอเมตริกซ์
รูปที่ 1 กองไบโอเมตริกซ์

ผู้จัดการใบหน้า

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 ปฏิบัติตามแผนภาพสถานะด้านล่าง

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