ข้อมูลไบโอเมตริกเป็นวิธีที่สะดวกกว่า แต่อาจปลอดภัยน้อยกว่าในการยืนยันตัวตนด้วยอุปกรณ์ ในโมเดลการตรวจสอบสิทธิ์แบบเป็นชั้น การตรวจสอบสิทธิ์หลัก (ซึ่งเป็นรูปแบบที่อิงตามปัจจัยที่ทราบ เช่น PIN, รูปแบบ และรหัสผ่าน) จะมอบความปลอดภัยในระดับสูงสุด ข้อมูลไบโอเมตริกอยู่ในระดับการตรวจสอบสิทธิ์รอง ซึ่งให้ความสะดวกสบายและความปลอดภัยอย่างสมดุล CDD ของ Android กำหนดระดับความปลอดภัยของข้อมูลไบโอเมตริกออกเป็น 3 ระดับ ได้แก่ ระดับ 3 (เดิมคือ "ปลอดภัย") ระดับ 2 (เดิมคือ "ไม่ปลอดภัย") และระดับ 1 (เดิมคือ "สะดวก") แต่ละคลาสจะมีชุดข้อกําหนดเบื้องต้น สิทธิ์ และข้อจํากัด โปรดดูรายละเอียดเพิ่มเติมใน CDD ด้านบน คลาสทั้ง 3 คลาสได้รับอนุญาตให้ผสานรวมกับหน้าจอล็อก แต่อนุญาตให้ผสานรวมกับ API android.hardware.biometrics เฉพาะตัวตรวจสอบสิทธิ์ที่รัดกุมและที่รัดกุมน้อยเท่านั้น ตารางนี้อธิบายเกี่ยวกับโปรแกรมตรวจสอบสิทธิ์แต่ละรายการและฟังก์ชันการทำงานที่รองรับ
Authenticator | หน้าจอล็อก | การผสานรวม BiometricPrompt | คีย์สโตร์ (คีย์ตามเวลา) | คีย์สโตร์ (คีย์ที่อิงตามการดำเนินการ) |
---|---|---|---|---|
BIOMETRIC_STRONG (ระดับ 3) | ใช่ | ได้ | ได้ | ใช่ |
BIOMETRIC_WEAK (ระดับ 2) | ใช่ | ได้ | ไม่ได้ | ไม่ |
BIOMETRIC_CONVENIENCE (ระดับ 1) |
ใช่ | ไม่ได้ | ไม่ได้ | ไม่ |
DEVICE_CREDENTIAL | ใช่ | ได้ | ได้ | ใช่ |
เฟรมเวิร์ก Android รองรับการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริกของใบหน้าและลายนิ้วมือ Android สามารถปรับแต่งให้รองรับรูปแบบข้อมูลไบโอเมตริกอื่นๆ ได้ (เช่น ม่านตา) อย่างไรก็ตาม การผสานรวมข้อมูลไบโอเมตริกจะขึ้นอยู่กับความปลอดภัยด้านไบโอเมตริก ไม่ใช่รูปแบบ ดูรายละเอียดเพิ่มเติมเกี่ยวกับข้อกำหนดเฉพาะด้านความปลอดภัยไบโอเมตริกได้ที่การวัดความปลอดภัยการปลดล็อกด้วยข้อมูลไบโอเมตริก
แหล่งที่มา
Android 12
- เปิดตัว BiometricManager.Strings API ซึ่งให้สตริงที่แปลแล้วสำหรับแอปที่ใช้ BiometricPrompt เพื่อตรวจสอบสิทธิ์ สตริงเหล่านี้มีไว้เพื่อรับรู้อุปกรณ์และให้ข้อมูลเฉพาะเจาะจงมากขึ้นเกี่ยวกับประเภทการตรวจสอบสิทธิ์ที่อาจใช้
- รวมถึงรองรับเซ็นเซอร์ลายนิ้วมือใต้จอแสดงผล (UDFPS)
Android 11
- แนะนำอินเทอร์เฟซ BiometricManager.Authenticators ซึ่งมีค่าคงที่ที่นักพัฒนาแอปสามารถใช้เพื่อระบุประเภทการตรวจสอบสิทธิ์ที่แอปยอมรับ
- เพิ่ม
ACTION_BIOMETRIC_ENROLL
intent action ซึ่งนักพัฒนาแอปสามารถใช้เพื่อนำผู้ใช้ไปยังการลงทะเบียนวิธีตรวจสอบสิทธิ์ที่เป็นไปตามข้อกำหนดของแอป - เพิ่ม
AuthenticationResult#getAuthenticationType()
method ซึ่งนักพัฒนาแอปสามารถใช้เพื่อตรวจสอบว่าผู้ใช้ตรวจสอบสิทธิ์โดยใช้ข้อมูลประจำตัวไบโอเมตริกหรือข้อมูลประจำตัวของอุปกรณ์ - รองรับคีย์ auth-per-use เพิ่มเติมภายในคลาส BiometricPrompt
Android 10
- แนะนำ
BiometricManager
class ที่นักพัฒนาแอปสามารถใช้เพื่อค้นหาความพร้อมให้บริการของการตรวจสอบสิทธิ์ด้วยข้อมูลไบโอเมตริก - รวมถึงการผสานรวมการตรวจสอบสิทธิ์ด้วยลายนิ้วมือและใบหน้าสำหรับ
BiometricPrompt
Android 9
- รวมการผสานรวมลายนิ้วมือสำหรับ
BiometricPrompt
เท่านั้น - เลิกใช้งานคลาส FingerprintManager หากแอปที่รวมไว้และแอประบบใช้คลาสนี้ ให้อัปเดตแอปเหล่านั้นให้ใช้
BiometricPrompt
และBiometricManager
แทน - อัปเดตการทดสอบโปรแกรมตรวจสอบ CTS ของ
FingerprintManager
เพื่อทดสอบBiometricPrompt
โดยใช้BiometricPromptBoundKeysTest
การใช้งาน
ผสานรวมสแต็กข้อมูลไบโอเมตริกกับ BiometricPrompt
,
BiometricManager
และ ACTION_BIOMETRIC_ENROLL
API เพื่อให้ผู้ใช้และนักพัฒนาแอปได้รับประสบการณ์การใช้งานข้อมูลไบโอเมตริกที่ราบรื่น อุปกรณ์ที่มีเซ็นเซอร์ไบโอเมตริกต้องเป็นไปตามข้อกำหนดด้านความปลอดภัยเหล่านี้ นอกจากนี้ การติดตั้งใช้งานทั้งหมดต้องผ่านข้อบังคับของ CtsBiometricsTestCases CTS
วิธีผสานรวมสแต็กข้อมูลไบโอเมตริกกับ ACTION_BIOMETRIC_ENROLL API
- แก้ไข BiometricEnrollActivity เพื่อแสดงขั้นตอนการลงทะเบียน โปรดทราบว่าคุณจะแสดงข้อมูลไบโอเมตริกได้ก็ต่อเมื่อข้อมูลดังกล่าวเป็นไปตามระดับความแข็งแกร่งที่ขอ หากอุปกรณ์รองรับมากกว่า 1 รายการ การดำเนินการนี้จะแสดงรายการที่ผู้ใช้เลือกได้

