Ringkasan
Autentikasi wajah memungkinkan pengguna membuka kunci perangkat hanya dengan melihat bagian depan perangkat. Android 10 menambahkan dukungan untuk stack autentikasi wajah baru yang dapat memproses frame kamera dengan aman, menjaga keamanan dan privasi selama autentikasi wajah pada hardware yang didukung. Android 10 juga menyediakan cara mudah bagi implementasi yang mematuhi keamanan untuk mengaktifkan integrasi aplikasi untuk transaksi, seperti perbankan online atau layanan lainnya.
Stack autentikasi wajah Android adalah implementasi baru di Android 10. Implementasi baru ini memperkenalkan antarmuka IBiometricsFace.hal,
IBiometricsFaceClientCallback.hal,
dan types.hal.
Arsitektur
BiometricPrompt API mencakup semua autentikasi biometrik, termasuk wajah, jari, dan iris. Face HAL berinteraksi dengan komponen berikut.
Gambar 1. Stack biometrik.
FaceManager
FaceManager adalah antarmuka pribadi yang mempertahankan koneksi dengan FaceService. Antarmuka ini digunakan oleh Keyguard untuk mengakses autentikasi wajah dengan UI kustom. Aplikasi tidak memiliki akses ke FaceManager dan harus menggunakan BiometricPrompt.
FaceService
Ini adalah implementasi framework yang mengelola akses ke hardware autentikasi wajah. Implementasi ini berisi mesin status pendaftaran dan autentikasi dasar serta berbagai helper lainnya (misalnya, enumerasi). Karena masalah stabilitas dan keamanan, tidak ada kode vendor yang diizinkan untuk berjalan dalam proses ini. Semua kode vendor diakses melalui antarmuka HIDL Face 1.0.
faced
Ini adalah executable Linux yang mengimplementasikan antarmuka HIDL Face 1.0 yang digunakan oleh FaceService. Executable ini mendaftarkan dirinya sebagai IBiometricsFace@1.0 sehingga FaceService dapat menemukannya.
Penerapan
Face HIDL
Untuk mengimplementasikan Face HIDL, Anda harus mengimplementasikan semua metode dari IBiometricsFace.hal
di library khusus vendor.
Pesan error
Pesan error dikirim oleh callback dan menampilkan mesin status ke status idle setelah dikirim. Sebagian besar pesan memiliki string yang sesuai dan ditampilkan kepada pengguna untuk memberi tahu pengguna tentang error tersebut, tetapi tidak semua error memiliki string yang ditampilkan kepada pengguna ini. Untuk mengetahui informasi selengkapnya tentang pesan error, lihat
types.hal.
Semua pesan error mewakili status terminal, yang berarti framework mengasumsikan bahwa HAL kembali ke status idle setelah mengirim pesan error.
Pesan akuisisi
Pesan akuisisi dikirim selama pendaftaran atau autentikasi dan dimaksudkan untuk memandu pengguna menuju pendaftaran atau autentikasi yang berhasil.
Setiap ordinal memiliki
pesan terkait dari FaceAuthenticationManager.java
file. Pesan khusus vendor dapat ditambahkan selama string bantuan yang sesuai disediakan. Pesan akuisisi bukan status terminal itu sendiri; HAL diharapkan mengirim pesan ini sebanyak yang diperlukan untuk menyelesaikan pendaftaran atau autentikasi saat ini. Jika pesan akuisisi menghasilkan status terminal yang tidak dapat membuat progres, HAL harus mengikuti pesan akuisisi dengan pesan error, misalnya, jika gambar terlalu gelap dan tetap terlalu gelap untuk membuat progres. Dalam hal ini, wajar untuk mengirim UNABLE_TO_PROCESS setelah beberapa kali percobaan dilakukan, tetapi tidak ada progres lebih lanjut yang dapat dilakukan.
Hardware
Agar perangkat mematuhi persyaratan biometrik yang kuat untuk Android 10, perangkat harus memiliki hardware yang aman untuk memastikan integritas data wajah dan perbandingan autentikasi akhir. Compatibility Definition Document (CDD) Android menguraikan tingkat keamanan yang diperlukan dan tingkat penerimaan spoof (SAR) yang dapat diterima. Trusted execution environment (TEE) diperlukan untuk pemrosesan dan pengenalan yang aman. Selain itu, hardware kamera yang aman diperlukan untuk mencegah serangan injeksi pada autentikasi wajah. Misalnya, halaman memori terkait untuk data gambar dapat memiliki hak istimewa dan ditandai hanya baca sehingga hanya hardware kamera yang dapat memperbaruinya. Idealnya, tidak ada proses yang memiliki akses kecuali TEE dan hardware.
Karena hardware autentikasi wajah sangat bervariasi, Anda harus mengembangkan driver khusus hardware untuk mengaktifkan autentikasi wajah, bergantung pada arsitektur perangkat tertentu. Oleh karena itu, tidak ada implementasi referensi untuk faced.
Metode
Metode berikut bersifat asinkron dan harus segera ditampilkan ke framework. Jika tidak melakukannya, sistem akan menjadi lambat dan berpotensi mereset Watchdog. Sebaiknya gunakan antrean pesan dengan beberapa thread untuk menghindari pemblokiran pemanggil. Semua permintaan GET harus menyimpan informasi dalam cache jika memungkinkan sehingga pemanggil diblokir dalam jumlah waktu minimal.
| Metode | Deskripsi |
|---|---|
setCallback() |
Dipanggil oleh FaceService untuk mengembalikan semua pesan ke dirinya sendiri. |
setActiveUser() |
Menetapkan pengguna aktif, yang akan diterapkan ke semua operasi HAL berikutnya. Autentikasi selalu untuk pengguna ini hingga metode ini dipanggil lagi. |
revokeChallenge() |
Menyelesaikan transaksi yang aman dengan membatalkan tantangan yang dihasilkan
oleh generateChallenge(). |
enroll() |
Mendaftarkan wajah pengguna. |
cancel() |
Membatalkan operasi saat ini (misalnya, mendaftar, mengautentikasi,
menghapus, atau menghitung) dan menampilkan faced ke status idle. |
enumerate() |
Menghitung semua template wajah yang terkait dengan pengguna aktif. |
remove() |
Menghapus template wajah atau semua template wajah yang terkait dengan pengguna aktif. |
authenticate() |
Mengautentikasi pengguna aktif. |
userActivity() |
Metode ini hanya boleh digunakan saat HAL dalam status autentikasi atau
standby. Menggunakan metode ini saat HAL tidak dalam salah satu
status ini akan menampilkan OPERATION_NOT_SUPPORTED. Memanggil
metode ini saat HAL sudah mengautentikasi dapat memperpanjang
jumlah waktu sistem mencari wajah. |
resetLockout() |
Jika terlalu banyak wajah ditolak, faced harus memasuki status penguncian (LOCKOUT atau LOCKOUT_PERMANENT). Jika demikian, HAL harus mengirimkan waktu yang tersisa ke framework sehingga dapat menampilkannya untuk pengguna. Seperti setFeature(), metode ini memerlukan token autentikasi hardware (HAT) aktif untuk mereset status internal dengan aman. Mereset penguncian
hanya untuk pengguna saat ini. |
Tiga metode yang tersisa bersifat sinkron dan harus diblokir dalam jumlah waktu minimal untuk menghindari framework yang terhenti.
| Metode | Deskripsi |
|---|---|
generateChallenge() |
Menghasilkan token acak yang unik dan aman secara kriptografi yang digunakan untuk menunjukkan awal transaksi yang aman. |
setFeature() |
Mengaktifkan atau menonaktifkan fitur untuk pengguna saat ini. Karena alasan keamanan hal ini memerlukan HAT dari pemeriksaan pin/pola/sandi pengguna terhadap tantangan di atas |
getFeature() |
Mengambil status pengaktifan fitur saat ini, seperti yang ditentukan oleh
default atau panggilan ke setFeature() di atas. Jika ID wajah tidak valid, the
implementasi harus menampilkan ILLEGAL_ARGUMENT |
getAuthenticatorId() |
Menampilkan ID yang terkait dengan kumpulan wajah saat ini. ID ini harus berubah setiap kali wajah ditambahkan |
Diagram status
Framework mengharapkan faced untuk mengikuti diagram status di bawah.
Gambar 2. Alur status autentikasi wajah.