Biometrik

Biometrik menawarkan cara yang lebih praktis, tetapi berpotensi kurang aman untuk mengonfirmasi identitas Anda dengan perangkat. Berdasarkan model autentikasi bertingkat, autentikasi utama (yaitu, modalitas berbasis faktor pengetahuan seperti PIN, pola, dan sandi) memberikan tingkat keamanan tertinggi. Biometrik berada di tingkat autentikasi sekunder, yang menawarkan keseimbangan antara kemudahan dan keamanan. CDD Android menentukan tiga kelas kekuatan biometrik: Class 3 (sebelumnya Kuat), Class 2 (sebelumnya Lemah), dan Class 1 (sebelumnya Kemudahan). Setiap class memiliki kumpulan prasyarat, hak istimewa, dan batasan - lihat CDD di atas untuk mengetahui detail selengkapnya. Ketiga class diizinkan untuk berintegrasi dengan layar kunci, tetapi hanya pengautentikasi Kuat dan Lemah yang diizinkan untuk berintegrasi dengan API android.hardware.biometrics. Tabel ini menjelaskan setiap pengautentikasi dan fungsi yang didukungnya.

Pengautentikasi Lockscreen Integrasi BiometricPrompt Keystore (kunci berbasis waktu) Keystore (kunci berbasis operasi)
BIOMETRIC_STRONG (Kelas 3) Ya Ya Ya Ya
BIOMETRIC_WEAK (Kelas 2) Ya Ya Tidak Tidak
BIOMETRIC_CONVENIENCE
(Kelas 1)
Ya Tidak Tidak Tidak
DEVICE_CREDENTIAL Ya Ya Ya Ya

Framework Android menyertakan dukungan untuk autentikasi biometrik wajah dan sidik jari. Android dapat disesuaikan untuk mendukung modalitas biometrik lainnya (seperti Iris). Namun, integrasi biometrik akan bergantung pada keamanan biometrik, bukan modalitas. Untuk mengetahui detail selengkapnya tentang spesifikasi keamanan biometrik, lihat Mengukur Keamanan Buka dengan Biometrik.

Sumber

Android 12

  • Memperkenalkan API BiometricManager.Strings, yang menyediakan string yang dilokalkan untuk aplikasi yang menggunakan BiometricPrompt untuk autentikasi. String ini dimaksudkan untuk mengetahui perangkat dan memberikan spesifikasi yang lebih spesifik tentang jenis autentikasi yang dapat digunakan.
  • Mencakup dukungan sensor sidik jari di bawah layar (UDFPS).

Android 11

  • Memperkenalkan antarmuka BiometricManager.Authenticators, yang menyediakan konstanta yang dapat digunakan developer untuk menentukan jenis autentikasi yang diterima oleh aplikasi mereka.
  • Menambahkan tindakan intent ACTION_BIOMETRIC_ENROLL, yang dapat digunakan developer untuk mengarahkan pengguna mendaftarkan metode autentikasi yang memenuhi persyaratan aplikasi mereka.
  • Menambahkan metode AuthenticationResult#getAuthenticationType(), yang dapat digunakan developer untuk memeriksa apakah pengguna diautentikasi menggunakan kredensial biometrik atau kredensial perangkat.
  • Memberikan dukungan tambahan untuk kunci auth-per-use dalam class BiometricPrompt.

Android 10

  • Memperkenalkan class BiometricManager yang dapat digunakan developer untuk mengkueri ketersediaan autentikasi biometrik.
  • Menyertakan integrasi autentikasi sidik jari dan wajah untuk BiometricPrompt

Android 9

  • Menyertakan integrasi sidik jari hanya untuk BiometricPrompt.
  • Menghentikan penggunaan class FingerprintManager. Jika aplikasi sistem dan aplikasi yang dipaketkan menggunakan class ini, update aplikasi tersebut untuk menggunakan BiometricPrompt dan BiometricManager.
  • Memperbarui pengujian verifier CTS FingerprintManager untuk menguji BiometricPrompt menggunakan BiometricPromptBoundKeysTest.

Implementasi

Untuk memastikan pengguna dan developer memiliki pengalaman biometrik yang lancar, integrasikan stack biometrik Anda dengan API BiometricPrompt, BiometricManager, dan ACTION_BIOMETRIC_ENROLL. Perangkat dengan sensor biometrik harus mematuhi persyaratan kekuatan ini.Selain itu, semua implementasi harus lulus modul CTS CtsBiometricsTestCases.

