Trên các thiết bị có cảm biến vân tay, người dùng có thể đăng ký một hoặc nhiều vân tay và sử dụng các vân tay đó để mở khoá thiết bị cũng như thực hiện các thao tác khác. Android sử dụng Ngôn ngữ định nghĩa giao diện phần cứng vân tay (HIDL) để kết nối với thư viện dành riêng cho nhà cung cấp và phần cứng vân tay (ví dụ: cảm biến vân tay).
Để triển khai Fingerprint HIDL, bạn phải triển khai IBiometricsFingerprint.hal
trong thư viện dành riêng cho nhà cung cấp.
So khớp vân tay
Cảm biến vân tay của thiết bị thường ở trạng thái rảnh. Tuy nhiên, để phản hồi lệnh gọi đến authenticate
hoặc enroll
, cảm biến vân tay sẽ theo dõi thao tác chạm (màn hình cũng có thể thức khi người dùng chạm vào cảm biến vân tay). Quy trình cấp cao của việc so khớp vân tay bao gồm các bước sau:
- Người dùng đặt ngón tay lên cảm biến vân tay.
- Thư viện dành riêng cho nhà cung cấp xác định xem có dấu vân tay khớp trong nhóm mẫu vân tay đã đăng ký hiện tại hay không.
- Kết quả trùng khớp được chuyển đến
FingerprintService
.
Quy trình này giả định rằng vân tay đã được đăng ký trên thiết bị, tức là thư viện dành riêng cho nhà cung cấp đã đăng ký một mẫu cho vân tay. Để biết thêm thông tin, hãy xem phần Xác thực.
Kiến trúc
HAL vân tay tương tác với các thành phần sau.
BiometricManager
tương tác trực tiếp với một ứng dụng trong quy trình ứng dụng. Mỗi ứng dụng có một thực thể củaIBiometricsFingerprint.hal
FingerprintService
hoạt động trong quy trình hệ thống, xử lý hoạt động giao tiếp với HAL vân tay.- Fingerprint HAL là một phương thức triển khai C/C++ của giao diện HIDL IBiometricsFingerprint. Thư viện này chứa thư viện dành riêng cho nhà cung cấp giao tiếp với phần cứng dành riêng cho thiết bị.
- Các thành phần Keystore API và Keymaster cung cấp tính năng mã hoá dựa trên phần cứng để lưu trữ khoá một cách an toàn trong môi trường bảo mật, chẳng hạn như Môi trường thực thi đáng tin cậy (TEE).

Việc triển khai HAL dành riêng cho nhà cung cấp phải sử dụng giao thức giao tiếp mà TEE yêu cầu. Không được truyền hình ảnh thô và các tính năng vân tay đã xử lý trong bộ nhớ không đáng tin cậy. Tất cả dữ liệu sinh trắc học như vậy cần được lưu trữ trong phần cứng bảo mật, chẳng hạn như TEE. Quá trình can thiệp vào hệ thống không được làm rò rỉ dữ liệu sinh trắc học.
FingerprintService
và fingerprintd
thực hiện các lệnh gọi thông qua Fingerprint HAL đến thư viện dành riêng cho nhà cung cấp để đăng ký vân tay và thực hiện các thao tác khác.

Nguyên tắc triển khai
Các nguyên tắc sau đây về HAL vân tay được thiết kế để đảm bảo rằng dữ liệu vân tay không bị rò rỉ và bị xoá khi người dùng bị xoá khỏi thiết bị:
- Không bao giờ được truy cập vào dữ liệu vân tay thô hoặc dữ liệu phái sinh (ví dụ: mẫu) từ bên ngoài trình điều khiển cảm biến hoặc TEE. Nếu phần cứng hỗ trợ TEE, thì quyền truy cập phần cứng chỉ được giới hạn trong TEE và phải được chính sách SELinux bảo vệ. Chỉ TEE mới có thể truy cập vào kênh Giao diện ngoại vi nối tiếp (SPI) và phải có chính sách SELinux rõ ràng trên tất cả tệp thiết bị.
- Việc thu thập, đăng ký và nhận dạng vân tay phải diễn ra bên trong TEE.
- Chỉ có thể lưu trữ dạng mã hoá của dữ liệu vân tay trên hệ thống tệp, ngay cả khi chính hệ thống tệp đã được mã hoá.
- Mẫu vân tay phải được ký bằng 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 một mẫu phải được ký bằng đường dẫn hệ thống tệp, nhóm và mã vân tay tuyệt đối để các tệp mẫu không hoạt động được trên 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ụ: không thể sao chép được dữ liệu vân tay từ người dùng khác trên cùng thiết bị hoặc từ một thiết bị khác.
- Quá trình triển khai phải sử dụng đường dẫn hệ thống tệp do hàm
setActiveGroup()
cung cấp hoặc cung cấp cách xoá tất cả dữ liệu mẫu của người dùng khi người dùng bị xoá. Bạn nên lưu trữ các tệp mẫu vân tay dưới dạng tệp đã mã hoá và lưu trữ trong đường dẫn được cung cấp. Nếu không thể thực hiện việc này do các yêu cầu về bộ nhớ TEE, thì người triển khai phải thêm các trình nối để đảm bảo xoá dữ liệu khi người dùng bị xoá.
Phương thức vân tay
Giao diện Fingerprint HIDL chứa các phương thức chính sau trong IBiometricsFingerprint.hal
.
Phương thức | Mô tả |
---|---|
enroll() |
Chuyển đổi máy trạng thái HAL để bắt đầu thu thập và lưu trữ mẫu vân tay. Khi quá trình đăng ký hoàn tất hoặc sau khi hết thời gian chờ, máy trạng thái HAL sẽ trở về trạng thái rảnh. |
preEnroll() |
Tạo một mã thông báo duy nhất để cho biết thời điểm bắt đầu đăng ký vân tay. Cung cấp mã thông báo cho hàm enroll để đảm bảo đã có xác thực trước đó, ví dụ: sử dụng mật khẩu. Để ngăn chặn hành vi can thiệp, mã thông báo được gói sau khi xác nhận thông tin đăng nhập của thiết bị. Bạn phải kiểm tra mã thông báo trong quá trình đăng ký để xác minh rằng mã thông báo đó vẫn hợp lệ. |
getAuthenticatorId() |
Trả về một mã thông báo liên kết với bộ vân tay hiện tại. |
cancel() |
Huỷ các thao tác đăng ký hoặc xác thực đang chờ xử lý. Máy trạng thái HAL được trả về trạng thái rảnh. |
enumerate() |
Lệnh gọi đồng bộ để liệt kê tất cả mẫu vân tay đã biết. |
remove() |
Xoá mẫu vân tay. |
setActiveGroup() |
Hạn chế một thao tác HAL ở một tập hợp vân tay số thuộc một nhóm cụ thể, được xác định bằng giá trị nhận dạng nhóm (GID). |
authenticate() |
Xác thực một thao tác liên quan đến vân tay (được xác định bằng mã thao tác). |
setNotify() |
Đăng ký một hàm người dùng nhận thông báo từ HAL. Nếu máy trạng thái HAL ở trạng thái bận, thì hàm sẽ bị chặn cho đến khi HAL thoát khỏi trạng thái bận. |
postEnroll() |
Hoàn tất thao tác đăng ký và vô hiệu hoá thử thách do preEnroll() tạo. Bạn phải gọi phương thức này vào cuối phiên đăng ký nhiều ngón tay để cho biết rằng bạn không thể thêm ngón tay nào khác. |
Để biết thêm thông tin chi tiết về các lớp này, hãy tham khảo các nhận xét trong IBiometricsFingerprint.hal
.