Semua kunci KeyMint harus terikat dengan root of trust untuk perangkat. Root of trust adalah bitstring yang berasal dari kunci publik yang digunakan untuk memverifikasi tanda tangan image booting, bersama dengan status kunci bootloader.
Kunci KeyMint
juga
harus terikat dengan 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 menerapkan binding versi ini, aplikasi tepercaya KeyMint (TA) memerlukan cara untuk menerima versi OS dan tingkat patch saat ini dengan aman, dan untuk memastikan bahwa informasi yang diterima cocok dengan semua informasi tentang sistem yang berjalan.
- Perangkat dengan Android Verified Boot (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 dalam VBMeta berantai.
- Secara umum, informasi versi harus berada di
VBMeta struct
yang berisi data verifikasi (hash atau hashtree) untuk partisi tertentu.
- Tingkat patch dan versi OS
dapat disertakan
di
- Perangkat tanpa AVB:
- Implementasi Verified Boot 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 tingkat patch di properti hanya bacaro.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:
Tag::VENDOR_PATCHLEVEL
:vendor
partisiTag::BOOT_PATCHLEVEL
: Partisiboot
Tag::OS_PATCHLEVEL
danOS_VERSION
: Partisisystem
. (OS_VERSION
dihapus dari headerboot.img
.)
Implementasi KeyMint harus memperlakukan semua tingkat patch secara terpisah. Kunci dapat
digunakan jika semua info versi cocok dengan nilai yang terkait dengan kunci. Jika
versi perangkat saat ini lebih baru dari 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 dengan level patch saat ini (dan
Keystore kemudian menghapus keyblob sebelumnya dengan panggilan
ke IKeyMintDevice::deleteKey()
).