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

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

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