ในอุปกรณ์ที่มีเซ็นเซอร์ลายนิ้วมือ ผู้ใช้สามารถลงทะเบียนลายนิ้วมืออย่างน้อย 1 ลายนิ้วมือและใช้ลายนิ้วมือเหล่านั้นเพื่อปลดล็อกอุปกรณ์และทำงานอื่นๆ ได้ Android ใช้ภาษาที่ใช้นิยามอินเทอร์เฟซสำหรับฮาร์ดแวร์ (HIDL) ของลายนิ้วมือเพื่อเชื่อมต่อกับไลบรารีเฉพาะของผู้ให้บริการและฮาร์ดแวร์อ่านลายนิ้วมือ (เช่น เซ็นเซอร์ลายนิ้วมือ)
หากต้องการใช้ Fingerprint HIDL คุณต้องใช้ IBiometricsFingerprint.hal
ในไลบรารีเฉพาะของผู้ให้บริการ
การจับคู่ลายนิ้วมือ
โดยทั่วไปแล้วเซ็นเซอร์ลายนิ้วมือของอุปกรณ์จะอยู่ในสถานะไม่ได้ใช้งาน อย่างไรก็ตาม เมื่อมีการเรียก authenticate หรือ enroll เซ็นเซอร์ลายนิ้วมือจะรอกิจกรรมสำหรับการสัมผัส (หน้าจออาจปลุกระบบเมื่อผู้ใช้สัมผัสเซ็นเซอร์ลายนิ้วมือ) ขั้นตอนระดับสูงของการจับคู่ลายนิ้วมือมีดังนี้
- ผู้ใช้วางนิ้วบนเซ็นเซอร์ลายนิ้วมือ
- ไลบรารีเฉพาะของผู้ให้บริการจะตรวจสอบว่ามีลายนิ้วมือที่ตรงกันใน ชุดเทมเพลตลายนิ้วมือที่ลงทะเบียนไว้ในปัจจุบันหรือไม่
- ระบบจะส่งผลการจับคู่ไปยัง
FingerprintService
ขั้นตอนดังกล่าวสันนิษฐานว่ามีการลงทะเบียนลายนิ้วมือในอุปกรณ์แล้ว นั่นคือ ไลบรารีเฉพาะของผู้ให้บริการได้ลงทะเบียนเทมเพลตสำหรับลายนิ้วมือแล้ว ดูรายละเอียดเพิ่มเติมได้ที่ การตรวจสอบสิทธิ์
สถาปัตยกรรม
Fingerprint HAL โต้ตอบกับคอมโพเนนต์ต่อไปนี้
BiometricManagerโต้ตอบกับแอปโดยตรงในกระบวนการของแอป แต่ละแอปมีอินสแตนซ์ของIBiometricsFingerprint.halFingerprintServiceทำงานในกระบวนการของระบบ ซึ่งจัดการการสื่อสารกับ Fingerprint HAL- Fingerprint HAL คือการใช้งานอินเทอร์เฟซ IBiometricsFingerprint HIDL ใน C/C++ ซึ่งมีไลบรารีเฉพาะของผู้ให้บริการ ที่สื่อสารกับฮาร์ดแวร์เฉพาะอุปกรณ์
- คอมโพเนนต์ Keystore API และ KeyMint (เดิมคือ Keymaster) ให้ วิทยาการเข้ารหัสที่อิงฮาร์ดแวร์สำหรับการจัดเก็บคีย์อย่างปลอดภัยในสภาพแวดล้อมที่ปลอดภัย เช่น สภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE)
การใช้งาน HAL เฉพาะของผู้ให้บริการต้องใช้โปรโตคอลการสื่อสารที่ TEE กำหนด ห้ามส่งรูปภาพดั้งเดิมและฟีเจอร์ลายนิ้วมือที่ประมวลผลแล้วในหน่วยความจำที่ไม่น่าเชื่อถือ ข้อมูลไบโอเมตริกทั้งหมดดังกล่าวต้องจัดเก็บไว้ในฮาร์ดแวร์ที่ปลอดภัย เช่น TEE การรูทต้องไม่ ทำให้ข้อมูลไบโอเมตริกเสี่ยงต่อการถูกขโมย
FingerprintService และ fingerprintd จะเรียกผ่าน Fingerprint HAL ไปยังไลบรารีเฉพาะของผู้ให้บริการเพื่อลงทะเบียนลายนิ้วมือและดำเนินการอื่นๆ
หลักเกณฑ์การใช้งาน
หลักเกณฑ์ Fingerprint HAL ต่อไปนี้ออกแบบมาเพื่อให้แน่ใจว่าไม่มีการรั่วไหล ของข้อมูลลายนิ้วมือและระบบจะนำ ข้อมูลออกเมื่อนำผู้ใช้ออกจากอุปกรณ์
- ห้ามเข้าถึงข้อมูลลายนิ้วมือดั้งเดิมหรือข้อมูลที่ได้จากข้อมูลดังกล่าว (เช่น เทมเพลต) จากภายนอกไดรเวอร์เซ็นเซอร์หรือ TEE หากฮาร์ดแวร์รองรับ TEE ต้องจำกัดการเข้าถึงฮาร์ดแวร์เฉพาะใน TEE และได้รับการคุ้มครองภายใต้นโยบาย SELinux ช่อง Serial Peripheral Interface (SPI) ต้องเข้าถึงได้เฉพาะใน TEE และต้องมีนโยบาย SELinux ที่ชัดเจนในไฟล์ทั้งหมดของอุปกรณ์
- การรับ การลงทะเบียน และการจดจำลายนิ้วมือต้องเกิดขึ้นภายใน TEE
- ระบบไฟล์จัดเก็บได้เพียงข้อมูลลายนิ้วมือในรูปแบบที่เข้ารหัสเท่านั้น แม้ว่าระบบไฟล์จะเข้ารหัสไว้แล้วก็ตาม
- เทมเพลตลายนิ้วมือต้องลงชื่อด้วยคีย์ส่วนตัวที่เจาะจงอุปกรณ์ สำหรับมาตรฐานการเข้ารหัสขั้นสูง (AES) เทมเพลตต้องลงชื่อ ด้วยเส้นทางระบบไฟล์แบบสัมบูรณ์ กลุ่ม และรหัสนิ้วมือเป็นอย่างน้อย เพื่อทำให้ไฟล์เทมเพลต ใช้ไม่ได้ในอุปกรณ์อื่นหรือให้ใช้ได้เฉพาะกับผู้ใช้ที่ ลงทะเบียนไฟล์เทมเพลตไว้ในอุปกรณ์เดียวกันเท่านั้น เช่น การคัดลอกข้อมูลลายนิ้วมือจากผู้ใช้รายอื่นในอุปกรณ์เดียวกันหรือจากอุปกรณ์อื่นต้องไม่สามารถทำได้
- การใช้งานต้องใช้เส้นทางระบบไฟล์ที่
setActiveGroup()ระบุ หรือมีวิธีลบข้อมูลเทมเพลตของผู้ใช้ทั้งหมดเมื่อนำผู้ใช้ออก เราขอแนะนำอย่างยิ่งให้ จัดเก็บไฟล์เทมเพลตลายนิ้วมือเป็นไฟล์ที่เข้ารหัสและจัดเก็บไว้ในเส้นทางที่ระบุ หากทำไม่ได้เนื่องจากข้อกำหนดด้านพื้นที่เก็บข้อมูลของ TEE ผู้ใช้ต้องเพิ่มฮุกเพื่อให้แน่ใจว่าระบบจะนำข้อมูลออกเมื่อนำผู้ใช้ออก
เมธอดลายนิ้วมือ
อินเทอร์เฟซ Fingerprint 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