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

Tổng quan

Xác thực khuôn mặt cho phép người dùng mở khóa thiết bị của họ chỉ bằng cách nhìn vào mặt trước của thiết bị. Android 10 bổ sung hỗ trợ cho ngăn xếp xác thực khuôn mặt mới có thể xử lý khung camera một cách an toàn, đảm bảo 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 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 triển khai mới trong Android 10. Triển khai mới giới thiệu các giao diện IBiometricsFace.hal , IBiometricsFaceClientCallback.haltypes.hal .

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

API BiometricPrompt bao gồm tất cả xác thực sinh trắc học bao gồm 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.

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 duy trì kết nối với FaceService . Nó được Keyguard sử dụng để truy cập xác thực khuôn mặt bằng giao diện người dùng tùy chỉnh. Các ứng dụng không có quyền truy cập vào FaceManager và thay vào đó 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 khuôn mặt. Nó 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 công cụ trợ giúp khác (ví dụ: liệt kê). Do lo ngại về tính ổn định và bảo mật nên 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 được truy cập thông qua giao diện Face 1.0 HIDL .

phải đối mặt

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

Thực hiện

Mặt 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 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à đưa máy trạng thái về trạng thái không hoạt động sau khi chúng được gửi. Hầu hết các thông báo đều có chuỗi hướng tới người dùng tương ứng để thông báo lỗi cho người dùng, nhưng không phải lỗi nào cũng có chuỗi hướng tới 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ả cá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 trở về trạng thái không hoạt động sau khi gửi thông báo lỗi.

Thông báo chuyển đổi

Thông báo thu nhận đượ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 quan từ tệp FaceAuthenticationManager.java . Có thể thêm thông báo dành riêng cho nhà cung cấp miễn là cung cấp chuỗi trợ giúp tương ứng. Bản thân các thông báo chuyển đổi không phải là trạng thái cuối cùng; HAL dự kiến ​​​​sẽ gửi càng nhiều thông tin này nếu cần thiết để hoàn thành việc đă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 mà không thể thực hiện được tiến trình nào thì HAL sẽ theo sau các thông báo thu thập bằng một thông báo lỗi, ví dụ: trong đó hình ảnh quá tối và quá tối để thực hiện tiến trình. Trong trường hợp này, việc gửi UNABLE_TO_PROCESS sau nhiều lần thử là hợp lý nhưng không thể thực hiện thêm tiến bộ nào.

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 mẽ của Android 10, chúng 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à khả năng so sánh xác thực tối ưu. Tài liệu Định nghĩa Tương thích Android (CDD) 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 yêu cầu. 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, cần có phần cứng camera an toàn để ngăn chặn các cuộc tấn công tiêm nhiễm vào xác thực khuôn mặt. Ví dụ: các trang bộ nhớ liên quan đến dữ liệu hình ảnh có thể được cấp đặc quyền và được đánh dấu là chỉ đọc để chỉ phần cứng máy ảnh mới có thể cập nhật chúng. Lý tưởng 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 thay đổi đáng kể nên cần phát triển trình điều khiển dành riêng cho phần cứng để kích hoạt xác thực khuôn mặt, tùy thuộc vào kiến ​​trúc thiết bị cụ thể. Do đó, không có triển khai tham chiếu nào cho faced .

phương pháp

Các phương thức sau đây đều không đồng bộ và phải quay lại khung ngay lập tức. Không làm như vậy sẽ dẫn đến hệ thống chậm và có khả năng đặt lại Watchdog. Bạn nên có hàng đợi tin nhắn có nhiều chuỗi để tránh chặn người gọi. Tất cả các yêu cầu GET phải lưu thông tin vào bộ đệm nếu có thể để người gọi bị chặn trong khoảng thời gian tối thiểu.

Phương pháp Sự miêu tả
setCallback() Được FaceService gọi để đưa tất cả tin nhắn về chính nó.
setActiveUser() Đặt người dùng đang hoạt động, tất cả các hoạt động HAL tiếp theo sẽ được áp dụng. 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() Kết thúc giao dịch an toàn bằng cách vô hiệu hóa thử thách do generateChallenge() tạo ra.
enroll() Đăng ký khuôn mặt của người dùng.
cancel() Hủy thao tác hiện tại (ví dụ: đăng ký, xác thực, xóa hoặc liệt kê) và quay trở lại faced 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() Xóa 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() Phương pháp này chỉ nên được sử dụng khi HAL ở trạng thái xác thực hoặc trạng thái chờ. Sử dụng phương pháp 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 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 bắt buộc phải chuyển sang trạng thái khóa ( LOCKOUT hoặc LOCKOUT_PERMANENT ). Khi đó, nó phải gửi thời gian còn lại đến khung để nó có thể hiển thị cho người dùng. Giống như setFeature() , phương pháp 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 bên trong một cách an toàn. Chỉ đặt lại khóa cho người dùng hiện tại.

Ba phương pháp 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 đình trệ khung.

Phương pháp Sự miêu tả
generateChallenge() Tạo mã thông báo ngẫu nhiên duy nhất và được bảo mật bằng mật mã được sử dụng để cho biết sự bắt đầu của 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/mẫu/mật khẩu của người dùng đối với thử thách trên
getFeature() Truy xuất trạng thái kích hoạt hiện tại của tính năng, như được quy định theo mặc định hoặc lệnh gọi setFeature() ở trên. Nếu Face ID không hợp lệ thì việc triển khai phải trả về ILLEGAL_ARGUMENT
getAuthenticatorId() Trả về một mã định danh được liên kết với bộ mặt hiện tại. Mã định danh này phải thay đổi bất cứ khi nào một khuôn mặt được thêm vào

Biểu đồ trạng thái

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

Biểu đồ trạng thái
Hình 2. Luồng trạng thái xác thực khuôn mặt