Pada 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 Bahasa Definisi Antarmuka Perangkat Keras Sidik Jari (HIDL) untuk terhubung ke pustaka khusus vendor dan perangkat keras sidik jari (misalnya, sensor sidik jari).
Untuk mengimplementasikan Fingerprint HIDL, Anda harus mengimplementasikan IBiometricsFingerprint.hal
di perpustakaan khusus vendor.
Pencocokan sidik jari
Sensor sidik jari suatu perangkat umumnya dalam keadaan idle. Namun, sebagai respons terhadap panggilan untuk authenticate
atau enroll
, sensor sidik jari mendengarkan sentuhan (layar mungkin juga aktif saat pengguna menyentuh sensor sidik jari). Alur pencocokan sidik jari tingkat tinggi mencakup langkah-langkah berikut:
- Pengguna meletakkan jari pada sensor sidik jari.
- Pustaka khusus vendor menentukan apakah ada kecocokan sidik jari di kumpulan templat sidik jari yang terdaftar saat ini.
- Hasil pencocokan diteruskan ke
FingerprintService
.
Alur ini mengasumsikan bahwa sidik jari telah didaftarkan pada perangkat, yaitu perpustakaan khusus vendor telah mendaftarkan templat untuk sidik jari tersebut. Untuk 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 sidik jari HAL. - Fingerprint HAL adalah implementasi C/C++ dari antarmuka IBiometricsFingerprint HIDL. Ini berisi perpustakaan khusus vendor yang berkomunikasi dengan perangkat keras khusus perangkat.
- Komponen Keystore API dan Keymaster menyediakan kriptografi yang didukung perangkat keras untuk penyimpanan kunci yang aman di lingkungan yang aman, seperti Trusted Execution Environment (TEE).
![Aliran data untuk otentikasi sidik jari](https://source.android.com/static/docs/security/images/fingerprint-data-flow.png?authuser=19&hl=id)
Implementasi HAL khusus vendor harus menggunakan protokol komunikasi yang disyaratkan oleh TEE. Gambar mentah dan fitur sidik jari yang diproses tidak boleh diteruskan ke memori yang tidak tepercaya. Semua data biometrik tersebut perlu disimpan di perangkat keras yang aman seperti TEE. Rooting tidak boleh membahayakan data biometrik.
FingerprintService
dan fingerprintd
melakukan panggilan melalui Fingerprint HAL ke perpustakaan khusus vendor untuk mendaftarkan sidik jari dan melakukan operasi lainnya.
![Interaksi dengan sidik jari](https://source.android.com/static/docs/security/images/fingerprint-daemon.png?authuser=19&hl=id)
Pedoman pelaksanaan
Pedoman HAL Sidik Jari berikut dirancang untuk memastikan bahwa data sidik jari tidak bocor dan terhapus saat pengguna dikeluarkan dari perangkat:
- Data sidik jari mentah atau turunannya (misalnya templat) tidak boleh diakses dari luar driver sensor atau TEE. Jika perangkat keras mendukung TEE, akses perangkat keras harus dibatasi pada TEE dan dilindungi oleh kebijakan SELinux. Saluran Serial Peripheral Interface (SPI) harus dapat diakses hanya oleh TEE dan harus ada kebijakan SELinux yang 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 pada sistem file, meskipun sistem file itu sendiri dienkripsi.
- Templat sidik jari harus ditandatangani dengan kunci pribadi khusus perangkat. Untuk Standar Enkripsi Lanjutan (AES), minimal templat harus ditandatangani dengan jalur sistem file absolut, grup, dan ID jari sehingga file templat tidak dapat dioperasikan di perangkat lain atau untuk siapa pun selain pengguna yang mendaftarkannya di perangkat. perangkat yang sama. Misalnya menyalin data sidik jari dari pengguna berbeda di perangkat yang sama atau dari perangkat lain pasti tidak akan berhasil.
- Implementasi harus menggunakan jalur sistem file yang disediakan oleh fungsi
setActiveGroup()
atau menyediakan cara untuk menghapus semua data template pengguna saat pengguna dihapus. Sangat disarankan agar file templat sidik jari disimpan dalam keadaan terenkripsi dan disimpan di jalur yang disediakan. Jika hal ini tidak dapat dilakukan karena persyaratan penyimpanan TEE, pelaksana harus menambahkan kait untuk memastikan penghapusan data saat pengguna dihapus.
Metode sidik jari
Antarmuka Fingerprint HIDL berisi metode utama berikut di IBiometricsFingerprint.hal
.
metode | Keterangan |
---|---|
enroll() | Mengalihkan mesin status HAL untuk memulai pengumpulan dan penyimpanan templat sidik jari. Saat pendaftaran selesai, atau setelah waktu habis, mesin status HAL kembali ke status siaga. |
preEnroll() | Menghasilkan token unik untuk menunjukkan awal pendaftaran sidik jari. Memberikan token ke fungsi enroll untuk memastikan ada otentikasi sebelumnya, misalnya menggunakan kata sandi. Untuk mencegah gangguan, token dibungkus setelah kredensial perangkat dikonfirmasi. Token harus diperiksa saat pendaftaran untuk memverifikasi bahwa token tersebut masih valid. |
getAuthenticatorId() | Mengembalikan token yang terkait dengan kumpulan sidik jari saat ini. |
cancel() | Membatalkan operasi pendaftaran atau autentikasi yang tertunda. Mesin status HAL dikembalikan ke status idle. |
enumerate() | Panggilan sinkron untuk menghitung semua templat sidik jari yang dikenal. |
remove() | Menghapus templat sidik jari. |
setActiveGroup() | Membatasi operasi HAL pada sekumpulan sidik jari milik grup tertentu, yang diidentifikasi oleh pengidentifikasi grup (GID). |
authenticate() | Mengautentikasi operasi terkait sidik jari (diidentifikasi dengan ID operasi). |
setNotify() | Mendaftarkan fungsi pengguna yang menerima notifikasi dari HAL. Jika mesin keadaan HAL dalam keadaan sibuk, fungsi tersebut diblokir sampai HAL meninggalkan keadaan sibuk. |
postEnroll() | Menyelesaikan operasi pendaftaran dan membatalkan tantangan yang dihasilkan preEnroll() . Ini harus dipanggil pada akhir sesi pendaftaran multijari untuk menunjukkan bahwa tidak ada lagi jari yang dapat ditambahkan. |
Untuk rincian lebih lanjut mengenai hal ini, lihat komentar di IBiometricsFingerprint.hal
.