Di perangkat dengan sensor sidik jari, pengguna dapat mendaftarkan satu atau beberapa sidik jari dan menggunakan sidik jari tersebut untuk membuka kunci perangkat dan melakukan tugas lain. Android menggunakan Fingerprint Hardware Interface Definition Language (HIDL) untuk terhubung ke library khusus vendor dan hardware sidik jari (misalnya, sensor sidik jari).
Untuk menerapkan Fingerprint HIDL, Anda harus menerapkan IBiometricsFingerprint.hal
di library khusus vendor.
Pencocokan sidik jari
Sensor sidik jari perangkat biasanya tidak ada aktivitas. Namun, sebagai respons terhadap
panggilan ke authenticate
atau enroll
, sensor sidik jari akan memproses sentuhan (layar mungkin juga aktif saat pengguna
menyentuh sensor sidik jari). Alur pencocokan sidik jari tingkat tinggi
mencakup langkah-langkah berikut:
- Pengguna menempatkan jari pada sensor sidik jari.
- Library khusus vendor menentukan apakah ada kecocokan sidik jari dalam kumpulan template sidik jari terdaftar saat ini.
- Hasil yang cocok akan diteruskan ke
FingerprintService
.
Alur ini mengasumsikan bahwa sidik jari telah terdaftar di perangkat, yaitu, library khusus vendor telah mendaftarkan template untuk sidik jari. Untuk mengetahui detail selengkapnya, lihat Autentikasi.
Arsitektur
HAL Sidik Jari berinteraksi dengan komponen berikut.
BiometricManager
berinteraksi langsung dengan aplikasi dalam proses aplikasi. Setiap aplikasi memiliki instanceIBiometricsFingerprint.hal
FingerprintService
beroperasi dalam proses sistem, yang menangani komunikasi dengan HAL sidik jari.- Fingerprint HAL adalah implementasi C/C++ dari antarmuka HIDL IBiometricsFingerprint. File ini berisi library khusus vendor yang berkomunikasi dengan hardware khusus perangkat.
- Komponen Keystore API dan Keymaster menyediakan kriptografi yang didukung hardware untuk penyimpanan kunci yang aman di lingkungan yang aman, seperti Trusted Execution Environment (TEE).

Implementasi HAL khusus vendor harus menggunakan protokol komunikasi yang diperlukan oleh TEE. Gambar mentah dan fitur sidik jari yang diproses tidak boleh diteruskan dalam memori yang tidak tepercaya. Semua data biometrik tersebut harus disimpan di hardware aman seperti TEE. Rooting tidak boleh dapat membahayakan keamanan data biometrik.
FingerprintService
dan fingerprintd
melakukan panggilan melalui HAL Sidik Jari ke
library khusus vendor untuk mendaftarkan sidik jari dan melakukan operasi
lainnya.

Panduan penerapan
Panduan HAL Sidik Jari berikut dirancang untuk memastikan bahwa data sidik jari tidak bocor dan dihapus saat pengguna dihapus dari perangkat:
- Data sidik jari mentah atau turunan (misalnya, template) tidak boleh diakses dari luar driver sensor atau TEE. Jika hardware mendukung TEE, akses hardware harus dibatasi ke TEE dan dilindungi oleh kebijakan SELinux. Saluran Serial Peripheral Interface (SPI) hanya boleh diakses oleh TEE dan harus ada kebijakan SELinux eksplisit di semua file perangkat.
- Akuisisi, pendaftaran, dan pengenalan sidik jari harus dilakukan di dalam TEE.
- Hanya data sidik jari dalam bentuk terenkripsi yang dapat disimpan di sistem file, meski sistem file itu sendiri dienkripsi.
- Template sidik jari harus ditandatangani dengan kunci pribadi khusus perangkat. Untuk Advanced Encryption Standard (AES), template minimal harus ditandatangani dengan jalur sistem file, grup, dan ID sidik jari absolut sehingga file template tidak dapat beroperasi di perangkat lain atau untuk siapa pun selain pengguna yang mendaftarkannya di perangkat yang sama. Misalnya, tidak dapat menyalin data sidik jari dari pengguna yang berbeda di perangkat yang sama atau dari perangkat lain.
- Implementasi harus menggunakan jalur sistem file yang disediakan oleh
fungsi
setActiveGroup()
atau memberikan cara untuk menghapus semua data template pengguna saat pengguna dihapus. Sebaiknya file template sidik jari disimpan sebagai dienkripsi dan disimpan di jalur yang disediakan. Jika hal ini tidak dapat dilakukan karena persyaratan penyimpanan TEE, pelaksana harus menambahkan hook untuk memastikan penghapusan data saat pengguna dihapus.
Metode sidik jari
Antarmuka HIDL Sidik Jari berisi metode utama berikut di
IBiometricsFingerprint.hal
.
Metode | Deskripsi |
---|---|
enroll() |
Mengalihkan mesin status HAL untuk memulai pengumpulan dan penyimpanan template sidik jari. Setelah pendaftaran selesai, atau setelah waktu tunggu habis, mesin status HAL akan kembali ke status tidak ada aktivitas. |
preEnroll() |
Membuat token unik untuk menunjukkan awal
pendaftaran sidik jari. Memberikan token ke fungsi enroll untuk
memastikan ada autentikasi sebelumnya, misalnya, menggunakan sandi. Untuk mencegah
modifikasi tidak sah, token digabungkan setelah kredensial
perangkat dikonfirmasi. Token harus diperiksa selama pendaftaran untuk memverifikasi
bahwa token tersebut masih valid. |
getAuthenticatorId() |
Menampilkan token yang terkait dengan kumpulan sidik jari saat ini. |
cancel() |
Membatalkan operasi pendaftaran atau autentikasi yang tertunda. Mesin status HAL dikembalikan ke status tidak ada aktivitas. |
enumerate() |
Panggilan sinkron untuk menghitung semua template sidik jari yang diketahui. |
remove() |
Menghapus template sidik jari. |
setActiveGroup() |
Membatasi operasi HAL ke kumpulan sidik jari yang termasuk dalam grup tertentu, yang diidentifikasi dengan ID grup (GID). |
authenticate() |
Mengautentikasi operasi terkait sidik jari (diidentifikasi oleh ID operasi). |
setNotify() |
Mendaftarkan fungsi pengguna yang menerima notifikasi dari HAL. Jika mesin status HAL dalam status sibuk, fungsi akan diblokir hingga HAL keluar dari status sibuk. |
postEnroll() |
Menyelesaikan operasi pendaftaran dan membatalkan
tantangan yang dihasilkan preEnroll() . Metode ini harus dipanggil di akhir
sesi pendaftaran multijari untuk menunjukkan bahwa tidak ada lagi jari yang dapat ditambahkan. |
Untuk mengetahui detail selengkapnya, lihat komentar di IBiometricsFingerprint.hal
.