ในอุปกรณ์ที่มีเซ็นเซอร์ลายนิ้วมือ ผู้ใช้สามารถลงทะเบียนลายนิ้วมืออย่างน้อย 1 รายการและใช้ลายนิ้วมือเหล่านั้นเพื่อปลดล็อกอุปกรณ์และทำงานอื่นๆ ได้ Android ใช้ Fingerprint Hardware Interface Definition Language (HIDL) เพื่อเชื่อมต่อกับไลบรารีเฉพาะของผู้ให้บริการและฮาร์ดแวร์ลายนิ้วมือ (เช่น เซ็นเซอร์ลายนิ้วมือ)
หากต้องการใช้ HIDL ลายนิ้วมือ คุณต้องใช้ IBiometricsFingerprint.hal
ในไลบรารีเฉพาะของผู้ให้บริการ
การจับคู่ลายนิ้วมือ
โดยทั่วไปแล้วเซ็นเซอร์ลายนิ้วมือของอุปกรณ์จะอยู่ในสถานะว่าง อย่างไรก็ตาม เมื่อตอบสนองต่อ
การเรียกใช้ authenticate
หรือ enroll
เซ็นเซอร์ลายนิ้วมือจะรอการแตะ (หน้าจออาจตื่นขึ้นเมื่อผู้ใช้
แตะเซ็นเซอร์ลายนิ้วมือด้วย) ขั้นตอนการทำงานระดับสูงของการจับคู่ลายนิ้วมือ
มีดังนี้
- ผู้ใช้วางนิ้วบนเซ็นเซอร์ลายนิ้วมือ
- ไลบรารีเฉพาะของผู้ให้บริการจะพิจารณาว่ามีลายนิ้วมือที่ตรงกันใน ชุดเทมเพลตลายนิ้วมือที่ลงทะเบียนไว้ในปัจจุบันหรือไม่
- ระบบจะส่งผลลัพธ์ที่ตรงกันไปยัง
FingerprintService
ขั้นตอนการทำงานนี้ถือว่ามีการลงทะเบียนลายนิ้วมือในอุปกรณ์แล้ว นั่นคือ ไลบรารีเฉพาะของผู้ให้บริการได้ลงทะเบียนเทมเพลตสำหรับลายนิ้วมือ ดูรายละเอียดเพิ่มเติมได้ที่การตรวจสอบสิทธิ์
สถาปัตยกรรม
HAL ลายนิ้วมือจะโต้ตอบกับคอมโพเนนต์ต่อไปนี้
BiometricManager
โต้ตอบกับแอปโดยตรงในกระบวนการของแอป แต่ละแอปมีอินสแตนซ์ของIBiometricsFingerprint.hal
FingerprintService
ทำงานใน กระบวนการของระบบ ซึ่งจัดการการสื่อสารกับ HAL ลายนิ้วมือ- HAL ลายนิ้วมือเป็นการใช้งาน C/C++ ของ อินเทอร์เฟซ IBiometricsFingerprint HIDL ซึ่งมีไลบรารีเฉพาะผู้ให้บริการ ที่สื่อสารกับฮาร์ดแวร์เฉพาะอุปกรณ์
- คอมโพเนนต์ Keystore API และ KeyMint (เดิมชื่อ Keymaster) มีฟีเจอร์ต่อไปนี้ การเข้ารหัสที่ได้รับการสนับสนุนจากฮาร์ดแวร์สำหรับการจัดเก็บคีย์อย่างปลอดภัยในสภาพแวดล้อมที่ปลอดภัย เช่น สภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE)

การใช้งาน HAL ที่เฉพาะเจาะจงของผู้ให้บริการต้องใช้โปรโตคอลการสื่อสาร ที่ TEE ต้องการ ห้ามส่งรูปภาพจริงและฟีเจอร์ลายนิ้วมือที่ประมวลผลแล้วในหน่วยความจำที่ไม่น่าเชื่อถือ ข้อมูลไบโอเมตริกดังกล่าวทั้งหมดต้องจัดเก็บ ไว้ในฮาร์ดแวร์ที่ปลอดภัย เช่น TEE การรูทต้องไม่ ทำให้ข้อมูลไบโอเมตริกเสี่ยงต่อการถูกขโมย
FingerprintService
และ fingerprintd
จะโทรผ่าน Fingerprint HAL ไปยังไลบรารีเฉพาะของผู้ให้บริการเพื่อลงทะเบียนลายนิ้วมือและดำเนินการอื่นๆ