Untuk mengintegrasikan stack biometrik Anda dengan ACTION_BIOMETRIC_ENROLL API:

  1. Ubah BiometricEnrollActivity untuk menampilkan alur pendaftaran Anda. Perhatikan bahwa biometrik Anda hanya dapat ditampilkan jika memenuhi kekuatan yang diminta. Jika perangkat Anda mendukung lebih dari satu, tindakan ini akan menampilkan daftar yang dapat dipilih pengguna.
Arsitektur BiometricPrompt
Gambar 1. Arsitektur BiometricPrompt

Panduan penerapan HAL

Ikuti panduan HAL biometrik ini untuk memastikan bahwa data biometrik tidak bocor dan dihapus saat pengguna dihapus dari perangkat:

  • Pastikan data biometrik atau turunan mentah (seperti template) tidak pernah dapat diakses dari luar lingkungan terisolasi yang aman (seperti TEE atau Elemen Pengaman). Semua data yang disimpan harus dienkripsi dengan kunci khusus perangkat yang hanya diketahui oleh TEE (Trusted Execution Environment). Jika hardware mendukungnya, batasi akses hardware ke lingkungan terisolasi yang aman dan lindungi dengan kebijakan SELinux. Jadikan saluran komunikasi (misalnya, SPI, I2C) hanya dapat diakses oleh lingkungan terisolasi yang aman dengan kebijakan SELinux eksplisit di semua file perangkat.
  • Akuisisi, pendaftaran, dan pengenalan biometrik harus dilakukan di dalam lingkungan terisolasi yang aman untuk mencegah pelanggaran data dan serangan lainnya. Persyaratan ini hanya berlaku untuk biometrik Kelas 3 (sebelumnya Kuat) dan Kelas 2 (sebelumnya Lemah).
  • Untuk melindungi dari serangan replay, tanda tangani template biometrik dengan kunci pribadi khusus perangkat. Untuk Advanced Encryption Standard (AES), minimal tanda tangani template dengan jalur sistem file, grup, dan ID biometrik absolut sehingga file template tidak dapat dioperasikan di perangkat lain atau untuk siapa pun selain pengguna yang mendaftarkannya di perangkat yang sama. Misalnya, cegah penyalinan data biometrik dari pengguna lain di perangkat yang sama atau dari perangkat lain.
  • Jika Anda perlu menyimpan data di luar TEE, gunakan jalur sistem file yang disediakan oleh setActiveUser() HIDL method atau sediakan cara lain untuk menghapus semua data template pengguna saat pengguna dihapus. Alasannya adalah untuk melindungi kebocoran data pengguna. Perangkat yang tidak menggunakan jalur ini harus melakukan pembersihan setelah pengguna dihapus. CDD mewajibkan data biometrik dan file turunan disimpan dalam bentuk terenkripsi - terutama jika tidak di TEE. Jika hal ini tidak dapat dilakukan karena persyaratan penyimpanan lingkungan terisolasi yang aman, tambahkan hook untuk memastikan penghapusan data saat pengguna dihapus atau perangkat dihapus total. Lihat LockSettingsService.removeBiometricsForUser()

Penyesuaian

Jika perangkat Anda mendukung beberapa biometrik, pengguna harus dapat menentukan default-nya di setelan. Implementasi BiometricPrompt Anda harus lebih memilih biometrik Kelas 3 (sebelumnya Kuat) sebagai default, kecuali jika pengguna menggantinya secara eksplisit, maka pesan peringatan harus ditampilkan yang menjelaskan risiko yang terkait dengan biometrik (misalnya, Foto Anda dapat membuka kunci perangkat Anda)

String autentikasi khusus perangkat

Mulai Android 12, string autentikasi kontekstual akan tersedia bagi developer melalui API BiometricManager.Strings. Anda dapat menyesuaikan nilai resource yang ditampilkan oleh API ini untuk menerapkan string khusus perangkat. Jika Anda melakukannya, pastikan string baru diterjemahkan untuk semua lokalitas yang didukung perangkat. Selain itu, pastikan properti berikut dipertahankan:


Metode

Tujuan string

Jenis autentikasi yang akan disertakan

Jika biometrik dan kunci layar memungkinkan

