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 hỗ trợ thêm 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 máy ảnh một cách an toàn, bảo vệ 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 để triển khai tính năng tuân thủ bảo mật nhằm 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 Android là một cách triển khai mới trong Android
10. Phương thức triển khai mới giới thiệu các giao diện IBiometricsFace.hal
, IBiometricsFaceClientCallback.hal
và types.hal
.
Kiến trúc
BiometricPrompt API bao gồm tất cả quy trình xác thực bằng sinh trắc học, bao gồm khuôn mặt, ngón tay và mống mắt. Lớp trừu tượng phần cứng (HAL) cho khuôn mặt tương tác với các thành phần sau đây.
FaceManager
FaceManager
là một giao diện riêng tư duy trì kết nối với FaceService
. Lớp này được Trình bảo vệ khoá sử dụng để 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à cách triển khai khung quản lý quyền truy cập vào phần cứng xác thực bằng khuôn mặt. Thư viện này chứa các máy trạng thái đăng ký và xác thực 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ề độ ổ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ã của nhà cung cấp đều được truy cập thông qua giao diện HIDL Face 1.0.
phải đối mặt
Đây là tệp thực thi Linux triển khai giao diện HIDL Face 1.0 do FaceService
sử dụng. Lớp này 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 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 về trạng thái rảnh sau khi gửi. Hầu hết 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 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 thể hiện trạng thái đầu cuối, nghĩa là khung giả định rằng HAL sẽ quay lại trạng thái rảnh sau khi gửi thông báo lỗi.
Thông báo thu nạp
Các thông báo thu nạp người dùng đượ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 thứ tự có một thông báo 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 chuỗi trợ giúp tương ứng. Tin nhắn thu nạp không phải là trạng thái đầu cuối; HAL dự kiến sẽ gửi nhiều tin nhắn như vậy nếu cần để 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 đầu cuối không thể tiến hành, thì HAL sẽ theo sau thông báo thu thập bằng thông báo lỗi, ví dụ: 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 xa hơn.
Phần cứng
Để tuân thủ các yêu cầu về dữ liệu sinh trắc học mạnh cho Android 10, 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à quy trình 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 bắt buộc và tỷ lệ chấp nhận hành vi giả mạo (SAR) được chấp nhận. Bạn phải có môi trường thực thi đáng tin cậy (TEE) để nhận dạng và xử lý an toàn. Ngoài ra, bạn cần có phần cứng máy ảnh bảo mật để ngăn chặn các cuộc tấn công chèn vào quy trình xác thực khuôn mặt. Ví dụ: các trang bộ nhớ 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 máy ảnh 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 rất đa dạng, 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 đó, sẽ không có hoạt động triển khai tham chiếu cho faced
.
Phương thức
Các phương thức sau đây đều không đồng bộ và phải trả về khung ngay lập tức. Nếu không làm như vậy, hệ thống sẽ hoạt động chậm và có khả năng sẽ bị đặt lại Bộ đếm giờ phòng. Bạn nên có một hàng đợi thông báo 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ể để phương thức 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ả thông báo trở lại chính nó. |
setActiveUser() |
Đặt người dùng đang hoạt động mà tất cả các thao tác HAL tiếp theo sẽ được áp dụng. Quá 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ả về 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ả mẫu khuôn mặt 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 trạng thái 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 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 chuyển sang trạng thái này, 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. Cũng như setFeature() , phương thức này yêu cầu một 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. Chỉ đặt lại chế độ khoá cho người dùng hiện tại. |
Ba phương thức còn lại đều đồng bộ và nên chặn trong khoảng thời gian tối thiểu để tránh làm gián đoạn khung.
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ã dùng để cho biết thời điểm bắt đầu một giao dịch bảo mật. |
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, HAT không được kiểm tra mã PIN/hình mở khoá/mật khẩu của người dùng theo 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 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ề giá trị nhận dạng 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 bạn thêm một khuôn mặt |
Sơ đồ trạng thái
Khung này dự kiến faced
sẽ tuân theo sơ đồ trạng thái bên dưới.