Sürüm bağlama

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.
  • 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ülkler
    • vendor.img, yama düzeyini salt okunur ro.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:

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).