ลายนิ้วมือ HIDL

ในอุปกรณ์ที่มีเซ็นเซอร์ลายนิ้วมือ ผู้ใช้สามารถลงทะเบียนลายนิ้วมือตั้งแต่หนึ่งรายการขึ้นไป และใช้ลายนิ้วมือเหล่านั้นเพื่อปลดล็อกอุปกรณ์และทำงานอื่นๆ Android ใช้ Fingerprint Hardware Interface Definition Language (HIDL) เพื่อเชื่อมต่อกับไลบรารีเฉพาะของผู้จำหน่ายและฮาร์ดแวร์ลายนิ้วมือ (เช่น เซ็นเซอร์ลายนิ้วมือ)

หากต้องการใช้ Fingerprint HIDL คุณต้องใช้ IBiometricsFingerprint.hal ในไลบรารีเฉพาะของผู้ขาย

การจับคู่ลายนิ้วมือ

โดยทั่วไปแล้วเซ็นเซอร์ลายนิ้วมือของอุปกรณ์จะไม่ทำงาน อย่างไรก็ตาม ในการตอบสนองต่อการเรียกเพื่อ authenticate หรือ enroll เซ็นเซอร์ลายนิ้วมือจะรับฟังการสัมผัส (หน้าจออาจปลุกเมื่อผู้ใช้แตะเซ็นเซอร์ลายนิ้วมือ) ขั้นตอนการจับคู่ลายนิ้วมือระดับสูงประกอบด้วยขั้นตอนต่อไปนี้:

  1. ผู้ใช้วางนิ้วบนเซ็นเซอร์ลายนิ้วมือ
  2. ไลบรารีเฉพาะของผู้จำหน่ายจะกำหนดว่ามีลายนิ้วมือที่ตรงกันในชุดแม่แบบลายนิ้วมือที่ลงทะเบียนไว้ในปัจจุบันหรือไม่
  3. ผลการจับคู่จะถูกส่งต่อไปยัง FingerprintService

ขั้นตอนนี้จะถือว่าลายนิ้วมือได้รับการลงทะเบียนบนอุปกรณ์แล้ว นั่นคือ ไลบรารีเฉพาะของผู้จำหน่ายได้ลงทะเบียนแม่แบบสำหรับลายนิ้วมือ สำหรับรายละเอียดเพิ่มเติม ดู การรับรองความถูกต้อง

สถาปัตยกรรม

Fingerprint HAL โต้ตอบกับส่วนประกอบต่อไปนี้

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

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

FingerprintService และ fingerprintd โทรผ่าน Fingerprint HAL ไปยังไลบรารีเฉพาะของผู้จำหน่ายเพื่อลงทะเบียนลายนิ้วมือและดำเนินการอื่นๆ

การโต้ตอบกับลายนิ้วมือ
รูปที่ 2 การโต้ตอบของภูตลายนิ้วมือกับไลบรารีเฉพาะของผู้จำหน่ายลายนิ้วมือ

แนวทางการดำเนินการ

แนวทาง 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