Google cam kết thúc đẩy công bằng chủng tộc cho Cộng đồng người da đen. Xem cách thực hiện.

HIDL vân tay

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 dấu vân tay và sử dụng các dấu vân tay đó để mở khóa thiết bị và thực hiện các tác vụ 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 HIDL vân tay, bạn phải triển khai IBiometricsFingerprint.hal trong thư viện dành riêng cho nhà cung cấp.

Đối sánh vân tay

Cảm biến vân tay của một thiết bị thường không hoạt động. Tuy nhiên, để phản hồi cuộc gọi authenticate hoặc enroll , cảm biến vân tay sẽ lắng nghe một lần chạm (màn hình cũng có thể đánh thức khi người dùng chạm vào cảm biến vân tay). Quy trình đối sánh vân tay cấp cao bao gồm các bước sau:

  1. Người dùng đặt ngón tay lên cảm biến vân tay.
  2. Thư viện dành riêng cho nhà cung cấp sẽ xác định xem có sự trùng khớp về vân tay trong tập hợp các mẫu vân tay đã đăng ký hiện tại hay không.
  3. Kết quả đối sánh được chuyển đến FingerprintService .

Luồng này giả định rằng một 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 chi tiết, hãy xem Xác thực .

Ngành kiến ​​​​trúc

Dấu vân tay HAL 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 một quy trình ứng dụng. Mỗi ứng dụng có một phiên bản của IBiometricsFingerprint.hal
  • FingerprintService hoạt động trong quy trình hệ thống, xử lý giao tiếp bằng dấu vân tay HAL.
  • Fingerprint HAL là một triển khai C / C ++ của giao diện IBiometricsFingerprint HIDL. Điều 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 mật mã được hỗ trợ bởi phần cứng để lưu trữ khóa an toàn trong môi trường an toàn, chẳng hạn như Môi trường thực thi tin cậy (TEE).
Luồng dữ liệu để xác thực bằng vân tay
Hình 1. Luồng dữ liệu cấp cao để xác thực dấu vân tay

Việc triển khai HAL dành riêng cho nhà cung cấp phải sử dụng giao thức truyền thông theo yêu cầu của TEE. Hình ảnh thô và các tính năng dấu vân tay đã xử lý không được chuyển vào 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 an toàn như TEE. Việc root không được làm ảnh hưởng đến dữ liệu sinh trắc học.

FingerprintServicefingerprintd thực hiện các cuộc gọi thông qua Fingerprint HAL đến thư viện dành riêng cho nhà cung cấp để đăng ký dấu vân tay và thực hiện các thao tác khác.

Tương tác với dấu vân tay
Hình 2. Tương tác của daemon vân tay với thư viện dành riêng cho nhà cung cấp vân tay

Hướng dẫn thực hiện

Các nguyên tắc HAL về vân tay sau đây được thiết kế để đảm bảo rằng dữ liệu vân tay không bị rò rỉbị xóa khi người dùng bị xóa khỏi thiết bị:

  • Dữ liệu vân tay thô hoặc các dẫn xuất (ví dụ: mẫu) không bao giờ được truy cập 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, quyền truy cập phần cứng phải được giới hạn trong TEE và được bảo vệ bởi chính sách SELinux. Kênh Giao diện ngoại vi nối tiếp (SPI) phải chỉ có thể truy cập được đối với TEE và phải có 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, ghi danh và nhận dạng dấu vân tay phải diễn ra bên trong TEE.
  • Chỉ có thể lưu trữ dạng mã hóa của dữ liệu vân tay trên hệ thống tệp, ngay cả khi bản thân hệ thống tệp đã được mã hóa.
  • Mẫu vân tay phải được ký bằng khóa riêng tư dành riêng cho thiết bị. Đối với Tiêu chuẩn mã hóa nâng cao (AES), tối thiểu mẫu phải được ký bằng đường dẫn hệ thống tệp, nhóm và ID ngón tay tuyệt đối sao cho tệp mẫu không thể hoạt động trên thiết bị khác hoặc đối với bất kỳ ai khác ngoài người dùng đã đăng ký chúng trên cùng một thiết bị. Ví dụ: sao chép dữ liệu vân tay 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 sẽ không hoạt động.
  • Việc triển khai phải sử dụng đường dẫn hệ thống tệp được cung cấp bởi hàm setActiveGroup() hoặc cung cấp cách xóa tất cả dữ liệu mẫu người dùng khi người dùng bị xóa. Chúng tôi đặc biệt khuyên rằng các tệp mẫu vân tay được lưu trữ dưới dạng mã hóa và được lưu trữ trong đường dẫn được cung cấp. Nếu điều này là không khả thi do yêu cầu lưu trữ TEE, người triển khai phải thêm các móc để đảm bảo loại bỏ dữ liệu khi người dùng bị loại bỏ.

Phương pháp vân tay

Giao diện HIDL Vân tay chứa các phương thức chính sau đây trong IBiometricsFingerprint.hal .

Phương pháp Sự mô tả
enroll() Chuyển máy trạng thái HAL để bắt đầu thu thập và lưu trữ mẫu vân tay. Khi đăng ký hoàn tất, hoặc sau một khoảng thời gian chờ, máy trạng thái HAL trở lại trạng thái nhàn rỗi.
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ý dấu vân tay. Cung cấp mã thông báo cho chức năng enroll để đảm bảo đã có xác thực trước, chẳng hạn như sử dụng mật khẩu. Để ngăn chặn việc giả mạo, mã thông báo được bọc sau khi thông tin xác thực thiết bị được xác nhận. Mã thông báo phải được kiểm tra trong quá trình đăng ký để xác minh rằng nó vẫn hợp lệ.
getAuthenticatorId() Trả về mã thông báo được liên kết với tập vân tay hiện tại.
cancel() Hủy các hoạt động đăng ký hoặc xác thực đang chờ xử lý. Máy trạng thái HAL được đưa trở lại trạng thái nhàn rỗi.
enumerate() Lệnh gọi đồng bộ để liệt kê tất cả các mẫu vân tay đã biết.
remove() Xóa mẫu vân tay.
setActiveGroup() Hạn chế hoạt động HAL đối với một tập hợp các dấu vân tay thuộc một nhóm cụ thể, được xác định bằng số nhận dạng nhóm (GID).
authenticate() Xác thực một thao tác liên quan đến dấu vân tay (được xác định bằng một ID thao tác).
setNotify() Đăng ký một chức năng 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, chức năng sẽ bị chặn cho đến khi HAL rời khỏi trạng thái bận.
postEnroll() Kết thúc hoạt động đăng ký và làm mất hiệu lực của thử thách đã tạo preEnroll() . Điều này phải được gọi vào cuối buổi ghi danh nhiều ngón để cho biết rằng không được thêm ngón tay nào nữa.

Để biết thêm chi tiết về những điều này, hãy tham khảo các nhận xét trong IBiometricsFingerprint.hal .