หลักเกณฑ์การใช้งาน
หลักเกณฑ์ HAL ลายนิ้วมือต่อไปนี้ออกแบบมาเพื่อให้มั่นใจว่า ข้อมูลลายนิ้วมือจะไม่รั่วไหลและจะนำออก เมื่อมีการนำผู้ใช้ออกจากอุปกรณ์
- ข้อมูลลายนิ้วมือดิบหรือข้อมูลที่ได้จากลายนิ้วมือ (เช่น เทมเพลต) ต้องไม่สามารถเข้าถึงได้จากภายนอกไดรเวอร์เซ็นเซอร์หรือ TEE หากฮาร์ดแวร์รองรับ TEE ต้องจำกัดการเข้าถึงฮาร์ดแวร์เฉพาะใน TEE และได้รับการคุ้มครองภายใต้นโยบาย SELinux ช่องทาง Serial Peripheral Interface (SPI) ต้องเข้าถึงได้เฉพาะ TEE และต้องมีนโยบาย SELinux ที่ชัดเจนในไฟล์อุปกรณ์ทั้งหมด
- การรับ การลงทะเบียน และการจดจำลายนิ้วมือต้องเกิดขึ้นภายใน TEE
- ระบบไฟล์จัดเก็บได้เพียงข้อมูลลายนิ้วมือในรูปแบบที่เข้ารหัสเท่านั้น แม้ว่าระบบไฟล์จะเข้ารหัสไว้แล้วก็ตาม
- เทมเพลตลายนิ้วมือต้องได้รับการลงนามด้วยคีย์ส่วนตัวที่เฉพาะเจาะจงสำหรับอุปกรณ์ สำหรับมาตรฐานการเข้ารหัสขั้นสูง (AES) เทมเพลตต้องได้รับการลงนามอย่างน้อย ด้วยเส้นทางระบบไฟล์แบบสัมบูรณ์ กลุ่ม และรหัสลายนิ้วมือ เพื่อให้ไฟล์เทมเพลต ใช้งานไม่ได้ในอุปกรณ์อื่นหรือสำหรับบุคคลอื่นที่ไม่ใช่ผู้ใช้ที่ ลงทะเบียนในอุปกรณ์เดียวกัน เช่น การคัดลอกข้อมูลลายนิ้วมือจาก ผู้ใช้อีกรายบนอุปกรณ์เดียวกันหรือจากอุปกรณ์อื่นจะต้องทำไม่ได้
- การติดตั้งใช้งานต้องใช้เส้นทางระบบไฟล์ที่ฟังก์ชัน
setActiveGroup()
ระบุ หรือมีวิธีลบข้อมูลเทมเพลตทั้งหมดของผู้ใช้ เมื่อนำผู้ใช้ออก เราขอแนะนำเป็นอย่างยิ่งให้จัดเก็บไฟล์เทมเพลตลายนิ้วมือเป็นไฟล์ที่เข้ารหัสและจัดเก็บไว้ในเส้นทางที่ระบุ หากทำไม่ได้เนื่องจากข้อกำหนดในการจัดเก็บ TEE ผู้ใช้ต้องเพิ่ม Hook เพื่อให้แน่ใจว่าระบบจะนำข้อมูลออกเมื่อนำผู้ใช้ออก
วิธีการใช้ลายนิ้วมือ
อินเทอร์เฟซ HIDL ของลายนิ้วมือมีเมธอดหลักต่อไปนี้ใน
IBiometricsFingerprint.hal
วิธีการ | คำอธิบาย |
---|---|
enroll() |
เปลี่ยนเครื่องสถานะ HAL เพื่อเริ่ม รวบรวมและจัดเก็บเทมเพลตลายนิ้วมือ เมื่อการลงทะเบียนเสร็จสมบูรณ์ หรือหลังจากหมดเวลา สถานะเครื่อง HAL จะกลับไปที่สถานะว่าง |
preEnroll() |
สร้างโทเค็นที่ไม่ซ้ำเพื่อระบุจุดเริ่มต้นของ
การลงทะเบียนลายนิ้วมือ ระบุโทเค็นให้กับฟังก์ชัน enroll เพื่อ
ตรวจสอบว่ามีการตรวจสอบสิทธิ์ก่อนหน้านี้แล้ว เช่น การใช้รหัสผ่าน ระบบจะห่อโทเค็นหลังจากยืนยันข้อมูลเข้าสู่ระบบของอุปกรณ์แล้วเพื่อป้องกันการดัดแปลง ต้องตรวจสอบโทเค็นระหว่างการลงทะเบียนเพื่อยืนยัน
ว่าโทเค็นยังใช้ได้ |
getAuthenticatorId() |
แสดงผลโทเค็นที่เชื่อมโยงกับ ชุดลายนิ้วมือปัจจุบัน |
cancel() |
ยกเลิกการดำเนินการลงทะเบียนหรือการตรวจสอบสิทธิ์ที่รอดำเนินการ ระบบจะเปลี่ยนเครื่องสถานะ HAL กลับไปเป็นสถานะว่าง |
enumerate() |
การเรียกแบบซิงโครนัสสำหรับการแจงนับเทมเพลตลายนิ้วมือที่รู้จักทั้งหมด |
remove() |
ลบเทมเพลตลายนิ้วมือ |
setActiveGroup() |
จำกัดการดำเนินการ HAL ให้กับชุดลายนิ้วมือที่อยู่ในกลุ่มที่ระบุ ซึ่งระบุโดยตัวระบุกลุ่ม (GID) |
authenticate() |
ตรวจสอบสิทธิ์การดำเนินการที่เกี่ยวข้องกับลายนิ้วมือ (ระบุโดยรหัสการดำเนินการ) |
setNotify() |
ลงทะเบียนฟังก์ชันผู้ใช้ที่รับ การแจ้งเตือนจาก HAL หากเครื่องสถานะ HAL อยู่ในสถานะไม่ว่าง ระบบจะบล็อกฟังก์ชัน จนกว่า HAL จะออกจากสถานะไม่ว่าง |
postEnroll() |
สิ้นสุดการดำเนินการลงทะเบียนและทำให้แชลเลนจ์ที่สร้างขึ้นpreEnroll() ไม่ถูกต้อง ต้องเรียกใช้ฟังก์ชันนี้เมื่อสิ้นสุดเซสชันการลงทะเบียนลายนิ้วมือหลายนิ้วเพื่อระบุว่าไม่สามารถเพิ่มลายนิ้วมือได้อีก |
ดูรายละเอียดเพิ่มเติมเกี่ยวกับรายการเหล่านี้ได้ในความคิดเห็นใน IBiometricsFingerprint.hal