קישור לגרסה

כל המפתחות של KeyMint חייבים להיות קשורים לשורש האמון של המכשיר. שורש האמון הוא מחרוזת סיביות שנגזרת מהמפתח הציבורי שמשמש לאימות החתימה של קובץ האימג' לאתחול, יחד עם מצב הנעילה של מנהל האתחול.

מפתחות KeyMint חייבים להיות מקושרים גם לגרסת מערכת ההפעלה ולרמת התיקון של המכשיר. כדי לתמוך במבנה המודולרי של Treble, קישור הגרסה הזה כולל רמות תיקון נפרדות לכל מחיצה (boot,‏ system ו-vendor). כך אפשר לעדכן כל מחיצה בנפרד, ועדיין לספק הגנה מפני חזרה לגרסה קודמת.

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

  • מכשירים עם אתחול מאומת של Android‏ (AVB):
    • אפשר לכלול את רמות התיקון ואת גרסת מערכת ההפעלה ב-vbmeta.img, כדי שתוכנת האתחול תוכל לספק אותן ל-KeyMint.
    • במחיצות משורשרות, פרטי הגרסה של המחיצה נמצאים ב-VBMeta המשורשר.
    • באופן כללי, פרטי הגרסה צריכים להיות ב-VBMeta struct שמכיל את נתוני האימות (hash או hashtree) של מחיצה נתונה.
  • מכשירים בלי AVB:
    • הטמעות של אתחול מאומת צריכות לספק ל-bootloader גיבוב (hash) של המטא-נתונים של הגרסה, כדי שה-bootloader יוכל לספק את הגיבוב ל-KeyMint.
    • ‫boot.img יכול להמשיך לאחסן רמות תיקון בכותרת.
    • ‫system.img יכול להמשיך לאחסן רמות תיקונים וגרסאות של מערכת ההפעלה במאפיינים לקריאה בלבד.
    • ‫vendor.img שומר את רמת התיקון במאפיין לקריאה בלבד ro.vendor.build.version.security_patch.
    • תוכנת האתחול יכולה לספק ל-KeyMint גיבוב (hash) של כל הנתונים שאומתו על ידי "אתחול מאומת".

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

הטמעות של KeyMint צריכות להתייחס לכל רמות התיקונים בנפרד. אפשר להשתמש במפתחות אם כל פרטי הגרסה תואמים לערכים שמשויכים למפתח. אם גרסת המכשיר הנוכחית עדכנית יותר מכל ערך שמשויך למפתח, KeyMint מחזירה את השגיאה KEY_REQUIRES_UPGRADE בכל ניסיון להשתמש במפתח. לאחר מכן, מערכת Keystore מבצעת את הפעולה IKeyMintDevice::upgradeKey כדי ליצור keyblob חדש שקשור לרמות התיקונים הנוכחיות (ואז מערכת Keystore מוחקת את ה-keyblob הקודם באמצעות קריאה ל-IKeyMintDevice::deleteKey).