getButtonLabel()

Label untuk tombol yang memicu BiometricPrompt

Hanya jenis Terdaftar (jika memungkinkan) yang memenuhi persyaratan pengautentikasi

Gunakan string khusus biometrik (seperti, "Gunakan sidik jari")

getPromptMessage()

Pesan yang ditampilkan di BiometricPrompt saat mengautentikasi

Hanya jenis Terdaftar (jika memungkinkan) yang memenuhi persyaratan pengautentikasi

Gunakan string biometrik dan kunci layar gabungan (misalnya, "Gunakan sidik jari atau PIN untuk melanjutkan")

getSettingName()

Nama setelan yang mengaktifkan BiometricPrompt untuk autentikasi

Semua jenis yang didukung oleh perangkat (meskipun tidak terdaftar) yang memenuhi persyaratan pengautentikasi

Gunakan string biometrik dan kunci layar yang digabungkan (seperti, "Gunakan sidik jari atau kunci layar")

Misalnya, pertimbangkan perangkat yang memiliki sensor wajah Class 2 dengan wajah terdaftar, PIN terdaftar, dan sensor sidik jari Class 3 dengan tidak ada sidik jari terdaftar. Tabel berikut menyediakan string contoh untuk setiap kombinasi pengautentikasi yang diizinkan dan metode BiometricManager.Strings yang dipanggil:


Pengautentikasi yang diizinkan

getButtonLabel()

getPromptMessage()

getSettingName()

Biometrik kelas 3 (BIOMETRIC_STRONG)

"Gunakan sidik jari"
(Hanya sidik jari yang memenuhi persyaratan pengautentikasi)

"Gunakan sidik jari Anda untuk melanjutkan"
(Hanya sidik jari yang memenuhi persyaratan pengautentikasi)

"Gunakan sidik jari"
(Hanya sidik jari yang memenuhi persyaratan pengautentikasi)

Biometrik kelas 2 (BIOMETRIC_WEAK)

"Gunakan wajah"
(Wajah dan sidik jari memenuhi persyaratan; hanya wajah yang didaftarkan)

"Gunakan wajah Anda untuk melanjutkan"
(Wajah dan sidik jari memenuhi persyaratan; hanya wajah yang terdaftar)

"Gunakan wajah atau sidik jari"
(Wajah dan sidik jari memenuhi persyaratan; perangkat mendukung keduanya)

Kunci layar (DEVICE_CREDENTIAL)

"Gunakan PIN"
(Kunci layar apa pun memenuhi persyaratan; PIN terdaftar)

"Masukkan PIN Anda untuk melanjutkan"
(Kunci layar apa pun memenuhi persyaratan; PIN terdaftar)

"Gunakan kunci layar"
(Kunci layar apa pun memenuhi persyaratan)

Kunci layar biometrik OR kelas 3

"Gunakan PIN"
(Sidik jari dan kunci layar apa pun memenuhi persyaratan; hanya PIN yang didaftarkan)

"Masukkan PIN Anda untuk melanjutkan"
(Sidik jari dan kunci layar apa pun memenuhi persyaratan; hanya PIN yang terdaftar)

"Gunakan sidik jari atau kunci layar"
(Sidik jari dan kunci layar apa pun memenuhi persyaratan)

Biometrik Class 2 ATAU kunci layar

"Gunakan wajah"
(Wajah, sidik jari, dan kunci layar apa pun memenuhi persyaratan; wajah didaftarkan dan menggantikan PIN)

"Gunakan wajah atau PIN Anda untuk melanjutkan"
(Wajah, sidik jari, dan kunci layar apa pun memenuhi persyaratan; wajah dan PIN terdaftar)

"Gunakan biometrik atau kunci layar"
(Wajah, sidik jari, dan kunci layar apa pun memenuhi persyaratan)

Validasi

Implementasi biometrik Anda harus lulus pengujian berikut:

  • BiometricManager CTS
  • BiometricPrompt CTS (pengujian keandalan, mendalam bergantung pada verifier)
  • Bagian Pengujian Biometrik CtsVerifier: Harus lulus satu per satu dengan setiap modalitas yang didukung perangkat

Selain itu, jika perangkat Anda mendukung biometrik yang memiliki AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0), perangkat tersebut harus lulus pengujian VTS yang relevan (fingerprint, face)