HIDL sidik jari

Pada perangkat dengan sensor sidik jari, pengguna dapat mendaftarkan satu atau lebih 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 perpustakaan khusus vendor dan perangkat keras sidik jari (misalnya, sensor sidik jari).

Untuk mengimplementasikan HIDL Sidik Jari, Anda harus mengimplementasikan IBiometricsFingerprint.hal di pustaka khusus vendor.

Pencocokan sidik jari

Sensor sidik jari perangkat umumnya tidak digunakan. Namun, sebagai tanggapan atas panggilan untuk authenticate atau enroll , sensor sidik jari mendengarkan sentuhan (layar mungkin juga akan aktif saat pengguna menyentuh sensor sidik jari). Aliran pencocokan sidik jari tingkat tinggi mencakup langkah-langkah berikut:

  1. Pengguna meletakkan jari pada sensor sidik jari.
  2. Pustaka khusus vendor menentukan apakah ada kecocokan sidik jari dalam kumpulan templat sidik jari terdaftar saat ini.
  3. Hasil yang cocok diteruskan ke FingerprintService .

Alur ini mengasumsikan bahwa sidik jari telah didaftarkan pada perangkat, yaitu, perpustakaan khusus vendor telah mendaftarkan template untuk sidik jari. Untuk detail selengkapnya, lihat Otentikasi .

Arsitektur

Sidik Jari HAL berinteraksi dengan komponen berikut.

  • BiometricManager berinteraksi langsung dengan aplikasi dalam proses aplikasi. Setiap aplikasi memiliki instance IBiometricsFingerprint.hal
  • FingerprintService beroperasi dalam proses sistem, yang menangani komunikasi dengan HAL sidik jari.
  • Fingerprint HAL adalah implementasi C/C++ dari antarmuka IBiometricsFingerprint HIDL. Ini berisi pustaka 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
Gambar 1. Aliran data tingkat tinggi untuk otentikasi sidik jari

Implementasi HAL khusus vendor harus menggunakan protokol komunikasi yang diperlukan oleh TEE. Gambar mentah dan fitur sidik jari yang diproses tidak boleh dilewatkan dalam memori yang tidak dipercaya. Semua data biometrik tersebut perlu disimpan dalam 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 jarid
Gambar 2. Interaksi daemon sidik jari dengan perpustakaan khusus vendor sidik jari

Pedoman pelaksanaan

Panduan HAL Sidik Jari berikut ini dirancang untuk memastikan bahwa data sidik jari tidak bocor dan dihapus saat pengguna dikeluarkan dari perangkat:

  • Data sidik jari mentah atau turunannya (misalnya, template) tidak boleh dapat 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 eksplisit pada semua file perangkat.
  • Akuisisi sidik jari, pendaftaran, dan pengenalan harus terjadi di dalam TEE.
  • Hanya bentuk terenkripsi dari data sidik jari yang dapat disimpan di sistem file, bahkan jika sistem file itu sendiri dienkripsi.
  • Templat 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 untuk siapa pun selain pengguna yang mendaftarkannya di perangkat yang sama. Misalnya, menyalin data sidik jari dari pengguna yang berbeda pada 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 disarankan agar file templat sidik jari disimpan sebagai terenkripsi dan disimpan di jalur yang disediakan. Jika ini tidak layak karena persyaratan penyimpanan TEE, pelaksana harus menambahkan kait untuk memastikan penghapusan data saat pengguna dihapus.

Metode sidik jari

Antarmuka HIDL Sidik Jari 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 batas waktu, 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 selama pendaftaran untuk memverifikasi bahwa itu masih valid.
getAuthenticatorId() Mengembalikan token yang terkait dengan set sidik jari saat ini.
cancel() Membatalkan pendaftaran yang tertunda atau operasi autentikasi. Mesin status HAL dikembalikan ke status idle.
enumerate() Panggilan sinkron untuk menghitung semua templat sidik jari yang dikenal.
remove() Menghapus template sidik jari.
setActiveGroup() Membatasi operasi HAL ke satu set 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 pemberitahuan dari HAL. Jika mesin keadaan HAL dalam keadaan sibuk, fungsi diblokir sampai HAL meninggalkan keadaan sibuk.
postEnroll() Menyelesaikan operasi pendaftaran dan membatalkan tantangan yang dihasilkan preEnroll() . Ini harus dipanggil pada akhir sesi pendaftaran multi-jari untuk menunjukkan bahwa tidak ada lagi jari yang boleh ditambahkan.

Untuk detail lebih lanjut tentang ini, lihat komentar di IBiometricsFingerprint.hal .

