Thông tin sinh trắc học

Dữ liệu sinh trắc học mang đến một cách thức thuận tiện hơn nhưng có thể kém an toàn hơn để xác nhận danh tính của bạn bằ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 đến 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ứ hai, mang đến sự cân bằng giữa tính thuận tiện và bảo mật. CDD của Android xác định 3 lớp độ mạnh của dữ liệu 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 tập hợp các đ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ợ.

Trình xác thực 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 (Lớp 2) Không Không
BIOMETRIC_CONVENIENCE
(Lớp 1)
Không Không Không
DEVICE_CREDENTIAL

Khung Android hỗ trợ tính năng xác thực bằng sinh trắc học qua 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 thông số kỹ thuật bảo mật sinh trắc học, hãy xem bài viết Đo lường tính 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, cung cấp các chuỗi đã bản địa hoá cho các ứng dụng sử 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 ACTION_BIOMETRIC_ENROLL ý định hành động, mà nhà phát triển có thể 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ể dùng để kiểm tra xem người dùng đã 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ị.
  • 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

  • Giới thiệu BiometricManager lớp mà nhà phát triển có thể dùng để truy vấn tính khả dụng của tính năng xác thực bằng sinh trắc học.
  • Tích hợp tính năng xác thực bằng vân tay và khuôn mặt cho BiometricPrompt

Android 9

  • Chỉ tích hợp vân tay cho BiometricPrompt.
  • Ngừng 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 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 liền mạch với dữ liệu 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ủ các yêu cầu về độ mạnh này.Ngoài ra, tất cả các cách triển khai phải vượt qua mô-đun CtsBiometricsTestCases CTS.

Cách tích hợp ngăn xếp sinh trắc học với API ACTION_BIOMETRIC_ENROLL:

  1. 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 độ mạnh được yêu cầu. Nếu thiết bị của bạn hỗ trợ nhiều dữ liệu sinh trắc học, thì thao tác này sẽ trình bày một danh sách mà người dùng có thể chọn.
Cấu trúc BiometricPrompt
Hình 1. Kiến trúc BiometricPrompt architecture

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 sau đây để đả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ờ có thể truy cập được 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ệ bằng 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 hành vi 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 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), hãy ký tối thiểu 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 sao cho 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 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 từ 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 của 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. Các 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 ở trong TEE. Nếu điều này không khả thi do các 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á. Xem LockSettingsService.removeBiometricsForUser()

Tùy chỉnh

Nếu thiết bị của bạn hỗ trợ nhiều dữ liệu sinh trắc học, thì người dùng sẽ có thể chỉ định một dữ liệu mặc định trong phần cài đặt. Cách triển khai BiometricPrompt của bạn nên ưu tiên dữ liệu sinh trắc học Lớp 3 (trước đây là Mạnh) làm mặc định, trừ phi người dùng ghi đè 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 dữ liệu 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 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 như 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 giữ nguyên các thuộc tính sau: following


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ả dữ liệu sinh trắc học và phương thức khoá màn hình đều có thể được sử dụng

getButtonLabel()

Nhãn cho một 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 của trình xác thực

Sử dụng chuỗi chỉ có dữ liệu sinh trắc học (chẳng hạn như "Sử 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 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ụ: "Sử 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 thiết bị hỗ trợ (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ư, "Sử 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ý và 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 Lớ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 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)

Dữ liệu sinh trắc học Lớp 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ý)

"Sử dụng khuôn mặt để tiếp tục"
(Khuôn mặt và vân tay đáp ứng các yêu cầu; chỉ khuôn mặt được đăng ký)

"Sử 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)

"Sử dụng mã PIN"
(Mọi phương thức khoá màn hình đều đáp ứng các 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 các 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)

Dữ liệu sinh trắc học Lớp 3 HOẶC phương thức khoá màn hình

"Sử 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 các yêu cầu; chỉ 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 các yêu cầu)

Dữ liệu sinh trắc học Lớp 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 các yêu cầu; khuôn mặt được đăng ký và thay thế mã PIN)

"Sử 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ý)

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

Xác nhận kết quả

Cách triển khai dữ liệu sinh trắc học của bạn phải vượt qua các kiểm thử sau:

  • CTS BiometricManager
  • CTS BiometricPrompt (kiểm thử sơ bộ, kiểm thử chuyên sâu dựa vào trình xác minh)
  • Phần Kiểm thử sinh trắc học của CtsVerifier section: 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ợ dữ liệu 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 (vân tay, khuôn mặt)