หลักเกณฑ์การติดตั้งใช้งาน HAL
ปฏิบัติตามหลักเกณฑ์ HAL เกี่ยวกับข้อมูลไบโอเมตริกต่อไปนี้เพื่อให้มั่นใจว่าข้อมูลไบโอเมตริกจะไม่รั่วไหลและถูกนำออกเมื่อนำผู้ใช้ออกจากอุปกรณ์
- ตรวจสอบว่าข้อมูลไบโอเมตริกดิบหรือข้อมูลอนุพันธ์ (เช่น เทมเพลต) ไม่สามารถเข้าถึงได้จากภายนอกสภาพแวดล้อมที่แยกและปลอดภัย (เช่น TEE หรือองค์ประกอบที่ปลอดภัย) ข้อมูลที่จัดเก็บทั้งหมดต้องได้รับการเข้ารหัสด้วยคีย์เฉพาะอุปกรณ์ที่ TEE (Trusted Execution Environment) เท่านั้นที่ทราบ หากฮาร์ดแวร์รองรับ ให้จำกัดการเข้าถึงฮาร์ดแวร์ไปยังสภาพแวดล้อมที่แยกออกมาอย่างปลอดภัยและปกป้องด้วยนโยบาย SELinux ทำให้ช่องทางการสื่อสาร (เช่น SPI, I2C) เข้าถึงได้เฉพาะในสภาพแวดล้อมที่แยกส่วนอย่างปลอดภัยซึ่งมีนโยบาย SELinux ที่ชัดเจนในไฟล์ทั้งหมดของอุปกรณ์
- การเก็บรวบรวม การลงทะเบียน และการจดจำข้อมูลไบโอเมตริกต้องเกิดขึ้นภายในสภาพแวดล้อมที่แยกส่วนและปลอดภัยเพื่อป้องกันการละเมิดข้อมูลและการโจมตีอื่นๆ ข้อกำหนดนี้มีผลกับข้อมูลไบโอเมตริกคลาส 3 (เดิมคือ "แข็งแกร่ง") และคลาส 2 (เดิมคือ "อ่อนแอ") เท่านั้น
- ลงนามเทมเพลตข้อมูลไบโอเมตริกด้วยคีย์ส่วนตัวสำหรับอุปกรณ์โดยเฉพาะเพื่อป้องกันการโจมตีด้วยการเล่นซ้ำ สำหรับมาตรฐานการเข้ารหัสขั้นสูง (AES) ขั้นต่ำให้ลงชื่อเทมเพลตด้วยเส้นทางระบบไฟล์แบบสัมบูรณ์ กลุ่ม และรหัสข้อมูลไบโอเมตริกเพื่อให้ไฟล์เทมเพลตใช้งานไม่ได้ในอุปกรณ์อื่นหรือสำหรับบุคคลอื่นที่ไม่ใช่ผู้ใช้ที่ลงทะเบียนเทมเพลตในอุปกรณ์เดียวกัน เช่น ป้องกันไม่ให้คัดลอกข้อมูลไบโอเมตริกจากผู้ใช้รายอื่นในอุปกรณ์เดียวกันหรือจากอุปกรณ์อื่น
- หากต้องการจัดเก็บข้อมูลนอก TEE ให้ใช้เส้นทางระบบไฟล์ที่
setActiveUser() HIDL method
ระบุไว้ หรือระบุวิธีอื่นเพื่อลบข้อมูลเทมเพลตผู้ใช้ทั้งหมดเมื่อนำผู้ใช้ออก เหตุผลคือเพื่อปกป้องการรั่วไหลของข้อมูลผู้ใช้ อุปกรณ์ที่ไม่ได้ใช้เส้นทางนี้ต้องล้างข้อมูลหลังจากนำผู้ใช้ออก CDD กำหนดให้จัดเก็บข้อมูลไบโอเมตริกและไฟล์อนุพันธ์ที่มีการเข้ารหัส โดยเฉพาะหากไม่ได้อยู่ใน TEE หากดำเนินการนี้ไม่สามารถทำได้เนื่องจากข้อกำหนดด้านพื้นที่เก็บข้อมูลของสภาพแวดล้อมที่แยกส่วนอย่างปลอดภัย ให้เพิ่มฮุกเพื่อให้มั่นใจว่าระบบจะนำข้อมูลออกเมื่อนำผู้ใช้ออกหรือล้างข้อมูลในอุปกรณ์ ดู LockSettingsService.removeBiometricsForUser()
การปรับแต่ง
หากอุปกรณ์รองรับข้อมูลไบโอเมตริกหลายรายการ ผู้ใช้ควรระบุค่าเริ่มต้นในการตั้งค่าได้ BiometricPrompt
การใช้งานของคุณควรใช้ข้อมูลไบโอเมตริกระดับ 3 (เดิมคือ "ระดับสูง") เป็นค่าเริ่มต้น เว้นแต่ผู้ใช้จะลบล้างข้อมูลดังกล่าวอย่างชัดเจน ในกรณีนี้ระบบจะต้องแสดงข้อความเตือนที่อธิบายถึงความเสี่ยงที่เกี่ยวข้องกับข้อมูลไบโอเมตริก (เช่น รูปภาพของคุณอาจปลดล็อกอุปกรณ์ได้)
สตริงการตรวจสอบสิทธิ์เฉพาะอุปกรณ์
ตั้งแต่ Android 12 เป็นต้นไป สตริงการตรวจสอบสิทธิ์ตามบริบทจะพร้อมใช้งานสำหรับนักพัฒนาแอปผ่าน BiometricManager.Strings API คุณปรับแต่งค่าทรัพยากรที่ API นี้แสดงผลเพื่อใช้สตริงเฉพาะอุปกรณ์ได้ หากดำเนินการดังกล่าว โปรดตรวจสอบว่าสตริงใหม่ได้รับการแปลสำหรับภาษาทั้งหมดที่อุปกรณ์รองรับ นอกจากนี้ โปรดตรวจสอบว่าระบบเก็บรักษาพร็อพเพอร์ตี้ต่อไปนี้ไว้
วิธีการ |
วัตถุประสงค์ของสตริง |
ประเภทการตรวจสอบสิทธิ์ที่จะรวม |
หากทั้งข้อมูลไบโอเมตริกและการล็อกหน้าจอเป็นไปได้ |
---|---|---|---|
getButtonLabel() |
ป้ายกำกับสำหรับปุ่มที่เรียกใช้ BiometricPrompt |
ประเภทที่ลงทะเบียนเท่านั้น (หากเป็นไปได้) ที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์ |
ใช้สตริงข้อมูลไบโอเมตริกเท่านั้น (เช่น "ใช้ลายนิ้วมือ") |
getPromptMessage() |
ข้อความที่แสดงใน BiometricPrompt ขณะตรวจสอบสิทธิ์ |
ประเภทที่ลงทะเบียนเท่านั้น (หากเป็นไปได้) ที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์ |
ใช้สตริงการล็อกหน้าจอและข้อมูลไบโอเมตริกที่รวมกัน (เช่น "ใช้ลายนิ้วมือหรือ PIN เพื่อดำเนินการต่อ") |
getSettingName() |
ชื่อการตั้งค่าที่เปิดใช้ BiometricPrompt สำหรับการรับรอง |
อุปกรณ์รองรับทุกประเภท (แม้ว่าจะไม่ได้ลงทะเบียน) ที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์ |
ใช้สตริงข้อมูลไบโอเมตริกและการล็อกหน้าจอที่รวมกัน (เช่น "ใช้ลายนิ้วมือหรือการล็อกหน้าจอ") |
ตัวอย่างเช่น อุปกรณ์ที่มีเซ็นเซอร์ใบหน้าระดับ 2 ที่มีใบหน้าที่ลงทะเบียน PIN ที่ลงทะเบียน และเซ็นเซอร์ลายนิ้วมือระดับ 3 ไม่มีลายนิ้วมือที่ลงทะเบียน ตารางต่อไปนี้แสดงสตริงตัวอย่างสำหรับชุดค่าผสมของโปรแกรมตรวจสอบสิทธิ์ที่อนุญาตแต่ละรายการ และวิธีการ BiometricManager.Strings ที่เรียกใช้
โปรแกรมตรวจสอบสิทธิ์ที่อนุญาต |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
---|---|---|---|
ไบโอเมตริกระดับ 3 (BIOMETRIC_STRONG) |
"ใช้ลายนิ้วมือ" (มีเพียงลายนิ้วมือเท่านั้นที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์) |
"ใช้ลายนิ้วมือเพื่อดำเนินการต่อ" (มีเพียงลายนิ้วมือเท่านั้นที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์) |
"ใช้ลายนิ้วมือ" (มีเพียงลายนิ้วมือเท่านั้นที่เป็นไปตามข้อกำหนดของโปรแกรมตรวจสอบสิทธิ์) |
ข้อมูลไบโอเมตริกระดับ 2 (BIOMETRIC_WEAK) |
"ใช้ใบหน้า" (ใบหน้าและลายนิ้วมือเป็นไปตามข้อกำหนด ระบบจะลงทะเบียนเฉพาะใบหน้า) |
"ใช้ใบหน้าเพื่อดำเนินการต่อ" (ใบหน้าและลายนิ้วมือตรงตามข้อกำหนด ลงทะเบียนไว้เฉพาะใบหน้า) |
"ใช้ใบหน้าหรือลายนิ้วมือ" (ใบหน้าและลายนิ้วมือเป็นไปตามข้อกำหนด อุปกรณ์รองรับทั้ง 2 อย่าง) |
การล็อกหน้าจอ (DEVICE_CREDENTIAL) |
"ใช้ PIN" (การล็อกหน้าจอใดก็ได้ที่เป็นไปตามข้อกำหนด มีการลงทะเบียน PIN) |
"ป้อน PIN เพื่อดำเนินการต่อ" (การล็อกหน้าจอใดก็ได้ที่ตรงตามข้อกำหนด มีการลงทะเบียน PIN) |
"ใช้ล็อกหน้าจอ" (ล็อกหน้าจอใดก็ได้ที่ตรงตามข้อกำหนด) |
การล็อกหน้าจอด้วยข้อมูลไบโอเมตริกระดับ 3 หรือ |
"ใช้ PIN" (ลายนิ้วมือและการล็อกหน้าจอใดๆ เป็นไปตามข้อกำหนด ลงทะเบียนเฉพาะ PIN) |
"ป้อน PIN เพื่อดำเนินการต่อ" (ลายนิ้วมือและการล็อกหน้าจอใดๆ เป็นไปตามข้อกำหนด ลงทะเบียนเฉพาะ PIN) |
"ใช้ลายนิ้วมือหรือการล็อกหน้าจอ" (ลายนิ้วมือและการล็อกหน้าจอใดก็ได้ที่เป็นไปตามข้อกำหนด) |
การปลดล็อกด้วยไบโอเมตริกระดับ 2 หรือการล็อกหน้าจอ |
"ใช้ใบหน้า" (ใบหน้า ลายนิ้วมือ และการล็อกหน้าจอใดๆ ก็ตามต้องเป็นไปตามข้อกำหนด มีการลงทะเบียนใบหน้าและใบหน้าจะแทนที่ PIN) |
"ใช้ใบหน้าหรือ PIN เพื่อดำเนินการต่อ" (ใบหน้า ลายนิ้วมือ และการล็อกหน้าจอใดๆ เป็นไปตามข้อกำหนด มีการลงทะเบียนใบหน้าและ PIN) |
"ใช้ข้อมูลไบโอเมตริกหรือการล็อกหน้าจอ" (ใบหน้า ลายนิ้วมือ และการล็อกหน้าจอใดก็ได้ที่เป็นไปตามข้อกำหนด) |
การตรวจสอบความถูกต้อง
การติดตั้งใช้งานข้อมูลไบโอเมตริกต้องผ่านการทดสอบต่อไปนี้
- CTS BiometricManager
- CTS BiometricPrompt (ความถูกต้อง การทดสอบเชิงลึกจะอาศัยโปรแกรมตรวจสอบ)
- ส่วนการทดสอบข้อมูลไบโอเมตริกของ CtsVerifier: ต้องผ่านแต่ละรูปแบบที่อุปกรณ์รองรับ
นอกจากนี้ หากอุปกรณ์รองรับข้อมูลไบโอเมตริกที่มี AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0) อุปกรณ์จะต้องผ่านการทดสอบ VTS ที่เกี่ยวข้อง (fingerprint, face)