Device Identifier Composition Engine (DICE) için SDV Profili, Android Profile for DICE'ın bir uzantısıdır. SDV'de bir sanal makine iki paralel DICE zinciri kullanır:
- Güvenli Dünya DICE zinciri
- Android SDV DICE zinciri
DICE için Android profilinin yapılandırma tanımlayıcısındaki bu alanlar, aşağıdaki zincirlerin her biriyle alakalıdır:
| Ad | Anahtar | Tür | Açıklama |
|---|---|---|---|
| Bileşen adı < | -70002
|
tstr
|
Her bir CDI katmanında önerilir. Bileşen adı, bir araçta veya araç platformunda Android SDV VM'lerini çalıştıran tüm DICE donanım zincirleri arasındaki aşamayı net bir şekilde tanımlar. |
| Güvenlik sürümü <0x0A | -70005
|
uint
|
Her CDI aşamasında zorunludur. Güvenli olmayan uzak VM sürümlerinin SDV güvenli ağına katılmasını engelleyen bir DICE politikası tanımlanmasını sağlar. |
| Bileşen Örneği Adı <0 | -70007
|
tstr
|
İlk sanal makineye özel CDI katmanında zorunludur. Örneğin, Android SDV DICE zinciri için hipervizörden sonra. SDV örneğinin adı. Birden fazla CDI katmanı bileşen örneği adını içeriyorsa her katman aynı değere sahip olmalıdır. |
Güvenli Dünya DICE zinciri
Secure World DICE zinciri, Android'in Uzaktan Anahtar Sağlama
(RKP) sunucusunun Android cihazlardan aldığı zincirle aynıdır. IRemotelyProvisionedComponent HAL'leri generateCertificateRequestV2() bu DICE zincirini Android'e sunar.
Bu tabloda örnek bir Secure World DICE zinciri gösterilmektedir:
| Başlatma aşaması | DICE CDI katmanı | Veren |
|---|---|---|
| Birincil bootloader | CDI[0] |
UDS |
| İkincil bootloader | CDI[1] |
Birincil bootloader |
| TEE önyüklemesi | CDI[2] |
İkincil bootloader |
| KeyMint TA başlatma | CDI[3] (Yaprak) |
TEE |
KeyMint güvenilir uygulamasını (TA) uygulamak için aşağıdaki seçeneklerden birini kullanın:
- Tüm SDV VM'leri için tek bir KeyMint örneği: Tüm VM'ler için tek bir CDI belirlemeniz ZORUNLUDUR.
veya
- Her SDV VM'si için bir KeyMint örneği: Her VM için farklı bir CDI değeri belirlemeniz ZORUNLUDUR. Bireysel CDI değerleri, VM'nin bileşen örneği adıyla eşleşen bir bileşen örneği adı içermelidir.
Android SDV DICE zinciri
Android SDV DICE zinciri, hipervizör üzerinden SDV sanal makinelerinde çalışan Android üst düzey işletim sistemine (HLOS) giden başlatma yolunda çalışan yazılımı onaylar.
Bu tabloda örnek bir Android SDV DICE zinciri gösterilmektedir:
| Başlatma aşaması | DICE CDI katmanı | Veren |
|---|---|---|
| Birincil bootloader | CDI[0] |
UDS |
| İkincil bootloader | CDI[1] |
Birincil bootloader |
| Hipervizör | CDI[2] |
İkincil bootloader |
| Android HLOS | CDI[3] (Yaprak)
|
(Android yükleyici) Hipervizör1 |
1 Hipervizör, konukta Android bootloader'ı katman olarak sertifikalandırır. Android bootloader, Android HLOS'yi onaylar.
Android HLOS CDI Sertifikası
Android Bootloader (veya Android bootloader yoksa ancak sanal makineyi Hypervisor'da yükleyen bir Android "yükleyici" programı varsa Hypervisor), Android HLOS CDI sertifikasını imzalar ve Android HLOS'u kapsar. Örneğin, Android Bootloader'ın Android Verified Boot (AVB)'a göre doğruladığı tüm kodları kapsar.
Android HLOS CDI sertifikası, Android OS'in güvenlik açıklarını azaltan SDV'ye özgü değerlerini içermelidir. Örneğin, bilinen güvenlik açıkları olan sanal makinelerin SDV Secure Mesh'ten yasaklanmasıyla olası gizli sızıntı. AVB doğrulaması bu değerlerin çoğunu sağlar.
Ayrıca, sertifikanın SecureWorld DICE zincirinin yaprak CDI'si tarafından imzalandığı ve temel Android'de anahtar ve kimlik onayı gibi özellikleri etkinleştirmek için DeviceInfo'da Android'e iletildiği TEE'deki KeyMint'e de teslim edilir.
Code input ve codeHash sertifika alanları
VBMeta özeti (Android bootloader'ın AVB doğrulaması için gerçekleştirdiği bir çıkış) Android HLOS'un yazılımını kapsar. Bu nedenle, CDI sırlarını türetmek için android-dice-input-values olarak görev yapar ve CDI sertifikasının dice-cert-fields alanına girer.
AVB için önerilen karma algoritması SHA-256'dır. Bu algoritma, 32 bayt uzunluğunda bir VBMeta özetiyle sonuçlanır. DICE için Açık Profil'in aksine, DICE için Android Profili, DICE akışı için 32 bayt uzunluğunda android-dice-hash-algos kullanılmasına ve DICE sertifikasına codeHash olarak aynı 32 bayt uzunluğundaki değerin yerleştirilmesine olanak tanır.android-dice-input-values
Yapılandırma tanımlayıcısı: DICE için Android profilindeki alanlar
Tüm CDI katmanları için açıklananların ötesinde, aşağıdaki özellikler geçerlidir: DICE için Android Profilindeki Yapılandırma tanımlayıcı alanları:
| Ad | Anahtar | Tür | Açıklama |
|---|---|---|---|
| Bileşen sürümü | -70003
|
int
|
AVB version-info-avb'deki sistem OS sürümü. Ayrıca android.os.Build.VERSION.release ile aynıdır. |
| Güvenlik sürümü | -70005
|
uint
|
system bölümünün YYYYMMDD biçimindeki güvenlik yaması seviyesi. |
| RKP VM işaretçisi | -70006
|
null
|
RKP VM işaretçisi, Uzak Anahtar Temel Hazırlığı'nın Android SDV DICE zinciri için sertifika vermesini engeller. |
RKP VM işaretçisi, Android SDV DICE zincirinin Secure World DICE zinciriyle ortak olmayan ilk CDI sertifikasında görünmelidir. Ayrıca, RKP sunucusunun rkp-avf-support DICE zincirini bir RKP VM'den geliyormuş gibi değerlendirmesini önlemek için başka CDI sertifikalarında görünmemelidir.
Yapılandırma tanımlayıcısı: yeni alanlar
Android HLOS CDI sertifikasının yapılandırma tanımlayıcısı, DICE için Android Profilinde açıklananların ötesinde SDV'ye özel değerler içermelidir. DICE için SDV Profili, bu amaçla [-71000, -71999] anahtar değeri aralığını ayırır. Ayrılmış aralığın dışındaki anahtar değerlerini kullanarak uygulamaya özel alanlar ekleyebilirsiniz. SDV'ye özel değerler şunlardır:
| Ad | Anahtar | Tür | Açıklama |
|---|---|---|---|
| Doğrulanmış başlatma durumu | -71000
|
tstr
|
green, yellow veya orange.
|
| build fingerprint | -71001
|
tstr
|
Bu derlemeyi benzersiz şekilde tanımlayan, kullanıcıların okuyabileceği dize. ro.build.fingerprint ile aynıdır. Bu, Android
CDD, 3.2.2 Derleme Parametreleri,
cdd-3-2-2 bölümünde tanımlanır.
VBMeta bunu, com.android.build.system.fingerprint adlı özellik olarak depolar. |
system_ext
security
patch level |
-71002
|
uint
|
YYYYMMDD biçimindeki system_ext bölümünün güvenlik yaması seviyesi. |
product
security
patch level |
-71003
|
uint
|
YYYYMMDD biçimindeki product bölümünün güvenlik yaması seviyesi. |
vendor
security
patch level |
-71004
|
uint
|
YYYYMMDD biçimindeki vendor bölümünün güvenlik yaması seviyesi. |
boot
security
patch level |
-71005
|
uint
|
boot
bölümünün (Linux çekirdeğini içerir) YYYYMMDD biçimindeki güvenlik yaması seviyesi. |
| SDV önyükleme modu | -71006
|
tstr
|
locked veya unlocked. Daha fazla bilgi edinmek için Mesh Durumu ve Sağlama başlıklı makaleyi inceleyin. |
Android HLOS CDI'nin mod giriş değeri seçimi
Android HLOS CDI sertifikasının android-dice-mode bölümünde aşağıdaki tanım kullanılır:
| AVB UNLOCKED | AVB KİLİTLENDİ | |
|---|---|---|
| SDV başlatma modu KİLİDİ AÇIK | Hata ayıkla | Hata ayıkla |
| SDV başlatma modu KİLİTLENDİ | Yapılandırılmamış (geçersiz) | Normal |
Anahtar türetme işlevi
Android HLOS CDI için CDI_Attest sırrından ortak ve özel anahtar çiftini türeten android-dice-kdf, karma işlevi olarak SHA512 ile HKDF olmalıdır.