Xác thực khuôn mặt HIDL

Tổng quan

Tính năng xác thực bằng khuôn mặt cho phép người dùng mở khoá thiết bị chỉ bằng cách nhìn vào mặt trước của thiết bị. Android 10 bổ sung khả năng hỗ trợ cho một ngăn xếp xác thực khuôn mặt mới có thể xử lý các khung hình từ camera một cách an toàn, duy trì tính bảo mật và quyền riêng tư trong quá trình xác thực khuôn mặt trên phần cứng được hỗ trợ. Android 10 cũng cung cấp một cách dễ dàng để các hoạt động triển khai tuân thủ bảo mật cho phép tích hợp ứng dụng cho các giao dịch, chẳng hạn như ngân hàng trực tuyến hoặc các dịch vụ khác.

Ngăn xếp xác thực khuôn mặt trên Android là một phương thức triển khai mới trong Android 10. Quy trình triển khai mới này giới thiệu các giao diện IBiometricsFace.hal, IBiometricsFaceClientCallback.haltypes.hal.

Kiến trúc

API BiometricPrompt bao gồm tất cả các phương thức xác thực bằng sinh trắc học, trong đó có khuôn mặt, vân tay và mống mắt. Face HAL tương tác với các thành phần sau.

Ngăn xếp sinh trắc học

Hình 1. Ngăn xếp sinh trắc học.

FaceManager

FaceManager là một giao diện riêng tư duy trì kết nối với FaceService. Keyguard dùng khoá này để truy cập vào tính năng xác thực khuôn mặt bằng giao diện người dùng tuỳ chỉnh. Các ứng dụng không có quyền truy cập vào FaceManager và phải sử dụng BiometricPrompt.

FaceService

Đây là quá trình triển khai khung quản lý quyền truy cập vào phần cứng xác thực khuôn mặt. Thư viện này chứa các máy trạng thái xác thực và đăng ký cơ bản, cũng như nhiều trợ giúp khác (ví dụ: liệt kê). Do lo ngại về tính ổn định và bảo mật, không có mã nhà cung cấp nào được phép chạy trong quy trình này. Bạn có thể truy cập vào tất cả mã nhà cung cấp thông qua giao diện HIDL Face 1.0.

đối mặt

Đây là một tệp thực thi Linux triển khai giao diện HIDL 1.0 của Face do FaceService sử dụng. Nó tự đăng ký dưới dạng IBiometricsFace@1.0 để FaceService có thể tìm thấy.

Triển khai

Face HIDL

Để triển khai Face HIDL, bạn phải triển khai tất cả phương thức của IBiometricsFace.hal trong một thư viện dành riêng cho nhà cung cấp.

Thông báo lỗi

Thông báo lỗi được gửi bằng một lệnh gọi lại và trả về trạng thái máy ở trạng thái không hoạt động sau khi được gửi. Hầu hết các thông báo đều có một chuỗi tương ứng mà người dùng thấy được để thông báo cho người dùng về lỗi, nhưng không phải lỗi nào cũng có chuỗi mà người dùng thấy được này. Để biết thêm thông tin về thông báo lỗi, hãy xem types.hal. Tất cả thông báo lỗi đều biểu thị một trạng thái kết thúc, tức là khung giả định rằng HAL sẽ trở về trạng thái rảnh sau khi gửi thông báo lỗi.

Thông báo thu nạp

Thông báo thu nạp được gửi trong quá trình đăng ký hoặc xác thực và nhằm mục đích hướng dẫn người dùng đăng ký hoặc xác thực thành công. Mỗi số thứ tự đều có một thông báo được liên kết từ tệp FaceAuthenticationManager.java. Bạn có thể thêm thông báo dành riêng cho nhà cung cấp miễn là bạn cung cấp các chuỗi trợ giúp tương ứng. Bản thân các thông báo thu nạp không phải là trạng thái cuối cùng; HAL dự kiến sẽ gửi nhiều thông báo trong số này khi cần thiết để hoàn tất quy trình đăng ký hoặc xác thực hiện tại. Nếu thông báo thu nhận dẫn đến trạng thái kết thúc mà không thể tiến hành thêm, thì HAL sẽ theo dõi thông báo thu nhận bằng một thông báo lỗi, ví dụ: khi hình ảnh quá tối và vẫn quá tối để có thể tiến hành thêm. Trong trường hợp này, bạn nên gửi UNABLE_TO_PROCESS sau khi đã thử nhiều lần nhưng không có tiến triển nào khác.

Phần cứng

