פרטי גרסה בנכסי AVB

כדי לתמוך בגרסה של Keymaster מקושר, תוכנת האתחול של המכשיר צפויה לספק את גרסת מערכת ההפעלה (OS) ואת רמת תיקון האבטחה של כל מחיצה. גרסת מערכת ההפעלה ואבטחה רמת התיקון היא שני צמדי מפתח/ערך נפרדים בפונקציה AVB נכסים דיגיטליים. לדוגמה:

  • com.android.build.system.os_version -> '12'
  • com.android.build.system.security_patch -> '2022-02-05'
  • com.android.build.vendor.os_version -> '12'
  • com.android.build.vendor.security_patch -> '2022-02-05'
  • com.android.build.boot.os_version -> '12'
  • com.android.build.boot.security_patch -> '2022-02-05'

תוכנת האתחול של המכשיר יכולה לקבל את מאפייני ה-AVB האלה מתמונת vbmeta באמצעות avb_property_lookup(). כדי לטעון כמה תמונות vbmeta, avb_slot_verify() ומאוחסנים במסגרת AvbSlotVerifyData** out_data פרמטר של פלט.

פורמט ברירת המחדל של פרטי הגרסה

כברירת מחדל, מערכת ההפעלה Android משתמשת בפורמט הבא עבור מערכת ההפעלה. ואת תיקון האבטחה בהתאמה.

הפורמט של com.android.build.${partition}.os_version הוא A[.B.C], לדוגמה, 12 או 12.0.0:

  • א: הגרסה הראשית
  • ב: הגרסה המשנית, ברירת המחדל היא אפס כשהיא חסרה
  • ג: גרסת משנה משנית, ברירת המחדל היא אפס כשהיא חסרה

הפורמט של com.android.build.${partition}.security_patch הוא YYYY-MM-DD.

כברירת מחדל מערכת ה-build יוצרת com.android.build.${partition}.security_patch עבור system, system_ext ו-product מחיצות. יצרן המכשיר הוא המערכת צפויה להגדיר את BOOT_SECURITY_PATCH, VENDOR_SECURITY_PATCH ועוד תיקונים למחיצות שאינן של מערכת. לדוגמה:

  • BOOT_SECURITY_PATCH := 2022-01-05 יוצר
    • com.android.build.boot.security_patch -> '2022-01-05'
  • VENDOR_SECURITY_PATCH := 2022-02-05 יוצר
    • com.android.build.vendor.security_patch -> '2022-02-05'

יצרן המכשיר יכול להגדיר את *_SECURITY_PATCH לערך $(PLATFORM_SECURITY_PATCH) אם הוא תמיד מעדכן את כל המחיצות לגרסה עם אותה רמת אבטחה רמת התיקון.

  • BOOT_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)
  • VENDOR_SECURITY_PATCH := $(PLATFORM_SECURITY_PATCH)

ציון פרטי גרסה מותאמים אישית

החל מ-Android 13, בכל גרסת build של מכשיר יכול להיות ערך מותאם אישית לגרסת מערכת ההפעלה שתוכנת האתחול של המכשיר יכולה לזהות. לדוגמה:

  • SYSTEM_OS_VERSION := 12.0.0 יוצר
    • com.android.build.system.os_version -> '12.0.0'
  • BOOT_OS_VERSION := a.b.c יוצר
    • com.android.build.boot.os_version -> 'a.b.c'
  • VENDOR_OS_VERSION := 12.0.1 יוצר
    • com.android.build.vendor.os_version -> '12.0.1'

פרטי הגרסה המיושנת בכותרת של תמונת האתחול

החל מ-Android 9, Keymaster קישור גרסאות מציע להסיר את os_version מהכותרת boot.img.

לשם השוואה, שימוש מיושן בקבלת פרטי הגרסה מ וגם מתוארת כאן הכותרת. שימו לב os_version בכותרת האתחול משלב את גרסת מערכת ההפעלה ורמת תיקון האבטחה מספר שלם לא חתום בגודל 32 סיביות. המנגנון הזה מניח שכל התמונות מיושנת לאחר מודולריזציה של מחיצות Project Treble

// Operating system version and security patch level.
// For version "A.B.C" and patch level "Y-M-D":
//   (7 bits for each of A, B, C; 7 bits for (Y-2000), 4 bits for M)
//   A = os_version[31:25]
//   B = os_version[24:18]
//   C = os_version[17:11]
//   Y = 2000 + os_version[10:4]
//   M = os-version[3:0]

uint32_t os_version;