Dữ liệu sinh trắc học mang đến một cách xác nhận danh tính thuận tiện hơn nhưng có thể kém an toàn hơn khi dùng thiết bị. Theo mô hình xác thực theo cấp, phương thức xác thực chính (tức là các phương thức dựa trên yếu tố kiến thức như mã PIN, hình mở khoá và mật khẩu) mang lại mức độ bảo mật cao nhất. Dữ liệu sinh trắc học nằm ở cấp xác thực thứ cấp, mang đến sự cân bằng giữa tính tiện lợi và bảo mật. CDD Android xác định 3 lớp độ mạnh của thông tin sinh trắc học: Lớp 3 (trước đây là Mạnh), Lớp 2 (trước đây là Yếu) và Lớp 1 (trước đây là Tiện lợi). Mỗi lớp đều có một bộ điều kiện tiên quyết, đặc quyền và ràng buộc – vui lòng xem CDD ở trên để biết thêm thông tin chi tiết. Cả 3 lớp đều được phép tích hợp với màn hình khoá, nhưng chỉ các trình xác thực Mạnh và Yếu mới được phép tích hợp với API android.hardware.biometrics. Bảng này mô tả từng trình xác thực và chức năng mà chúng hỗ trợ.
| Authenticator | Màn hình khoá | Tích hợp BiometricPrompt | Kho khoá (khoá dựa trên thời gian) | Kho khoá (khoá dựa trên thao tác) |
|---|---|---|---|---|
| BIOMETRIC_STRONG (Loại 3) | Có | Có | Có | Có |
| BIOMETRIC_WEAK (Loại 2) | Có | Có | Không | Không |
| BIOMETRIC_CONVENIENCE (Lớp 1) |
Có | Không | Không | Không |
| DEVICE_CREDENTIAL | Có | Có | Có | Có |
Khung Android hỗ trợ xác thực bằng dữ liệu sinh trắc học khuôn mặt và vân tay. Bạn có thể tuỳ chỉnh Android để hỗ trợ các phương thức sinh trắc học khác (chẳng hạn như mống mắt). Tuy nhiên, việc tích hợp dữ liệu sinh trắc học sẽ phụ thuộc vào tính bảo mật của dữ liệu sinh trắc học, chứ không phải phương thức. Để biết thêm thông tin chi tiết về các quy cách bảo mật sinh trắc học, hãy xem bài viết Đo lường mức độ bảo mật của tính năng Mở khoá bằng sinh trắc học.
Nguồn
Android 12
- Giới thiệu API BiometricManager.Strings. API này cung cấp các chuỗi đã bản địa hoá cho những ứng dụng dùng BiometricPrompt để xác thực. Các chuỗi này được thiết kế để nhận biết thiết bị và cung cấp thông tin cụ thể hơn về(các) loại xác thực có thể được sử dụng.
- Hỗ trợ cảm biến vân tay dưới màn hình (UDFPS).
Android 11
- Giới thiệu giao diện BiometricManager.Authenticators, cung cấp các hằng số mà nhà phát triển có thể dùng để chỉ định các loại xác thực mà ứng dụng của họ chấp nhận.
- Thêm thao tác theo ý định
ACTION_BIOMETRIC_ENROLL. Nhà phát triển có thể dùng thao tác này để hướng dẫn người dùng đăng ký một phương thức xác thực đáp ứng các yêu cầu của ứng dụng. - Thêm phương thức
AuthenticationResult#getAuthenticationType(). Các nhà phát triển có thể dùng phương thức này để kiểm tra xem người dùng có xác thực bằng thông tin xác thực sinh trắc học hay thông tin đăng nhập thiết bị hay không. - Cung cấp thêm sự hỗ trợ cho các khoá xác thực cho mỗi lần sử dụng trong lớp BiometricPrompt.
Android 10
- Giới thiệu
BiometricManagerlớp mà nhà phát triển có thể dùng để truy vấn trạng thái sẵn có của tính năng xác thực bằng sinh trắc học. - Bao gồm tính năng tích hợp xác thực bằng vân tay và khuôn mặt cho
BiometricPrompt
Android 9
- Chỉ bao gồm tính năng tích hợp vân tay cho
BiometricPrompt. - Ngừng sử dụng lớp FingerprintManager. Nếu các ứng dụng đi kèm và ứng dụng hệ thống của bạn sử dụng lớp này, hãy cập nhật để sử dụng
BiometricPromptvàBiometricManager. - Đã cập nhật các kiểm thử trình xác minh CTS
FingerprintManagerđể kiểm thửBiometricPromptbằngBiometricPromptBoundKeysTest.
Triển khai
Để đảm bảo người dùng và nhà phát triển có trải nghiệm liền mạch về sinh trắc học, hãy tích hợp ngăn xếp sinh trắc học của bạn với các API BiometricPrompt, BiometricManager và ACTION_BIOMETRIC_ENROLL. Các thiết bị có cảm biến sinh trắc học phải tuân thủ những yêu cầu về độ mạnh này.Ngoài ra, tất cả các hoạt động triển khai đều phải vượt qua mô-đun CTS CtsBiometricsTestCases.
Cách tích hợp ngăn xếp sinh trắc học với API ACTION_BIOMETRIC_ENROLL:
- Sửa đổi BiometricEnrollActivity để trình bày quy trình đăng ký của bạn. Xin lưu ý rằng bạn chỉ có thể trình bày dữ liệu sinh trắc học nếu dữ liệu đó đáp ứng yêu cầu về độ mạnh. Nếu thiết bị của bạn hỗ trợ nhiều phương thức, thì thao tác này sẽ hiển thị một danh sách để người dùng có thể chọn.
Nguyên tắc triển khai HAL
Hãy làm theo các nguyên tắc HAL sinh trắc học này để đảm bảo rằng dữ liệu sinh trắc học không bị rò rỉ và được xoá khi người dùng bị xoá khỏi thiết bị:
- Đảm bảo rằng dữ liệu sinh trắc học thô hoặc dữ liệu phái sinh (chẳng hạn như mẫu) không bao giờ có thể truy cập từ bên ngoài môi trường biệt lập an toàn (chẳng hạn như TEE hoặc Phần tử bảo mật). Tất cả dữ liệu được lưu trữ phải được mã hoá bằng một khoá dành riêng cho thiết bị mà chỉ Môi trường thực thi đáng tin cậy (TEE) mới biết. Nếu phần cứng hỗ trợ, hãy giới hạn quyền truy cập phần cứng vào môi trường biệt lập an toàn và bảo vệ môi trường này bằng một chính sách SELinux. Chỉ cho phép môi trường biệt lập an toàn truy cập vào kênh giao tiếp (ví dụ: SPI, I2C) bằng chính sách SELinux rõ ràng trên tất cả các tệp thiết bị.
- Việc thu thập, đăng ký và nhận dạng dữ liệu sinh trắc học phải diễn ra trong môi trường biệt lập an toàn để ngăn chặn các vụ vi phạm dữ liệu và các cuộc tấn công khác. Yêu cầu này chỉ áp dụng cho dữ liệu sinh trắc học Loại 3 (trước đây là Mạnh) và Loại 2 (trước đây là Yếu).
- Để chống lại các cuộc tấn công phát lại, hãy ký các mẫu sinh trắc học bằng một khoá riêng tư dành riêng cho thiết bị. Đối với Tiêu chuẩn mã hoá nâng cao (AES), tối thiểu hãy ký một mẫu bằng đường dẫn tuyệt đối của hệ thống tệp, nhóm và mã nhận dạng sinh trắc học để các tệp mẫu không hoạt động trên một thiết bị khác hoặc đối với bất kỳ ai khác ngoài người dùng đã đăng ký các tệp đó trên cùng một thiết bị. Ví dụ: ngăn việc sao chép dữ liệu sinh trắc học của một người dùng khác trên cùng một thiết bị hoặc từ một thiết bị khác.
- Nếu cần lưu trữ dữ liệu bên ngoài TEE, hãy sử dụng đường dẫn hệ thống tệp do
setActiveUser() HIDL methodcung cấp hoặc cung cấp một cách khác để xoá tất cả dữ liệu mẫu người dùng khi người dùng bị xoá. Lý do là để ngăn chặn việc rò rỉ dữ liệu người dùng. Những thiết bị không sử dụng đường dẫn này phải dọn dẹp sau khi người dùng bị xoá. CDD yêu cầu dữ liệu sinh trắc học và các tệp phái sinh phải được lưu trữ ở dạng mã hoá – đặc biệt là nếu không nằm trong TEE. Nếu không thể thực hiện việc này do yêu cầu về bộ nhớ của môi trường biệt lập an toàn, hãy thêm các hook để đảm bảo xoá dữ liệu khi người dùng bị xoá hoặc thiết bị bị xoá sạch dữ liệu. Xem LockSettingsService.removeBiometricsForUser()
Tuỳ chỉnh
Nếu thiết bị của bạn hỗ trợ nhiều phương thức sinh trắc học, thì người dùng có thể chỉ định một phương thức mặc định trong phần cài đặt. Việc triển khai BiometricPrompt của bạn nên ưu tiên thông tin sinh trắc học Loại 3 (trước đây là Loại mạnh) làm mặc định, trừ phi người dùng ghi đè một cách rõ ràng. Sau đó, bạn cần hiển thị một thông báo cảnh báo giải thích các rủi ro liên quan đến thông tin sinh trắc học (ví dụ: Ảnh của bạn có thể mở khoá thiết bị)
Chuỗi xác thực dành riêng cho thiết bị
Kể từ Android 12, các chuỗi xác thực theo bối cảnh được cung cấp cho nhà phát triển thông qua API BiometricManager.Strings. Bạn có thể tuỳ chỉnh các giá trị tài nguyên mà API này trả về để triển khai các chuỗi dành riêng cho thiết bị. Nếu bạn làm vậy, hãy đảm bảo rằng mọi chuỗi mới đều được dịch cho tất cả các ngôn ngữ mà thiết bị hỗ trợ. Ngoài ra, hãy đảm bảo rằng bạn giữ lại các thuộc tính sau:
Phương thức |
Mục đích của chuỗi |
(Các) loại xác thực cần đưa vào |
Nếu có thể dùng cả dữ liệu sinh trắc học và phương thức khoá màn hình |
|---|---|---|---|
getButtonLabel() |
Nhãn cho nút kích hoạt BiometricPrompt |
Chỉ các loại đã đăng ký (nếu có thể) đáp ứng các yêu cầu về trình xác thực |
Sử dụng chuỗi chỉ sinh trắc học (chẳng hạn như "Dùng vân tay") |
getPromptMessage() |
Thông báo xuất hiện trên BiometricPrompt trong khi xác thực |
Chỉ các loại đã đăng ký (nếu có thể) đáp ứng các yêu cầu về trình xác thực |
Sử dụng chuỗi kết hợp dữ liệu sinh trắc học và phương thức khoá màn hình (ví dụ: "Dùng vân tay hoặc mã PIN để tiếp tục") |
getSettingName() |
Tên của một chế độ cài đặt cho phép BiometricPrompt xác thực |
Tất cả các loại được hỗ trợ bởi thiết bị (ngay cả khi chưa đăng ký) đáp ứng các yêu cầu của trình xác thực |
Sử dụng chuỗi kết hợp dữ liệu sinh trắc học và phương thức khoá màn hình (chẳng hạn như "Dùng vân tay hoặc phương thức khoá màn hình") |
Ví dụ: hãy xem xét một thiết bị có cảm biến khuôn mặt Loại 2 với khuôn mặt đã đăng ký, mã PIN đã đăng ký và cảm biến vân tay Loại 3 mà không có vân tay đã đăng ký. Bảng sau đây cung cấp các chuỗi mẫu cho từng tổ hợp trình xác thực được phép và phương thức BiometricManager.Strings được gọi:
Trình xác thực được phép |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
|---|---|---|---|
Sinh trắc học cấp 3 (BIOMETRIC_STRONG) |
"Sử dụng vân tay" (Chỉ vân tay đáp ứng các yêu cầu của trình xác thực) |
"Sử dụng vân tay để tiếp tục" (Chỉ vân tay đáp ứng các yêu cầu về trình xác thực) |
"Sử dụng vân tay" (Chỉ vân tay đáp ứng các yêu cầu của trình xác thực) |
Sinh trắc học loại 2 (BIOMETRIC_WEAK) |
"Sử dụng khuôn mặt" (Khuôn mặt và vân tay đáp ứng các yêu cầu; chỉ khuôn mặt được đăng ký) |
"Dùng khuôn mặt để tiếp tục" (Khuôn mặt và vân tay đáp ứng yêu cầu; chỉ có khuôn mặt được đăng ký) |
"Dùng khuôn mặt hoặc vân tay" (Khuôn mặt và vân tay đáp ứng các yêu cầu; thiết bị hỗ trợ cả hai) |
Phương thức khoá màn hình (DEVICE_CREDENTIAL) |
"Dùng mã PIN" (Mọi phương thức khoá màn hình đều đáp ứng yêu cầu; mã PIN đã được đăng ký) |
"Nhập mã PIN để tiếp tục" (Mọi phương thức khoá màn hình đều đáp ứng yêu cầu; mã PIN đã được đăng ký) |
"Sử dụng phương thức khoá màn hình" (Mọi phương thức khoá màn hình đều đáp ứng các yêu cầu) |
Phương thức mở khoá bằng sinh trắc học loại 3 HOẶC phương thức khoá màn hình |
"Dùng mã PIN" (Vân tay và mọi phương thức khoá màn hình đều đáp ứng các yêu cầu; chỉ mã PIN được đăng ký) |
"Nhập mã PIN để tiếp tục" (Vân tay và mọi phương thức khoá màn hình đều đáp ứng yêu cầu; chỉ có mã PIN được đăng ký) |
"Sử dụng vân tay hoặc phương thức khoá màn hình" (Vân tay và mọi phương thức khoá màn hình đều đáp ứng yêu cầu) |
Phương thức mở khoá bằng sinh trắc học loại 2 HOẶC phương thức khoá màn hình |
"Sử dụng khuôn mặt" (Khuôn mặt, vân tay và mọi phương thức khoá màn hình đều đáp ứng yêu cầu; khuôn mặt đã được đăng ký và thay thế mã PIN) |
"Dùng khuôn mặt hoặc mã PIN để tiếp tục" (Khuôn mặt, vân tay và mọi phương thức khoá màn hình đều đáp ứng yêu cầu; khuôn mặt và mã PIN đã được đăng ký) |
"Dùng dữ liệu sinh trắc học hoặc phương thức khoá màn hình" (Khuôn mặt, vân tay và mọi phương thức khoá màn hình đều đáp ứng yêu cầu) |
Xác nhận kết quả
Việc triển khai sinh trắc học của bạn phải vượt qua các bài kiểm thử sau:
- CTS BiometricManager
- CTS BiometricPrompt (kiểm tra tính hợp lệ, kiểm thử chuyên sâu dựa vào trình xác minh)
- Mục Kiểm tra sinh trắc học CtsVerifier: Phải vượt qua từng phương thức mà thiết bị hỗ trợ
Ngoài ra, nếu thiết bị của bạn hỗ trợ một phương thức nhận dạng sinh trắc học có HIDL AOSP (fingerprint@2.1, fingerprint@2.2, face1.0), thì thiết bị đó phải vượt qua bài kiểm thử VTS có liên quan (fingerprint, face)