Gunakan enkripsi file yang terikat kendaraan

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

Ringkasan

Sasaran utama fitur seed binding kendaraan adalah untuk lebih melindungi privasi pengguna dengan melindungi data di sistem Infotainment Dalam Kendaraan (IVI) agar tidak dihapus dari kendaraan. Hal ini 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 test bench), data pengguna terenkripsi di IVI tidak dapat didekripsi.

Untuk mengikat kunci enkripsi file, Vold menggabungkan seed khusus kendaraan dengan turunan kunci enkripsi kunci sehingga kunci tersebut unik dan terikat secara fisik ke kendaraan. Seed adalah array byte, yang diekspos sebagai properti Vehicle Hardware Abstraction Layer (VHAL) baru oleh OEM, STORAGE_ENCRYPTION_BINDING_SEED. Izin properti ini dibatasi sehingga hanya dapat dikueri oleh daemon sistem dengan hak istimewa.

Diagram arsitektur

Gambar ini mengilustrasikan arsitektur integrasi terikat kendaraan:

Gambar 1. Arsitektur yang terikat kendaraan.

Mengaktifkan binding berbasis kendaraan

Pengikatan enkripsi penyimpanan ke kendaraan harus diaktifkan secara eksplisit dan tidak dapat diaktifkan atau dinonaktifkan tanpa melakukan reset ke setelan pabrik. Artinya, update Over-the-Air (OTA) tidak dapat mengaktifkan fitur ini tanpa menghapus total perangkat. OEM dapat memilih untuk mengaktifkan fitur ini setelah upgrade jika mereka juga mereset perangkat ke setelan pabrik. Misalnya, pada kunjungan servis.

Fitur ini diaktifkan dengan mendukung properti STORAGE_ENCRYPTION_BINDING_SEED di HAL kendaraan yang disediakan vendor. Properti ini menyimpan string byte dengan panjang 16 byte dan diharapkan dipertahankan di ECU yang terpisah dari IVI. Properti ini awalnya ditetapkan oleh Android Automotive OS (AAOS), yang membuatnya menggunakan Generator Angka Acak Aman secara Kriptografis (CSRNG). AAOS kemudian membaca properti pada booting berikutnya.

Cara VHAL menyimpan nilai STORAGE_ENCRYPTION_BINDING_SEED bersifat khusus vendor. Kami memiliki rekomendasi umum untuk melindungi seed:

  1. (Direkomendasikan) Seed disimpan oleh ECU di kendaraan yang secara fisik dilindungi dengan baik. Jika tidak, IVI dan ECU akan mudah ditarik dari kendaraan.
  2. (Direkomendasikan) IVI dan ECU harus saling mengautentikasi untuk bertukar seed guna mencegah permintaan spoofing untuk seed dari ECU.
  3. (Direkomendasikan) Seed harus dikirim menggunakan saluran aman untuk mencegah penyadapan bus CAN.

Selain itu, tambahkan kode berikut untuk memastikan vendor init.target.rc di 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 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 dimulai ulang ke mode pemulihan dan meminta pengguna untuk menghapus partisi /data atau mencoba lagi.

Perilaku data prompt dan penghapusan total dapat diubah di builtins.cpp:

  1. Ubah prompt_and_wipe_data menjadi wipe_data. Perangkat akan dihapus total, lalu dimulai ulang tanpa perintah.
  2. Pesan perintah terdapat dalam recovery.cpp.

    Gambar 2. Pesan perintah.

Menguji binding berbasis kendaraan

Pengujian tiruan

Pengujian tiruan disediakan di packages/services/Car/cpp/security/vehicle_binding_util/tests.

Untuk menjalankan pengujian tiruan ini:

attest libvehicle_binding_util_test

Pengujian integrasi

Pengujian atest disediakan di packages/services/Car/cpp/security/vehicle_binding_util/tests.

Untuk menjalankan pengujian integrasi ini:

atest vehicle_binding_integration_test