Thông tin sinh trắc học

Dữ liệu sinh trắc học cung cấp 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 bằng thiết bị. Trong mô hình xác thực theo bậc, phương thức xác thực chính (chẳng hạn như các phương thức dựa trên yếu tố tri thức như mã PIN, hình mở khoá và mật khẩu) cung cấp 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 phụ, mang đến sự cân bằng giữa sự tiện lợi và bảo mật. Android CDD xác định ba 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à Thuận tiện). Mỗi lớp có một bộ điều kiện tiên quyết, đặc quyền và quy tắc ràng buộc – vui lòng xem CDD ở trên để biết thêm thông tin chi tiết. Cả ba lớp đều được phép tích hợp với màn hình khoá, nhưng chỉ 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à trình xác thực đó 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 (Lớp 3)
BIOMETRIC_WEAK (Loại 2) Không Không
BIOMETRIC_CONVENIENCE
(Lớp 1)
Không Không Không
DEVICE_CREDENTIAL

Khung Android hỗ trợ xác thực sinh trắc học bằng khuôn mặt và vân tay. Android có thể được tuỳ chỉnh để hỗ trợ các phương thức sinh trắc học khác (chẳng hạn như Iris). 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 thông số kỹ thuật bảo mật bằng 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 được bản địa hoá cho các ứng dụng sử dụng BiometricPrompt để xác thực. Các chuỗi này dùng để 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.
  • Bao gồm tính nă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. Giao diện này cung cấp các hằng số mà nhà phát triển có thể sử 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 mà nhà phát triển có thể sử dụng để hướng 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() mà nhà phát triển có thể sử dụng để 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 xác thực thiết bị hay không.
  • Cung cấp thêm tính năng hỗ trợ cho các khoá xác thực cho mỗi lần sử dụng trong lớp BiometricPrompt.

Android 10

  • Ra mắt BiometricManager lớp mà nhà phát triển có thể dùng để truy vấn về khả năng xác thực bằng sinh trắc học.
  • Tích hợp chế độ 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.
  • Không dùng lớp FingerprintManager nữa. Nếu ứng dụng hệ thống và ứng dụng đi kèm của bạn sử dụng lớp này, hãy cập nhật các ứng dụng đó để sử dụng BiometricPromptBiometricManager.
  • Cập nhật các kiểm thử trình xác minh CTS FingerprintManager để kiểm thử BiometricPrompt bằng BiometricPromptBoundKeysTest.

Triển khai

Để đảm bảo người dùng và nhà phát triển có trải nghiệm sinh trắc học liền mạch, hãy tích hợp ngăn xếp sinh trắc học với các API BiometricPrompt, BiometricManagerACTION_BIOMETRIC_ENROLL. Các thiết bị có cảm biến sinh trắc học phải tuân thủ các yêu cầu về độ mạnh này.Ngoài ra, tất cả các phương thức 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 của bạn với API ACTION_BIOMETRIC_ENROLL:

  1. Sửa đổi BiometricSignActivity để hiển thị quy trình đăng ký của bạn. Xin lưu ý rằng bạn chỉ có thể hiển thị dữ liệu sinh trắc học nếu dữ liệu đó đáp ứng độ mạnh được yêu cầu. Nếu thiết bị của bạn hỗ trợ nhiều loại, thao tác này sẽ hiển thị một danh sách để người dùng có thể chọn.
Cấu trúc BiometricPrompt
Hình 1. Cấu trúc của BiometricPrompt

Nguyên tắc triển khai HAL

Hãy làm theo các nguyên tắc sau đây về HAL sinh trắc học để đảm bảo rằng dữ liệu sinh trắc học không bị rò rỉbị 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ờ truy cập được từ bên ngoài môi trường bảo mật tách biệt (chẳng hạn như TEE hoặc Secure Element). Tất cả dữ liệu được lưu trữ phải được mã hoá bằng khoá dành riêng cho thiết bị mà chỉ TEE (Môi trường thực thi đáng tin cậy) 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 tách biệt bảo mật và bảo vệ môi trường đó bằng chính sách SELinux. Chỉ cho phép môi trường tách biệt 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ả tệp thiết bị.
  • Việc thu nạp, đăng ký và nhận dạng bằng sinh trắc học phải diễn ra bên trong môi trường tách biệt bảo mật để ngăn chặn các sự cố rò rỉ 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 Lớp 3 (trước đây là Mạnh) và Lớp 2 (trước đây là Yếu).
  • Để bảo vệ khỏ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 bạn phải ký một mẫu bằng đường dẫn hệ thống tệp, nhóm và mã nhận dạng sinh trắc học tuyệt đối để các tệp mẫu không hoạt động được trên một thiết bị khác hoặc cho 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 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 bạn 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 method cung 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à để bảo vệ 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 ở TEE. Nếu không thể thực hiện được do các yêu cầu về bộ nhớ của môi trường tách biệt an toàn, hãy thêm các trình nối để đảm bảo xoá dữ liệu khi người dùng bị xoá hoặc thiết bị bị xoá sạch. Xem LockSettingsService.removeBiometricForUser()

Tuỳ chỉnh

Nếu thiết bị của bạn hỗ trợ nhiều phương thức nhận dạng 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. Khi triển khai BiometricPrompt, bạn nên ưu tiên phương thức xác thực sinh trắc học Lớp 3 (trước đây là Mạnh) làm phương thức mặc định, trừ phi người dùng ghi đè phương thức này một cách rõ ràng, sau đó một thông báo cảnh báo cần được hiển thị để giải thích các rủi ro liên quan đến phương thức xác thực sinh trắc học (ví dụ: Ảnh của bạn có thể mở khoá thiết bị của bạn)

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 ngữ cảnh sẽ đượ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 do 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ả ngôn ngữ mà thiết bị hỗ trợ. Ngoài ra, hãy đảm bảo các thuộc tính sau được giữ nguyên:


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ể sử dụng cả(các) phương thức sinh trắc học và 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ó) đáp ứng các yêu cầu của trình xác thực

Sử dụng chuỗi chỉ dành cho sinh trắc học (chẳng hạn như "Sử dụng vân tay")

getPromptMessage()

Thông báo hiển thị trên BiometricPrompt trong khi xác thực

Chỉ các loại Đã đăng ký (nếu có) đá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 (ví dụ: "Dùng vân tay hoặc mã PIN để tiếp tục")

getSettingName()

Tên của chế độ cài đặt cho phép BiometricPrompt để xác thực

Tất cả các loại được thiết bị hỗ trợ (ngay cả khi chưa được đă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 Lớp 2 với khuôn mặt đã đăng ký, mã PIN đã đăng kýcảm biến vân tay Lớp 3 với 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()

Dữ liệu sinh trắc học loại 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 mới đáp ứng các yêu cầu của 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)

"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ỉ đăng ký khuôn mặt)

"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 khoá màn hình HOẶC phương thức mở khoá bằng sinh trắc học loại 3

"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"
(Mã vân tay và mọi phương thức khoá màn hình thỏa mãn yêu cầu; chỉ mã PIN được đăng ký)

"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 các yêu cầu)

Phương thức khoá màn hình HOẶC phương thức mở khoá bằng sinh trắc học loại 2

"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 đáp ứng các 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 các 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 đáp ứng các yêu cầu)

Xác nhận kết quả

Việc triển khai tính năng 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 (tính an toàn, kiểm thử chuyên sâu dựa vào trình xác minh)
  • Mục Kiểm thử 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ó AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0), thì thiết bị đó phải vượt qua kiểm thử VTS có liên quan (fingerprint, face)