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 lainnya. 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 umumnya dalam kondisi tidak aktif. Namun, sebagai respons terhadap
panggilan ke authenticate
atau enroll
, sensor sidik jari akan memproses sentuhan (layar juga dapat aktif saat pengguna menyentuh sensor sidik jari). Alur pencocokan sidik jari tingkat tinggi mencakup langkah-langkah berikut:
- Pengguna menempelkan 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 diteruskan ke
FingerprintService
.
Alur ini mengasumsikan bahwa sidik jari telah didaftarkan 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 di proses sistem, yang menangani komunikasi dengan HAL sidik jari.- Fingerprint HAL adalah implementasi C/C++ dari antarmuka IBiometricsFingerprint HIDL. Ini berisi library khusus vendor yang berkomunikasi dengan hardware khusus perangkat.
- Komponen Keystore API dan KeyMint (sebelumnya 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 yang aman seperti TEE. Rooting tidak boleh membahayakan data biometrik.
FingerprintService
dan fingerprintd
melakukan panggilan melalui Fingerprint HAL ke
library khusus vendor untuk mendaftarkan sidik jari dan melakukan
operasi lainnya.

Panduan penerapan
Panduan Fingerprint HAL berikut dirancang untuk memastikan bahwa data sidik jari tidak bocor dan dihapus saat pengguna dihapus dari perangkat:
- Data sidik jari mentah atau turunannya (misalnya, template) tidak boleh dapat 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 pada 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, meskipun sistem file itu sendiri dienkripsi.
- Template sidik jari harus ditandatangani dengan kunci pribadi khusus perangkat. Untuk Advanced Encryption Standard (AES), minimal template harus ditandatangani dengan jalur sistem file absolut, grup, dan ID jari sehingga file template tidak dapat dioperasikan di perangkat lain atau oleh siapa pun selain pengguna yang mendaftarkannya di perangkat yang sama. Misalnya, menyalin data sidik jari dari pengguna yang berbeda di perangkat yang sama atau dari perangkat lain tidak boleh berfungsi.
- Implementasi harus menggunakan jalur sistem file yang disediakan oleh fungsi
setActiveGroup()
atau menyediakan cara untuk menghapus semua data template pengguna saat pengguna dihapus. Sangat direkomendasikan agar file template sidik jari disimpan sebagai file terenkripsi dan disimpan di jalur yang diberikan. 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 Fingerprint HIDL 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
pemalsuan, token di-wrap 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 sekumpulan sidik jari yang termasuk dalam grup tertentu, yang diidentifikasi oleh 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 keadaan sibuk, fungsi akan diblokir hingga HAL keluar dari keadaan sibuk. |
postEnroll() |
Menyelesaikan operasi pendaftaran dan membatalkan validasi
tantangan yang dihasilkan preEnroll() . Metode ini harus dipanggil di akhir
sesi pendaftaran multi-jari untuk menunjukkan bahwa tidak ada lagi jari yang dapat ditambahkan. |
Untuk mengetahui detail selengkapnya tentang hal ini, lihat komentar di IBiometricsFingerprint.hal
.