Hardware Abstraction Layer (HAL) Weaver
(IWeaver.aidl),
yang diperkenalkan di Android 8.1, menyediakan antarmuka yang aman untuk autentikasi pengguna
dengan Lock Screen Knowledge Factor (LSKF) seperti PIN, pola, dan sandi.
Weaver menggantikan fungsi verifikasi LSKF Gatekeeper. Namun, Gatekeeper masih digunakan untuk membuat token autentikasi hardware.
Di Android 9 dan yang lebih tinggi, CDD 9.11.2 mewajibkan perangkat yang mendukung StrongBox untuk menyediakan hardware aman khusus yang mendukung autentikasi pengguna yang aman. Mengimplementasikan HAL Weaver menggunakan hardware aman ini memenuhi persyaratan "autentikasi pengguna yang aman".
Di perangkat tanpa Secure Element (SE) khusus, Weaver masih dapat diimplementasikan di Trusted Execution Environment (TEE) seperti Trusty.
Komponen
Weaver terdiri dari tiga komponen:
- Antarmuka Weaver AIDL (
IWeaver): Spesifikasi formal HAL. Android 13 dan yang lebih lama menggunakan HIDL bukan AIDL. - Layanan Hardware Abstraction Layer (HAL) Weaver:
Proses Android khusus vendor yang mengimplementasikan
IWeaverantarmuka. - Aplikasi Tepercaya (TA) Weaver: Logika inti yang berjalan di lingkungan yang aman. Aplikasi ini melakukan verifikasi LSKF dan menerapkan pembatasan frekuensi. Layanan HAL berkomunikasi dengan TA menggunakan saluran aman khusus implementasi.
Antarmuka
Antarmuka Weaver menampilkan array slot persisten berukuran tetap, yang masing-masing berisi kunci berukuran tetap dan nilai berukuran tetap. Setiap slot diidentifikasi oleh ID-nya, bilangan bulat dalam interval [0, numSlots - 1]. Nilai slot hanya dapat diakses jika kunci yang cocok dengan kunci yang disimpan diberikan.
Antarmuka Weaver terdiri dari:
getConfig(): Mengambil jumlah slot, ukuran kunci, dan ukuran nilai yang didukung oleh implementasi.write(): Menimpa slot yang ditentukan dengan pasangan nilai kunci baru. Operasi ini bersifat atomik dan membuat data sebelumnya tidak dapat dipulihkan secara permanen (penghapusan aman).read(): Mencoba mengambil nilai slot yang ditentukan. Tindakan ini hanya berhasil jika waktu tunggu pembatasan frekuensi (diberlakukan oleh TA) tidak aktif dan kunci yang diberikan cocok dengan kunci yang disimpan.
Untuk spesifikasi antarmuka lengkap, lihat
IWeaver.aidl.
Penggunaan oleh Android
Jika implementasi Weaver tersedia, LockSettingsService di server sistem Android akan menggunakannya untuk melindungi data pengguna. Untuk setiap pengguna di perangkat, LockSettingsService mengelola slot Weaver:
- Kunci slot (
weaverKey): Hash LSKF pengguna. Jika pengguna tidak memiliki kunci layar, string default akan digunakan. - Nilai slot (
weaverSecret): Rahasia kriptografi berentropi tinggi, yang dibuat secara acak.
weaverSecret dirancang untuk hanya dapat diambil oleh:
- Memberikan
weaverKeyyang benar ke TA Weaver dalam kebijakan pembatasan frekuensinya. - Membahayakan lingkungan aman tempat TA Weaver berjalan. Hal ini dimaksudkan agar sangat sulit dilakukan.
LockSettingsService menggunakan weaverKey dan weaverSecret untuk mengenkripsi Sandi Sintetis pengguna. Karena
Sandi Sintetis melindungi penyimpanan Credential-Encrypted (CE) pengguna untuk
Enkripsi Berbasis File (FBE)
dan
kunci terikat autentikasi pengguna di Android Keystore,
data tetap tidak dapat diakses hingga Weaver merilis rahasia.
Weaver vs. Gatekeeper
Secara historis, HAL Gatekeeper
menjalankan dua peran berbeda dalam satu panggilan verify():
- Verifikasi: Memeriksa LSKF, dengan pembatasan frekuensi yang diterapkan TEE.
- Attestation: Menerbitkan
HardwareAuthTokenuntuk memberi tahu KeyMint (sebelumnya Keymaster) bahwa autentikasi LSKF berhasil.
Mengapa beralih ke Weaver?
Dengan diperkenalkannya token reset kode sandi aman di Android 8.1, "Sandi Sintetis" menjadi rahasia kriptografi
utama. Dua peran yang dijelaskan di atas kini ditangani oleh
pendaftaran Gatekeeper terpisah, satu untuk LSKF di bawah userId + 100000
dan satu untuk Sandi Sintetis di bawah userId.
Weaver diperkenalkan untuk mengambil alih peran pertama, menggunakan antarmuka HAL yang lebih sederhana dengan dukungan untuk implementasi berbasis Secure Element (SE).
| Fitur | Weaver | Gatekeeper |
|---|---|---|
| Penghapusan Aman | Penghapusan aman diperlukan, dan mudah diimplementasikan karena antarmuka menggunakan jumlah slot berukuran tetap. | Penghapusan aman tidak diperlukan, dan sulit diimplementasikan karena antarmuka mendukung jumlah pendaftaran yang tidak terbatas. |
| Hardware | Dioptimalkan untuk SE, tetapi juga berfungsi di TEE. | Secara efektif hanya TEE. Mengimplementasikannya di SE tidak memberikan manfaat keamanan dengan desain saat ini. |
| Penanganan Error | Kode error yang lebih jelas | Kode error yang ambigu. Akibatnya, layar kunci tidak membedakan antara LSKF yang salah dan kegagalan yang tidak terkait. |
| Atomitas | Kode di LockSettingsService yang menggunakan Weaver melakukan
perubahan LSKF secara atomik. Data baru ditulis ke slot Weaver baru, dan
slot lama dihapus hanya jika aman untuk melakukannya. |
Kode di LockSettingsService yang menggunakan Gatekeeper
tidak melakukan perubahan LSKF secara atomik. Semua data pengguna dapat hilang jika
terjadi masalah saat LSKF diubah. |
Kode referensi
Kode referensi untuk implementasi Weaver di elemen aman yang kompatibel dengan ISO/IEC7816-4 tersedia di AOSP:
external/libese/.
Pengujian
Untuk memvalidasi implementasi Weaver, gunakan
VtsHalWeaverTargetTest:
atest VtsHalWeaverTargetTest
atau:
vts-tradefed run vts -m VtsHalWeaverTargetTest