Tüm KeyMint anahtarları, cihaz için bir güven köküne bağlı olmalıdır. Güven kökü, önyükleme görüntüsünün imzasını doğrulamak için kullanılan ortak anahtardan ve önyükleme kilidi durumundan türetilen bir bit dizesidir.
KeyMint anahtarları, cihazın işletim sistemi sürümüne ve yama düzeyine bağlı olmalıdır. Treble'ın modüler yapısını desteklemek için bu sürüm bağlaması, her bölüm (boot
, system
ve vendor
) için ayrı düzeltme düzeyleri içerir. Bu sayede, geri alma koruması sağlarken her bölümün bağımsız olarak güncellenmesine olanak tanır.
Bu sürüm bağlamayı uygulamak için KeyMint güvenilir uygulamasının (TA), mevcut işletim sistemi sürümünü ve yama düzeylerini güvenli bir şekilde almasının ve aldığı bilgilerin, çalışan sistemle ilgili tüm bilgilerle eşleştiğinden emin olmasının bir yolu olmalıdır.
- Android Doğrulanmış Başlatma (AVB) özelliğine sahip cihazlar:
- Önyükleyicinin KeyMint'e sağlayabilmesi için yama seviyeleri ve işletim sistemi sürümü
vbmeta.img
'ye eklenebilir. - Zincirlenmiş bölümlerde, bölümün sürüm bilgileri zincirlenmiş VBMeta'da bulunur.
- Genel olarak sürüm bilgileri, belirli bir bölüme ait doğrulama verilerini (karma oluşturma veya karma ağacı) içeren
VBMeta struct
bölümünde olmalıdır.
- Önyükleyicinin KeyMint'e sağlayabilmesi için yama seviyeleri ve işletim sistemi sürümü
- AVB'nin olmadığı cihazlar:
- Doğrulanmış Başlatma uygulamalarının, bootloader'ın KeyMint'e sağlayabilmesi için bootloader'a sürüm meta verilerinin karmasını sağlaması gerekir.
boot.img
, başlıktaki yama düzeylerini depolamaya devam edebilir.system.img
, düzeltme düzeylerini ve işletim sistemi sürümünü salt okunur mülklervendor.img
, yama düzeyini salt okunurro.vendor.build.version.security_patch
mülkünde depolar.- Önyükleyici, Doğrulanmış Önyükleme tarafından doğrulanan tüm verilerin karmasını KeyMint'e sağlayabilir.
Aşağıdaki etiketler, ilgili bölümlerin sürüm bilgilerini açıklar:
Tag::VENDOR_PATCHLEVEL
:vendor
bölümTag::BOOT_PATCHLEVEL
:boot
bölümüTag::OS_PATCHLEVEL
veOS_VERSION
:system
bölümü. (OS_VERSION
,boot.img
üstbilgisinde kaldırılır.)
KeyMint uygulamaları tüm yamalar düzeylerini bağımsız olarak ele almalıdır. Tüm sürüm bilgileri bir anahtarla ilişkili değerlerle eşleşiyorsa anahtarlar kullanılabilir. Mevcut cihaz sürümü, bir anahtarla ilişkili tüm değerlerden daha yeniyse KeyMint, anahtarı kullanmaya yönelik tüm girişimlerde KEY_REQUIRES_UPGRADE
hatası döndürür. Ardından Keystore, mevcut yama seviyelerine bağlı yeni bir keyblob oluşturmak için IKeyMintDevice::upgradeKey()
işlemini gerçekleştirir (ve ardından Keystore, IKeyMintDevice::deleteKey()
çağrısıyla önceki keyblob'u siler).