Weaver

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 IWeaver antarmuka.
  • 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 weaverKey yang 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():

  1. Verifikasi: Memeriksa LSKF, dengan pembatasan frekuensi yang diterapkan TEE.
  2. Attestation: Menerbitkan HardwareAuthToken untuk 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