HIDL Sidik Jari

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:

  1. Pengguna menempelkan jari pada sensor sidik jari.
  2. Library khusus vendor menentukan apakah ada kecocokan sidik jari dalam kumpulan template sidik jari terdaftar saat ini.
  3. 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 instance IBiometricsFingerprint.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).
Alur data untuk autentikasi sidik jari
Gambar 1. Aliran data tingkat tinggi untuk autentikasi sidik jari

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.

Interaksi dengan fingerprintd
Gambar 2. Interaksi daemon sidik jari dengan library spesifik vendor sidik jari

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.