ข้อมูลไบโอเมตริกเป็นวิธีที่สะดวกกว่าในการ ยืนยันตัวตนด้วยอุปกรณ์ แต่ก็อาจมีความปลอดภัยน้อยกว่า ภายใต้โมเดลการตรวจสอบสิทธิ์แบบแบ่งชั้น การตรวจสอบสิทธิ์หลัก (กล่าวคือ รูปแบบที่อิงตามปัจจัยด้านความรู้ เช่น 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
- ขอแนะนำ API BiometricManager.Strings ซึ่งมีสตริงที่แปลเป็นภาษาท้องถิ่นสำหรับแอปที่ใช้ BiometricPrompt เพื่อ การตรวจสอบสิทธิ์ สตริงเหล่านี้มีไว้เพื่อให้อุปกรณ์รับรู้และให้ข้อมูลที่เฉพาะเจาะจงมากขึ้นเกี่ยวกับประเภทการตรวจสอบสิทธิ์ที่อาจใช้
- รวมถึงการรองรับเซ็นเซอร์ลายนิ้วมือใต้จอแสดงผล (UDFPS)
Android 11
- ขอแนะนำอินเทอร์เฟซ BiometricManager.Authenticators ซึ่งมีค่าคงที่ที่นักพัฒนาแอปสามารถใช้เพื่อระบุ ประเภทการตรวจสอบสิทธิ์ที่แอปยอมรับ
- เพิ่ม
ACTION_BIOMETRIC_ENROLLintent action ซึ่งนักพัฒนาแอปสามารถใช้เพื่อนำผู้ใช้ไปลงทะเบียน วิธีการตรวจสอบสิทธิ์ที่ตรงตามข้อกำหนดของแอป - เพิ่ม
AuthenticationResult#getAuthenticationType()method ซึ่งนักพัฒนาแอปใช้เพื่อตรวจสอบว่าผู้ใช้ตรวจสอบสิทธิ์โดยใช้ ข้อมูลเข้าสู่ระบบไบโอเมตริกหรือข้อมูลเข้าสู่ระบบของอุปกรณ์หรือไม่ - ให้การสนับสนุนเพิ่มเติมสำหรับคีย์ auth-per-use ภายในคลาส BiometricPrompt
Android 10
- แนะนํา
BiometricManagerคลาสที่นักพัฒนาแอปใช้เพื่อค้นหาความพร้อมใช้งานของการตรวจสอบสิทธิ์ ไบโอเมตริกได้ - รวมการผสานรวมการตรวจสอบสิทธิ์ด้วยลายนิ้วมือและใบหน้าสำหรับ
BiometricPrompt
Android 9
- รวมเฉพาะการผสานรวมลายนิ้วมือสำหรับ
BiometricPrompt - เลิกใช้งานคลาส FingerprintManager หากแอปที่มาพร้อมเครื่องและแอปของระบบใช้คลาสนี้ ให้อัปเดตแอปให้ใช้
BiometricPromptและBiometricManagerแทน - อัปเดต
FingerprintManagerการทดสอบโปรแกรมตรวจสอบ CTS เพื่อทดสอบBiometricPromptโดยใช้BiometricPromptBoundKeysTest
การใช้งาน
โปรดผสานรวมสแต็กไบโอเมตริกกับ BiometricPrompt,
BiometricManager,
และ ACTION_BIOMETRIC_ENROLL
API เพื่อให้ผู้ใช้และนักพัฒนาแอปได้รับประสบการณ์การใช้งานไบโอเมตริกที่ราบรื่น อุปกรณ์ที่มีเซ็นเซอร์ไบโอเมตริกต้องเป็นไปตามข้อกำหนดด้านความแรงเหล่านี้ นอกจากนี้ การติดตั้งใช้งานทั้งหมดต้องผ่านโมดูล CTS ของ CtsBiometricsTestCases
หากต้องการผสานรวมสแต็กไบโอเมตริกกับ ACTION_BIOMETRIC_ENROLL API ให้ทำดังนี้
- แก้ไข BiometricEnrollActivity เพื่อแสดงขั้นตอนการลงทะเบียน โปรดทราบว่าคุณจะแสดงข้อมูลไบโอเมตริกได้ก็ต่อเมื่อเป็นไปตามระดับความแรงที่ขอเท่านั้น หากอุปกรณ์รองรับมากกว่า 1 รายการ การดำเนินการนี้ควรแสดงรายการที่ผู้ใช้เลือกได้
หลักเกณฑ์การใช้งาน HAL
ทำตามหลักเกณฑ์ HAL ไบโอเมตริกเหล่านี้เพื่อให้มั่นใจว่าระบบจะไม่รั่วไหลข้อมูลไบโอเมตริกและจะนำออกเมื่อมีการนำผู้ใช้ออกจากอุปกรณ์
- ตรวจสอบว่าข้อมูลไบโอเมตริกดิบหรือข้อมูลที่ได้จากข้อมูลไบโอเมตริกดิบ (เช่น เทมเพลต) จะไม่สามารถเข้าถึงได้จากภายนอกสภาพแวดล้อมที่แยกไว้อย่างปลอดภัย (เช่น TEE หรือ Secure Element) ข้อมูลที่จัดเก็บทั้งหมดต้อง เข้ารหัสด้วยคีย์เฉพาะอุปกรณ์ที่รู้จักเฉพาะสภาพแวดล้อมการดำเนินการที่เชื่อถือได้ (TEE) หากฮาร์ดแวร์รองรับ ให้จำกัดการเข้าถึงฮาร์ดแวร์ เฉพาะสภาพแวดล้อมที่แยกออกมาอย่างปลอดภัยและปกป้องด้วยนโยบาย SELinux ทำให้ช่องทางการสื่อสาร (เช่น SPI, I2C) เข้าถึงได้เฉพาะ สภาพแวดล้อมที่แยกอย่างปลอดภัยซึ่งมีนโยบาย SELinux ที่ชัดเจนในไฟล์ทั้งหมดของอุปกรณ์
- การรับ การลงทะเบียน และการจดจำไบโอเมตริกต้องเกิดขึ้นภายใน สภาพแวดล้อมที่แยกไว้อย่างปลอดภัยเพื่อป้องกันการละเมิดข้อมูลและการโจมตีอื่นๆ ข้อกำหนดนี้มีผลเฉพาะกับข้อมูลไบโอเมตริกคลาส 3 (เดิมคือแบบเข้มงวด) และคลาส 2 (เดิมคือแบบไม่เข้มงวด) เท่านั้น
- ลงนามเทมเพลตไบโอเมตริกด้วยคีย์ส่วนตัวที่เจาะจงอุปกรณ์เพื่อป้องกันการโจมตีแบบเล่นซ้ำ สำหรับมาตรฐานการเข้ารหัสขั้นสูง (AES) ให้ลงนามในเทมเพลตที่มีเส้นทางระบบไฟล์แบบสัมบูรณ์ กลุ่ม และรหัสไบโอเมตริกอย่างน้อยที่สุด เพื่อให้ไฟล์เทมเพลตใช้ไม่ได้ในอุปกรณ์อื่นหรือสำหรับบุคคลอื่นนอกเหนือจากผู้ใช้ที่ลงทะเบียนในอุปกรณ์เดียวกัน เช่น ป้องกันการคัดลอกข้อมูล ไบโอเมตริกจากผู้ใช้รายอื่นในอุปกรณ์เดียวกันหรือจากอุปกรณ์อื่น
- หากต้องการจัดเก็บข้อมูลภายนอก TEE ให้ใช้เส้นทางระบบไฟล์
ที่ได้รับจาก
setActiveUser() HIDL methodหรือระบุวิธีอื่น ในการลบข้อมูลเทมเพลตผู้ใช้ทั้งหมดเมื่อนำผู้ใช้ออก เหตุผลคือเพื่อ ป้องกันการรั่วไหลของข้อมูลผู้ใช้ อุปกรณ์ที่ไม่ได้ใช้เส้นทางนี้ต้องล้างข้อมูลหลังจากนำผู้ใช้ออก CDD กำหนดให้จัดเก็บข้อมูลไบโอเมตริกและไฟล์อนุพันธ์โดยเข้ารหัส โดยเฉพาะหากไม่ได้อยู่ใน TEE หากทำไม่ได้เนื่องจากข้อกำหนดในการจัดเก็บของสภาพแวดล้อมที่แยกอย่างปลอดภัย ให้เพิ่ม Hook เพื่อให้แน่ใจว่าระบบจะนำข้อมูลออกเมื่อนำผู้ใช้ออกหรือล้างข้อมูลในอุปกรณ์ ดู LockSettingsService.removeBiometricsForUser()
การปรับแต่ง
หากอุปกรณ์รองรับไบโอเมตริกหลายรายการ ผู้ใช้ควรระบุค่าเริ่มต้นในการตั้งค่าได้
BiometricPromptการติดตั้งใช้งาน
ควรเลือกใช้ข้อมูลไบโอเมตริกคลาส 3 (เดิมคือระดับสูง) เป็นค่าเริ่มต้น
เว้นแต่ผู้ใช้จะลบล้างอย่างชัดเจน ในกรณีนี้จะต้องแสดงข้อความเตือน
ที่อธิบายความเสี่ยงที่เกี่ยวข้องกับข้อมูลไบโอเมตริก (เช่น
รูปภาพของคุณอาจปลดล็อกอุปกรณ์ได้)
สตริงการตรวจสอบสิทธิ์เฉพาะอุปกรณ์
ตั้งแต่ Android 12 เป็นต้นไป สตริงการตรวจสอบสิทธิ์ตามบริบทจะพร้อมใช้งาน สำหรับนักพัฒนาแอปผ่าน BiometricManager.Strings API คุณปรับแต่งค่าทรัพยากรที่ API นี้ส่งคืนเพื่อใช้สตริงเฉพาะอุปกรณ์ได้ หากทำเช่นนั้น โปรดตรวจสอบว่าสตริงใหม่ได้รับการ แปล สำหรับทุกภาษาที่อุปกรณ์รองรับ นอกจากนี้ โปรดตรวจสอบว่าพร็อพเพอร์ตี้ต่อไปนี้ยังคงอยู่
เมธอด |
String purpose |
ประเภทการตรวจสอบสิทธิ์ที่จะรวม |
หากใช้ได้ทั้งข้อมูลไบโอเมตริกและการล็อกหน้าจอ |
|---|---|---|---|
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) |
"ใช้ไบโอเมตริกหรือการล็อกหน้าจอ" (ใบหน้า ลายนิ้วมือ และ การล็อกหน้าจอใดก็ได้เป็นไปตามข้อกำหนด) |
การตรวจสอบความถูกต้อง
การติดตั้งใช้งานไบโอเมตริกต้องผ่านการทดสอบต่อไปนี้
- BiometricManager ของ CTS
- CTS BiometricPrompt (sanity, in-depth testing relies on verifier)
- ส่วนการทดสอบไบโอเมตริกของ CtsVerifier ต้องผ่านการทดสอบแต่ละรายการด้วยรูปแบบที่อุปกรณ์รองรับ
นอกจากนี้ หากอุปกรณ์รองรับข้อมูลไบโอเมตริกที่มี AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0) จะต้องผ่านการทดสอบ VTS ที่เกี่ยวข้อง (fingerprint, face)