,

Pada perangkat dengan sensor sidik jari, pengguna dapat mendaftarkan satu atau lebih 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 perpustakaan khusus vendor dan perangkat keras sidik jari (misalnya, sensor sidik jari).

Untuk mengimplementasikan HIDL Sidik Jari, Anda harus mengimplementasikan IBiometricsFingerprint.hal di pustaka khusus vendor.

Pencocokan sidik jari

Sensor sidik jari perangkat umumnya tidak digunakan. Namun, sebagai tanggapan atas panggilan untuk authenticate atau enroll , sensor sidik jari mendengarkan sentuhan (layar mungkin juga akan aktif saat pengguna menyentuh sensor sidik jari). Aliran pencocokan sidik jari tingkat tinggi mencakup langkah-langkah berikut:

  1. Pengguna meletakkan jari pada sensor sidik jari.
  2. Pustaka khusus vendor menentukan apakah ada kecocokan sidik jari dalam kumpulan templat sidik jari terdaftar saat ini.
  3. Hasil yang cocok diteruskan ke FingerprintService .

Alur ini mengasumsikan bahwa sidik jari telah didaftarkan pada perangkat, yaitu, perpustakaan khusus vendor telah mendaftarkan template untuk sidik jari. Untuk detail selengkapnya, lihat Otentikasi .

Arsitektur

Sidik Jari HAL berinteraksi dengan komponen berikut.

  • BiometricManager berinteraksi langsung dengan aplikasi dalam proses aplikasi. Setiap aplikasi memiliki instance IBiometricsFingerprint.hal
  • FingerprintService beroperasi dalam proses sistem, yang menangani komunikasi dengan HAL sidik jari.
  • Fingerprint HAL adalah implementasi C/C++ dari antarmuka IBiometricsFingerprint HIDL. Ini berisi pustaka 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
Gambar 1. Aliran data tingkat tinggi untuk otentikasi sidik jari

Implementasi HAL khusus vendor harus menggunakan protokol komunikasi yang diperlukan oleh TEE. Gambar mentah dan fitur sidik jari yang diproses tidak boleh dilewatkan dalam memori yang tidak dipercaya. Semua data biometrik tersebut perlu disimpan dalam 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 jarid
Gambar 2. Interaksi daemon sidik jari dengan perpustakaan khusus vendor sidik jari

Pedoman pelaksanaan

Panduan HAL Sidik Jari berikut ini dirancang untuk memastikan bahwa data sidik jari tidak bocor dan dihapus saat pengguna dikeluarkan dari perangkat:

  • Data sidik jari mentah atau turunannya (misalnya, template) tidak boleh dapat 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 eksplisit pada semua file perangkat.
  • Akuisisi sidik jari, pendaftaran, dan pengenalan harus terjadi di dalam TEE.
  • Hanya bentuk terenkripsi dari data sidik jari yang dapat disimpan di sistem file, bahkan jika sistem file itu sendiri dienkripsi.
  • Templat 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 untuk siapa pun selain pengguna yang mendaftarkannya di perangkat yang sama. Misalnya, menyalin data sidik jari dari pengguna yang berbeda pada 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 disarankan agar file templat sidik jari disimpan sebagai terenkripsi dan disimpan di jalur yang disediakan. Jika ini tidak layak karena persyaratan penyimpanan TEE, pelaksana harus menambahkan kait untuk memastikan penghapusan data saat pengguna dihapus.

Metode sidik jari

Antarmuka HIDL Sidik Jari 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 batas waktu, 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 selama pendaftaran untuk memverifikasi bahwa itu masih valid.
getAuthenticatorId() Mengembalikan token yang terkait dengan set sidik jari saat ini.
cancel() Membatalkan pendaftaran yang tertunda atau operasi autentikasi. Mesin status HAL dikembalikan ke status idle.
enumerate() Panggilan sinkron untuk menghitung semua templat sidik jari yang dikenal.
remove() Menghapus template sidik jari.
setActiveGroup() Membatasi operasi HAL ke satu set 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 pemberitahuan dari HAL. Jika mesin keadaan HAL dalam keadaan sibuk, fungsi diblokir sampai HAL meninggalkan keadaan sibuk.
postEnroll() Menyelesaikan operasi pendaftaran dan membatalkan tantangan yang dihasilkan preEnroll() . Ini harus dipanggil pada akhir sesi pendaftaran multi-jari untuk menunjukkan bahwa tidak ada lagi jari yang boleh ditambahkan.

Untuk detail lebih lanjut tentang ini, lihat komentar di IBiometricsFingerprint.hal .