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 structyang berisi data verifikasi (hash atau hashtree) untuk partisi tertentu.
- Tingkat patch dan versi OS
dapat disertakan
di
- Perangkat tanpa AVB:
- Implementasi Booting Terverifikasi perlu memberikan hash metadata versi ke bootloader, sehingga bootloader dapat memberikan hash ke KeyMint.
boot.imgdapat terus menyimpan level patch di header.system.imgdapat terus menyimpan level patch dan versi OS dalam properti hanya baca.vendor.imgmenyimpan level 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: partisivendorTag::BOOT_PATCHLEVEL: partisibootTag::OS_PATCHLEVELdanTag::OS_VERSION: Partisisystem;Tag::OS_VERSIONdihapus dari headerboot.img
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).