Gunakan enkripsi file yang terikat kendaraan

Halaman ini menjelaskan cara mengaktifkan fitur seed enkripsi binding berbasis kendaraan.

Ringkasan

Tujuan utama dari fitur seed binding kendaraan adalah untuk lebih melindungi privasi pengguna dengan menjaga data di sistem Infotainmen dalam Kendaraan (IVI) agar tidak dikeluarkan dari kendaraan. Ini adalah dilakukan dengan mengikat kunci enkripsi penyimpanan ke beberapa Electronic Control Unit (ECU) lain sehingga jika IVI dilepas dan ditempatkan di kendaraan lain (atau dijalankan di bangku tes), data pengguna terenkripsi di IVI tidak dapat didekripsi.

Untuk mengikat kunci enkripsi file, Vold mencampur seed khusus kendaraan dengan enkripsi kunci turunan kunci, sehingga kunci itu unik dan terikat secara fisik ke kendaraan. Seed adalah array byte, diekspos sebagai properti Vehicle Hardware Abstraksi Layer (VHAL) baru oleh OEM, STORAGE_ENCRYPTION_BINDING_SEED. Izin properti ini dibatasi sedemikian rupa sehingga itu hanya dapat dikueri oleh {i> daemon<i} sistem dengan hak istimewa.

Diagram arsitektur

Gambar ini mengilustrasikan arsitektur integrasi terikat kendaraan:

Gambar 1. Arsitektur yang terikat kendaraan.

Aktifkan binding berbasis kendaraan

Binding enkripsi penyimpanan ke kendaraan harus diaktifkan secara eksplisit dan tidak dapat diaktifkan atau nonaktif tanpa melakukan {i>factory reset<i}. Ini berarti bahwa pembaruan {i> Over-the-Air<i} (OTA) tidak dapat mengaktifkan fitur tersebut tanpa menghapus total perangkat. OEM dapat memilih untuk mengaktifkan fitur tersebut pada meng-upgrade perangkat jika mereka juga mereset perangkat ke setelan pabrik. Misalnya, pada kunjungan layanan.

Fitur ini diaktifkan dengan mendukung properti STORAGE_ENCRYPTION_BINDING_SEED di HAL kendaraan yang disediakan oleh vendor. Properti ini menyimpan string byte sepanjang 16 byte dan diharapkan untuk disimpan di ECU yang terpisah dari IVI. Properti ini awalnya ditetapkan oleh Android Automotive OS (AAOS), yang membuatnya menggunakan Cryptographically Secure Random Number Generator (CSRNG). AAOS kemudian membaca properti tersebut pada booting berikutnya.

Cara VHAL menyimpan nilai STORAGE_ENCRYPTION_BINDING_SEED bergantung pada vendor. Kami memiliki rekomendasi umum untuk melindungi seed:

  1. (Direkomendasikan) Benih disimpan oleh ECU di dalam kendaraan yang secara fisik terlindungi dengan baik. Jika tidak, maka mudah bagi IVI dan ECU untuk ditarik dari saat ini.
  2. (Direkomendasikan) IVI dan ECU harus saling mengautentikasi untuk bertukar seed dengan mencegah permintaan {i>spoofing<i} untuk benih dari ECU.
  3. (Disarankan) Benih harus dikirim menggunakan saluran yang aman untuk mencegah CAN mengendus bus.

Selain itu, tambahkan hal berikut untuk memastikan vendor init.target.rc aktif late-fs sebelum mount_all --late:

# feed vehicle binding seed to vold
exec_start vold_seed_binding

HAL kendaraan harus dimulai di early_hal, bukan di hal now. Setiap properti sistem persist.* tidak dapat diakses di early-hal karena Partisi /data belum dipasang.

Mengonfigurasi binding berbasis kendaraan

Jika seed ECU tidak cocok, perangkat akan memulai ulang ke pemulihan dan meminta pengguna untuk menghapusnya partisi /data atau coba lagi.

Perilaku dialog perintah dan hapus total data dapat diubah di builtins.cpp:

  1. Ubah prompt_and_wipe_data menjadi wipe_data. Perangkat akan dibersihkan dan kemudian {i>reboot<i} tanpa {i>prompt<i}.
  2. Pesan perintah terdapat di dalam recovery.cpp baru.

    Gambar 2. Pesan perintah.

Menguji binding berbasis kendaraan

Pengujian tiruan

{i>Mockup test<i} disediakan di packages/services/Car/cpp/security/vehicle_binding_util/tests.

Untuk menjalankan uji coba ini:

attest libvehicle_binding_util_test

Pengujian integrasi

Pengujian {i>atest<i} disediakan di packages/services/Car/cpp/security/vehicle_binding_util/tests.

Untuk menjalankan pengujian integrasi ini:

atest vehicle_binding_integration_test