Binding versi

Semua kunci KeyMint harus terikat ke root of trust untuk perangkat. Root of trust adalah bitstring yang berasal dari kunci publik yang digunakan untuk memverifikasi tanda tangan boot image, bersama dengan status kunci bootloader.

Kunci KeyMint juga harus terikat ke versi sistem operasi dan tingkat patch perangkat. Untuk mendukung struktur modular Treble, binding versi ini menyertakan tingkat patch terpisah untuk setiap partisi (boot, system, dan vendor). Hal ini memungkinkan setiap partisi diupdate secara independen, sekaligus tetap memberikan perlindungan rollback.

Untuk mengimplementasikan binding versi ini, aplikasi tepercaya (TA) KeyMint memerlukan cara untuk menerima versi OS dan level patch saat ini dengan aman, serta untuk memastikan bahwa informasi yang diterimanya cocok dengan semua informasi tentang sistem yang berjalan.

  • Perangkat dengan Booting Terverifikasi Android (AVB):
    • Tingkat patch dan versi OS dapat disertakan di vbmeta.img, sehingga bootloader dapat menyediakannya ke KeyMint.
    • Untuk partisi berantai, info versi untuk partisi berada di VBMeta berantai.
    • Secara umum, informasi versi harus ada di VBMeta struct yang berisi data verifikasi (hash atau hashtree) untuk partisi tertentu.
  • Perangkat tanpa AVB:
    • Implementasi Booting Terverifikasi perlu memberikan hash metadata versi ke bootloader, sehingga bootloader dapat memberikan hash ke KeyMint.
    • boot.img dapat terus menyimpan level patch di header.
    • system.img dapat terus menyimpan level patch dan versi OS dalam properti hanya baca.
    • vendor.img menyimpan level patch di properti hanya baca ro.vendor.build.version.security_patch.
    • Bootloader dapat memberikan hash dari semua data yang divalidasi oleh Booting Terverifikasi ke KeyMint.

Tag berikut menjelaskan informasi versi untuk partisi yang relevan:

Implementasi KeyMint harus memperlakukan semua level patch secara independen. Kunci dapat digunakan jika semua info versi cocok dengan nilai yang terkait dengan kunci. Jika versi perangkat saat ini lebih baru daripada nilai apa pun yang terkait dengan kunci, KeyMint akan menampilkan error KEY_REQUIRES_UPGRADE pada setiap upaya untuk menggunakan kunci. Keystore kemudian menjalankan IKeyMintDevice::upgradeKey untuk membuat keyblob baru yang terikat ke level patch saat ini (dan Keystore kemudian menghapus keyblob sebelumnya dengan panggilan ke IKeyMintDevice::deleteKey).