Để tuân thủ các yêu cầu về dữ liệu sinh trắc học mạnh đối với Android 10, các thiết bị phải có phần cứng bảo mật để đảm bảo tính toàn vẹn của dữ liệu khuôn mặt và so sánh xác thực cuối cùng. Tài liệu định nghĩa về khả năng tương thích (CDD) cho Android nêu rõ mức độ bảo mật cần thiết và tỷ lệ chấp nhận hành vi giả mạo (SAR) được chấp nhận. Bạn cần có môi trường thực thi đáng tin cậy (TEE) để xử lý và nhận dạng một cách an toàn. Ngoài ra, bạn cần có phần cứng camera bảo mật để ngăn chặn các cuộc tấn công giả mạo trong quá trình xác thực khuôn mặt. Ví dụ: các trang bộ nhớ được liên kết cho dữ liệu hình ảnh có thể được đặc quyền và đánh dấu là chỉ đọc để chỉ phần cứng camera mới có thể cập nhật các trang đó. Tốt nhất là không có quy trình nào có quyền truy cập, ngoại trừ TEE và phần cứng.

Vì phần cứng xác thực khuôn mặt có nhiều loại nên bạn cần phát triển trình điều khiển dành riêng cho phần cứng để bật tính năng xác thực khuôn mặt, tuỳ thuộc vào cấu trúc thiết bị cụ thể. Do đó, không có quá trình triển khai tham chiếu cho faced.

Phương thức

Tất cả các phương thức sau đây đều là không đồng bộ và phải trả về ngay cho khung. Nếu không, hệ thống sẽ hoạt động chậm và có thể xảy ra tình trạng Watchdog reset. Bạn nên có một hàng đợi tin nhắn với nhiều luồng để tránh chặn phương thức gọi. Tất cả các yêu cầu GET đều phải lưu thông tin vào bộ nhớ đệm nếu có thể để người gọi bị chặn trong thời gian tối thiểu.

Phương thức Mô tả
setCallback() Được FaceService gọi để chuyển tất cả các thông báo trở lại chính nó.
setActiveUser() Đặt người dùng đang hoạt động, tất cả các thao tác HAL tiếp theo sẽ được áp dụng. Quy trình xác thực luôn dành cho người dùng này cho đến khi phương thức này được gọi lại.
revokeChallenge() Hoàn tất giao dịch an toàn bằng cách vô hiệu hoá thử thách do generateChallenge() tạo.
enroll() Đăng ký khuôn mặt của người dùng.
cancel() Huỷ thao tác hiện tại (ví dụ: đăng ký, xác thực, xoá hoặc liệt kê) và trả faced về trạng thái rảnh.
enumerate() Liệt kê tất cả các mẫu khuôn mặt được liên kết với người dùng đang hoạt động.
remove() Xoá một mẫu khuôn mặt hoặc tất cả các mẫu khuôn mặt được liên kết với người dùng đang hoạt động.
authenticate() Xác thực người dùng đang hoạt động.
userActivity() Bạn chỉ nên sử dụng phương thức này khi HAL ở trạng thái xác thực hoặc chờ. Việc sử dụng phương thức này khi HAL không ở một trong các trạng thái này sẽ trả về OPERATION_NOT_SUPPORTED. Việc gọi phương thức này trong khi HAL đang xác thực có thể kéo dài khoảng thời gian hệ thống tìm kiếm khuôn mặt.
resetLockout() Khi có quá nhiều khuôn mặt bị từ chối, faced sẽ phải chuyển sang trạng thái khoá (LOCKOUT hoặc LOCKOUT_PERMANENT). Khi đó, bạn phải gửi thời gian còn lại đến khung để khung có thể hiển thị thời gian đó cho người dùng. Tương tự như setFeature(), phương thức này yêu cầu mã thông báo xác thực phần cứng (HAT) đang hoạt động để đặt lại trạng thái nội bộ một cách an toàn. Đặt lại trạng thái khoá chỉ cho người dùng hiện tại.

3 phương thức còn lại đều đồng bộ và sẽ chặn trong khoảng thời gian tối thiểu để tránh làm chậm khung.

Phương thức Mô tả
generateChallenge() Tạo một mã thông báo ngẫu nhiên, riêng biệt và bảo mật bằng mật mã dùng để cho biết thời điểm bắt đầu một giao dịch an toàn.
setFeature() Bật hoặc tắt một tính năng cho người dùng hiện tại. Vì lý do bảo mật, điều này yêu cầu HAT kiểm tra mã pin/hình mở khoá/mật khẩu của người dùng dựa trên thử thách nêu trên
getFeature() Truy xuất trạng thái bật hiện tại của tính năng, theo quy định của chế độ mặc định hoặc lệnh gọi đến setFeature() ở trên. Nếu Face ID không hợp lệ, thì quá trình triển khai phải trả về ILLEGAL_ARGUMENT
getAuthenticatorId() Trả về một giá trị nhận dạng được liên kết với nhóm khuôn mặt hiện tại. Giá trị nhận dạng này phải thay đổi bất cứ khi nào có khuôn mặt được thêm vào

Sơ đồ trạng thái

Khung này yêu cầu faced tuân theo sơ đồ trạng thái bên dưới.

Sơ đồ trạng thái

Hình 2. Quy trình trạng thái xác thực khuôn mặt.