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
danBiometricManager
. - Memperbarui pengujian verifier CTS
FingerprintManager
untuk mengujiBiometricPrompt
menggunakanBiometricPromptBoundKeysTest
.
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:
- 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.
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)