Tổng quan
Tính năng xác thực 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 tính 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 của 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 có thể bật tính năng 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 của Android là một hoạt động triển khai mới trong Android 10. Hoạt động triển khai mới này giới thiệu các giao diện IBiometricsFace.hal,
IBiometricsFaceClientCallback.hal,
và types.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, bao gồm cả khuôn mặt, ngón tay và mống mắt. Face HAL tương tác với các thành phần sau.
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 sử dụng giao diện này để truy cập vào tính năng xác thực khuôn mặt bằng một 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à hoạt động 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. Hoạt động 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ình trợ giúp khác (ví dụ: liệt kê). Do các vấn đề 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. Tất cả mã nhà cung cấp đều được truy cập thông qua giao diện Face 1.0 HIDL.
faced
Đây là một tệp thực thi Linux triển khai giao diện Face 1.0 HIDL mà FaceService sử dụng. Tệp này tự đăng ký làm 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ả cá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 lệnh gọi lại và trả về máy trạng thái ở 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 dành cho người dùng để 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 dành cho người dùng 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 đại diện cho một trạng thái cuối cùng, nghĩa là khung giả định rằng HAL sẽ quay lại trạng thái không hoạt động sau khi gửi thông báo lỗi.
Thông báo thu thập
Thông báo thu thập được gửi trong quá trình đăng ký hoặc xác thực và nhằm 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 các 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 thông báo thu thậ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 này khi cần thiết để hoàn tất quá trình đăng ký hoặc xác thực hiện tại. Nếu thông báo thu thập dẫn đến trạng thái cuối cùng mà không thể tiến hành, thì HAL sẽ theo dõi các thông báo thu thập bằng 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. 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 thể tiến hành thêm.
Phần cứng
Để các thiết bị tuân thủ các yêu cầu sinh trắc học mạnh đối với Android 10, chúng phải có phần cứng an toàn để đả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 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 an toàn. Ngoài ra, bạn cần có phần cứng camera an toàn để ngăn chặn các cuộc tấn công chèn vào tính năng 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ấp đặ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 phép 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 khác nhau đáng kể, 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 kiến trúc thiết bị cụ thể. Do đó, không có hoạt động triển khai tham chiếu cho faced.
Phương thức
Tất cả các phương thức sau đều 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ể đặt lại Watchdog. Bạn nên có một hàng đợi thông báo với nhiều luồng để tránh chặn trình gọi. Tất cả các yêu cầu GET đều phải lưu vào bộ nhớ đệm thông tin nếu có thể để trình gọi bị chặn trong khoảng thời gian tối thiểu.
| Phương thức | Mô tả |
|---|---|
setCallback() |
FaceService gọi phương thức này để chuyển tất cả thông báo trở lại chính nó. |
setActiveUser() |
Đặt người dùng đang hoạt động, người dùng này sẽ được áp dụng tất cả các thao tác HAL tiếp theo. 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 không hoạt động. |
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ờ. Nếu sử dụng phương thức này khi HAL không ở một trong các trạng thái này
hệ thống 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 quá nhiều khuôn mặt bị từ chối, faced 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 cho khung để khung có thể
hiển thị cho người dùng. Tương tự như setFeature(), phương thức này yêu cầu mã 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. |
Ba phương thức còn lại đều đồng bộ và phải chặn trong khoảng thời gian tối thiểu để tránh làm khung bị treo.
| Phương thức | Mô tả |
|---|---|
generateChallenge() |
Tạo một mã thông báo ngẫu nhiên duy nhất và bảo mật bằng mật mã được dùng để cho biết thời điểm bắt đầu 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, phương thức 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 ở 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
giá trị mặc định hoặc lệnh gọi đến setFeature() ở trên. Nếu mã khuôn mặt không hợp lệ, hoạt động triển khai phải trả về ILLEGAL_ARGUMENT |
getAuthenticatorId() |
Trả về một mã nhận dạng được liên kết với bộ khuôn mặt hiện tại. Mã nhận dạng này phải thay đổi bất cứ khi nào bạn thêm một khuôn mặt |
Sơ đồ trạng thái
Khung dự kiến faced sẽ tuân theo sơ đồ trạng thái bên dưới.
Hình 2. Quy trình trạng thái xác thực khuôn mặt.