אימות זוגות של מפתחות שמגובים באמצעות חומרה באמצעות אימות (attestation) של מפתחות

אימות מפתחות מאפשר לכם להיות בטוחים יותר שהמפתחות שבהם אתם משתמשים באפליקציה מאוחסנים במאגר המפתחות המאובטח בחומרה של המכשיר. בקטעים הבאים מוסבר איך לאמת את המאפיינים של מפתחות שמגובים בחומרה ואיך לפרש את נתוני התוסף של אישורי האימות.

הערה: לפני שמאמתים את המאפיינים של מפתחות של מכשירים שמגובים בחומרה בסביבה ברמת הייצור, צריך לוודא שהמכשיר תומך באימות (attestation) למפתחות ברמת החומרה. כדי לעשות זאת, צריך לוודא ששרשרת אישורי האימות מכילה אישור ברמה הבסיסית (root) שחתום עם מפתח הבסיס לאימות (root) של האימות של Google, ושהרכיב attestationSecurityLevel במבנה הנתונים של תיאור המפתח מוגדר לרמת האבטחה TrustedEnvironment או לרמת האבטחה StrongBox.

בנוסף, חשוב לאמת את החתימות בשרשרת האישורים ולוודא שאף אחד מהמפתחות בשרשרת לא בוטל, על ידי בדיקה של רשימת הסטטוסים של ביטול אישורים. אם לא כל המפתחות תקינים והמפתח ברמה הבסיסית הוא מפתח הבסיס של Google, אל תסמכו על האימות במלואו. עם זאת, חשוב לזכור שמכשירים שמכילים אישורים שבוטלו עדיין מהימנים לפחות כמו מכשירים שתומכים רק באימות תוכנה. אימות (attestation) תקין הוא מדד חיובי חזק. היעדר קוד כזה הוא אינדיקטור ניטרלי, ולא שלילי.

אחזור ואימות של צמד מפתחות מגובה בחומרה

במהלך אימות המפתחות מציינים את הכינוי של זוג מפתחות ומאחזרים את שרשרת האישורים שלו, ומשתמשים בה כדי לאמת את המאפיינים של אותו זוג מפתחות.

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

הערה: במכשירים שכוללים אימות מפתחות ברמת החומרה, Android 7.0 (רמת API‏ 24) ואילך ו-Google Play Services, האימות של אישור הבסיס מתבצע באמצעות מפתח הבסיס של Google לאימות. מוודאים שאישור הבסיס הזה נכלל ברשימה שמופיעה בקטע אישורי בסיס.

כדי להטמיע אימות מפתחות, מבצעים את השלבים הבאים:

  1. משתמשים ב-method getCertificateChain() של אובייקט KeyStore כדי לקבל הפניה לשרשרת אישורי X.509 שמשויכים למאגר המפתחות שמגובה בחומרה.
  2. שולחים את האישורים לשרת נפרד שאתם סומכים עליו לצורך אימות.

    זהירות: אל תשלימו את תהליך האימות הבא באותו מכשיר שבו נמצא KeyStore. אם מערכת Android במכשיר הזה נפרצה, יכול להיות שתהליך האימות יתבסס על משהו לא מהימן.

  3. מקבלים הפניה לספריית הניתוח והאימות של שרשרת האישורים X.509 שהכי מתאימה לערכת הכלים שלכם. מוודאים שהאישור הציבורי ברמה הבסיסית (root) מהימן ושכל אישור חותם על האישור הבא בשרשרת.

  4. צריך לבדוק את סטטוס הביטול של כל אישור כדי לוודא שאף אחד מהאישורים לא בוטל.

  5. אפשר גם לבדוק את התוסף של אישור פרטי ההקצאה, שנמצא רק בשרשורי אישורים חדשים יותר.

    קבלת הפניה לספריית המנתחים של CBOR המתאימה ביותר לערכת הכלים שלכם. מחפשים את האישור הקרוב ביותר ל-root שמכיל את התוסף של אישור פרטי ההקצאה. משתמשים בניתוח כדי לחלץ מהאישור את נתוני התוסף של אישור פרטי ההקצאה.

    לפרטים נוספים, אפשר לעיין בקטע סכימת נתונים של תוספי מידע על ניהול הקצאות.

  6. מקבלים הפניה לספריית הניתוח של ASN.1 שמתאימה ביותר לערכת הכלים שלכם. מחפשים את האישור הקרוב ביותר ל-root שמכיל את התוסף של אישור האימות של המפתח. אם התוסף של אישור פרטי ההקצאה היה נוכח, התוסף של אישור האימות של המפתח חייב להיות באישור הבא. אפשר להשתמש במנתח כדי לחלץ את נתוני תוסף אישור האימות של המפתח מהאישור הזה.

    זהירות: אל תניחו שתוסף האישור של אימות המפתח נמצא באישור העלה של השרשרת. רק המופע הראשון של התוסף בשרשרת יכול להיות מהימן. כל המופעים הנוספים של התוסף לא הונפק על ידי החומרה המאובטחת, ויכול להיות שהם הונפק על ידי תוקף שהרחיב את השרשרת במהלך ניסיון ליצור אימותים מזויפים למפתחות לא מהימנים.

    בדוגמה לאימות מפתחות נעשה שימוש בניתוח ASN.1 מ-Bouncy Castle כדי לחלץ את נתוני התוסף של אישור האימות. אפשר להשתמש בדוגמה הזו כמקור מידע ליצירת מנתח משלכם.

    פרטים נוספים זמינים בקטע סכימה של נתוני התוסף לאימות מפתחות.

  7. בודקים את נתוני התוסף שאתם אוספים בשלבים הקודמים כדי לוודא שהם עקביים, ומשווים אותם לקבוצת הערכים שאתם מצפים שהמפתח המאובטח בחומרה יכיל.

אישורי בסיס

מהימנות האימות תלויה באישור הבסיס של השרשרת. במכשירי Android שעברו את הבדיקות שנדרשות לקבלת חבילת האפליקציות של Google, כולל Google Play, שהושקה עם Android 7.0 (API ברמה 24) ואילך, צריך להשתמש במפתחות אימות (attestation) חתומים על ידי אישור הבסיס של אימות החומרה של Google. שימו לב שהאימות לא היה נדרש עד Android 8.0 (רמת API 26). המפתח הציבורי של הבסיס הוא:

  -----BEGIN PUBLIC KEY-----
  MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xU
  FmOr75gvMsd/dTEDDJdSSxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5j
  lRfdnJLmN0pTy/4lj4/7tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y
  //0rb+T+W8a9nsNL/ggjnar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73X
  pXyTqRxB/M0n1n/W9nGqC4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYI
  mQQcHtGl/m00QLVWutHQoVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB
  +TxywElgS70vE0XmLD+OJtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7q
  uvmag8jfPioyKvxnK/EgsTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgp
  Zrt3i5MIlCaY504LzSRiigHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7
  gLiMm0jhO2B6tUXHI/+MRPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82
  ixPvZtXQpUpuL12ab+9EaDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+
  NpUFgNPN9PvQi8WEg5UmAGMCAwEAAQ==
  -----END PUBLIC KEY-----
אישורי Root שהונפקו בעבר
    -----BEGIN CERTIFICATE-----
    MIIFYDCCA0igAwIBAgIJAOj6GWMU0voYMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTYwNTI2MTYyODUyWhcNMjYwNTI0MTYy
    ODUyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaOBpjCBozAdBgNVHQ4EFgQUNmHhAHyIBQlRi0RsR/8aTMnqTxIwHwYD
    VR0jBBgwFoAUNmHhAHyIBQlRi0RsR/8aTMnqTxIwDwYDVR0TAQH/BAUwAwEB/zAO
    BgNVHQ8BAf8EBAMCAYYwQAYDVR0fBDkwNzA1oDOgMYYvaHR0cHM6Ly9hbmRyb2lk
    Lmdvb2dsZWFwaXMuY29tL2F0dGVzdGF0aW9uL2NybC8wDQYJKoZIhvcNAQELBQAD
    ggIBACDIw41L3KlXG0aMiS//cqrG+EShHUGo8HNsw30W1kJtjn6UBwRM6jnmiwfB
    Pb8VA91chb2vssAtX2zbTvqBJ9+LBPGCdw/E53Rbf86qhxKaiAHOjpvAy5Y3m00m
    qC0w/Zwvju1twb4vhLaJ5NkUJYsUS7rmJKHHBnETLi8GFqiEsqTWpG/6ibYCv7rY
    DBJDcR9W62BW9jfIoBQcxUCUJouMPH25lLNcDc1ssqvC2v7iUgI9LeoM1sNovqPm
    QUiG9rHli1vXxzCyaMTjwftkJLkf6724DFhuKug2jITV0QkXvaJWF4nUaHOTNA4u
    JU9WDvZLI1j83A+/xnAJUucIv/zGJ1AMH2boHqF8CY16LpsYgBt6tKxxWH00XcyD
    CdW2KlBCeqbQPcsFmWyWugxdcekhYsAWyoSf818NUsZdBWBaR/OukXrNLfkQ79Iy
    ZohZbvabO/X+MVT3rriAoKc8oE2Uws6DF+60PV7/WIPjNvXySdqspImSN78mflxD
    qwLqRBYkA3I75qppLGG9rp7UCdRjxMl8ZDBld+7yvHVgt1cVzJx9xnyGCC23Uaic
    MDSXYrB4I4WHXPGjxhZuCuPBLTdOLU8YRvMYdEvYebWHMpvwGCF6bAx3JBpIeOQ1
    wDB5y0USicV3YgYGmi+NZfhA4URSh77Yd6uuJOJENRaNVTzk
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJANUP8luj8tazMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMTkxMTIyMjAzNzU4WhcNMzQxMTE4MjAz
    NzU4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBOMaBc8oumXb2voc7XCWnu
    XKhBBK3e2KMGz39t7lA3XXRe2ZLLAkLM5y3J7tURkf5a1SutfdOyXAmeE6SRo83U
    h6WszodmMkxK5GM4JGrnt4pBisu5igXEydaW7qq2CdC6DOGjG+mEkN8/TA6p3cno
    L/sPyz6evdjLlSeJ8rFBH6xWyIZCbrcpYEJzXaUOEaxxXxgYz5/cTiVKN2M1G2ok
    QBUIYSY6bjEL4aUN5cfo7ogP3UvliEo3Eo0YgwuzR2v0KR6C1cZqZJSTnghIC/vA
    D32KdNQ+c3N+vl2OTsUVMC1GiWkngNx1OO1+kXW+YTnnTUOtOIswUP/Vqd5SYgAI
    mMAfY8U9/iIgkQj6T2W6FsScy94IN9fFhE1UtzmLoBIuUFsVXJMTz+Jucth+IqoW
    Fua9v1R93/k98p41pjtFX+H8DslVgfP097vju4KDlqN64xV1grw3ZLl4CiOe/A91
    oeLm2UHOq6wn3esB4r2EIQKb6jTVGu5sYCcdWpXr0AUVqcABPdgL+H7qJguBw09o
    jm6xNIrw2OocrDKsudk/okr/AwqEyPKw9WnMlQgLIKw1rODG2NvU9oR3GVGdMkUB
    ZutL8VuFkERQGt6vQ2OCw0sV47VMkuYbacK/xyZFiRcrPJPb41zgbQj9XAEyLKCH
    ex0SdDrx+tWUDqG8At2JHA==
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJAMNrfES5rhgxMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjExMTE3MjMxMDQyWhcNMzYxMTEzMjMx
    MDQyWjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQBTNNZe5cuf8oiq+jV0itTG
    zWVhSTjOBEk2FQvh11J3o3lna0o7rd8RFHnN00q4hi6TapFhh4qaw/iG6Xg+xOan
    63niLWIC5GOPFgPeYXM9+nBb3zZzC8ABypYuCusWCmt6Tn3+Pjbz3MTVhRGXuT/T
    QH4KGFY4PhvzAyXwdjTOCXID+aHud4RLcSySr0Fq/L+R8TWalvM1wJJPhyRjqRCJ
    erGtfBagiALzvhnmY7U1qFcS0NCnKjoO7oFedKdWlZz0YAfu3aGCJd4KHT0MsGiL
    Zez9WP81xYSrKMNEsDK+zK5fVzw6jA7cxmpXcARTnmAuGUeI7VVDhDzKeVOctf3a
    0qQLwC+d0+xrETZ4r2fRGNw2YEs2W8Qj6oDcfPvq9JySe7pJ6wcHnl5EZ0lwc4xH
    7Y4Dx9RA1JlfooLMw3tOdJZH0enxPXaydfAD3YifeZpFaUzicHeLzVJLt9dvGB0b
    HQLE4+EqKFgOZv2EoP686DQqbVS1u+9k0p2xbMA105TBIk7npraa8VM0fnrRKi7w
    lZKwdH+aNAyhbXRW9xsnODJ+g8eF452zvbiKKngEKirK5LGieoXBX7tZ9D1GNBH2
    Ob3bKOwwIWdEFle/YF/h6zWgdeoaNGDqVBrLr2+0DtWoiB1aDEjLWl9FmyIUyUm7
    mD/vFDkzF+wm7cyWpQpCVQ==
    -----END CERTIFICATE-----
  
    -----BEGIN CERTIFICATE-----
    MIIFHDCCAwSgAwIBAgIJAPHBcqaZ6vUdMA0GCSqGSIb3DQEBCwUAMBsxGTAXBgNV
    BAUTEGY5MjAwOWU4NTNiNmIwNDUwHhcNMjIwMzIwMTgwNzQ4WhcNNDIwMzE1MTgw
    NzQ4WjAbMRkwFwYDVQQFExBmOTIwMDllODUzYjZiMDQ1MIICIjANBgkqhkiG9w0B
    AQEFAAOCAg8AMIICCgKCAgEAr7bHgiuxpwHsK7Qui8xUFmOr75gvMsd/dTEDDJdS
    Sxtf6An7xyqpRR90PL2abxM1dEqlXnf2tqw1Ne4Xwl5jlRfdnJLmN0pTy/4lj4/7
    tv0Sk3iiKkypnEUtR6WfMgH0QZfKHM1+di+y9TFRtv6y//0rb+T+W8a9nsNL/ggj
    nar86461qO0rOs2cXjp3kOG1FEJ5MVmFmBGtnrKpa73XpXyTqRxB/M0n1n/W9nGq
    C4FSYa04T6N5RIZGBN2z2MT5IKGbFlbC8UrW0DxW7AYImQQcHtGl/m00QLVWutHQ
    oVJYnFPlXTcHYvASLu+RhhsbDmxMgJJ0mcDpvsC4PjvB+TxywElgS70vE0XmLD+O
    JtvsBslHZvPBKCOdT0MS+tgSOIfga+z1Z1g7+DVagf7quvmag8jfPioyKvxnK/Eg
    sTUVi2ghzq8wm27ud/mIM7AY2qEORR8Go3TVB4HzWQgpZrt3i5MIlCaY504LzSRi
    igHCzAPlHws+W0rB5N+er5/2pJKnfBSDiCiFAVtCLOZ7gLiMm0jhO2B6tUXHI/+M
    RPjy02i59lINMRRev56GKtcd9qO/0kUJWdZTdA2XoS82ixPvZtXQpUpuL12ab+9E
    aDK8Z4RHJYYfCT3Q5vNAXaiWQ+8PTWm2QgBR/bkwSWc+NpUFgNPN9PvQi8WEg5Um
    AGMCAwEAAaNjMGEwHQYDVR0OBBYEFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMB8GA1Ud
    IwQYMBaAFDZh4QB8iAUJUYtEbEf/GkzJ6k8SMA8GA1UdEwEB/wQFMAMBAf8wDgYD
    VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4ICAQB8cMqTllHc8U+qCrOlg3H7
    174lmaCsbo/bJ0C17JEgMLb4kvrqsXZs01U3mB/qABg/1t5Pd5AORHARs1hhqGIC
    W/nKMav574f9rZN4PC2ZlufGXb7sIdJpGiO9ctRhiLuYuly10JccUZGEHpHSYM2G
    tkgYbZba6lsCPYAAP83cyDV+1aOkTf1RCp/lM0PKvmxYN10RYsK631jrleGdcdkx
    oSK//mSQbgcWnmAEZrzHoF1/0gso1HZgIn0YLzVhLSA/iXCX4QT2h3J5z3znluKG
    1nv8NQdxei2DIIhASWfu804CA96cQKTTlaae2fweqXjdN1/v2nqOhngNyz1361mF
    mr4XmaKH/ItTwOe72NI9ZcwS1lVaCvsIkTDCEXdm9rCNPAY10iTunIHFXRh+7KPz
    lHGewCq/8TOohBRn0/NNfh7uRslOSZ/xKbN9tMBtw37Z8d2vvnXq/YWdsm1+JLVw
    n6yYD/yacNJBlwpddla8eaVMjsF6nBnIgQOf9zKSe06nSTqvgwUHosgOECZJZ1Eu
    zbH4yswbt02tKtKEFhx+v+OTge/06V+jGsqTWLsfrOCNLuA8H++z+pUENmpqnnHo
    vaI47gC+TNpkgYGkkBT6B/m/U01BuOBBTzhIlMEZq9qkDWuM2cA5kW5V3FJUcfHn
    w1IdYIg2Wxg7yHcQZemFQg==
    -----END CERTIFICATE-----
  

אם אישור הבסיס בשרשרת האימות שקיבלת מכיל את המפתח הציבורי הזה ואף אחד מהאישורים בשרשרת לא בוטל, אתם יודעים:

  1. המפתח נמצא בחומרה שלדעת Google היא מאובטחת.
  2. הוא כולל את המאפיינים שמפורטים באישור האימות.

אם יש בשרשרת האימות מפתח ציבורי אחר ברמה הבסיסית, Google לא נותנת הצהרות לגבי האבטחה של החומרה. זה לא אומר שהמפתח שלך נפרץ, רק האימות לא מוכיח שהמפתח נמצא בחומרה מאובטחת. צריך לשנות את ההנחות שלכם לגבי האבטחה בהתאם.

אם אישור הבסיס לא מכיל את המפתח הציבורי בדף הזה, יש לכך שתי סיבות אפשריות:

  • סביר להניח שהמכשיר הושק עם גרסת Android פחות מ-7.0, והוא לא תומך באימות חומרה. במקרה כזה, ב-Android יש הטמעת תוכנה של אימות (attestation), שמייצרת אישור אימות (attestation) דומה, אבל חתומה באמצעות מפתח שמופיע בתוך הקוד בקוד המקור של Android. מכיוון שמפתח החתימה הזה לא סודי, יכול להיות שהאימות נוצר על ידי תוקף שמתחזה לספק חומרה מאובטחת.
  • הסיבה השנייה האפשרית היא שהמכשיר לא מכשיר Google Play. במקרה כזה, יצרן המכשיר יכול ליצור root משלו ולהצהיר על כל מה שהוא רוצה לגבי משמעות האימות. יש לעיין במסמכי התיעוד של יצרן המכשיר. חשוב לשים לב שנכון לעכשיו, Google לא מודעת ליצרני מכשירים שביצעו את הפעולה הזו.

רשימת הסטטוסים של אישורים שבוטלו

אפשר לבטל מפתחות אימות מכמה סיבות, כולל שימוש שגוי או חשד לחילוץ על ידי תוקף. לכן, חשוב מאוד לבדוק את הסטטוס של כל אישור בשרשרת האימות בהתאם לרשימת הסטטוסים הרשמית של אישורים שבוטלו (CRL). Google מנהלת את הרשימה הזו ומפרסמת אותה בכתובת: https://android.googleapis.com/attestation/status. הכותרת Cache-Control בתגובת ה-HTTP קובעת באיזו תדירות צריך לבדוק עדכונים, כך שלא נדרשת בקשת רשת לכל אישור שמאומת. כתובת ה-URL הזו מחזירה קובץ JSON עם סטטוס הביטול של אישורים שאין להם סטטוס תקין רגיל. הפורמט של קובץ ה-JSON עומד בהגדרה הבאה של הסכימה ל-JSON (טיוטה 07):

{
  "$schema": "http://json-schema.org/draft-07/schema#",
  "type": "object",
  "properties": {
    "entries": {
      "description" : "Each entry represents the status of an attestation key. The dictionary-key is the certificate serial number in lowercase hex.",
      "type": "object",
      "propertyNames": {
        "pattern": "^[a-f1-9][a-f0-9]*$"
      },
      "additionalProperties": {
        "type": "object",
        "properties": {
          "status": {
            "description": "[REQUIRED] Current status of the key.",
            "type": "string",
            "enum": ["REVOKED", "SUSPENDED"]
          },
          "expires": {
            "description": "[OPTIONAL] UTC date when certificate expires in ISO8601 format (YYYY-MM-DD). Can be used to clear expired certificates from the status list.",
            "type": "string",
            "format": "date"
          },
          "reason": {
            "description": "[OPTIONAL] Reason for the current status.",
            "type": "string",
            "enum": ["UNSPECIFIED", "KEY_COMPROMISE", "CA_COMPROMISE", "SUPERSEDED", "SOFTWARE_FLAW"]
          },
          "comment": {
            "description": "[OPTIONAL] Free form comment about the key status.",
            "type": "string",
            "maxLength": 140
          }
        },
        "required": ["status"],
        "additionalProperties": false
      }
    }
  },
  "required": ["entries"],
  "additionalProperties": false
}

CRL לדוגמה:

{
  "entries": {
    "2c8cdddfd5e03bfc": {
      "status": "REVOKED",
      "expires": "2020-11-13",
      "reason": "KEY_COMPROMISE",
      "comment": "Key stored on unsecure system"
    },
    "c8966fcb2fbb0d7a": {
      "status": "SUSPENDED",
      "reason": "SOFTWARE_FLAW",
      "comment": "Bug in keystore causes this key malfunction b/555555"
    }
  }
}

הסכימה של נתוני התוסף לאימות מפתחות

למזהה OID של תוסף האימות של המפתחות הוא 1.3.6.1.4.1.11129.2.1.17. התוסף שומר את המידע בהתאם לסכימה של ASN.1.

ברשימה הבאה מופיע תיאור של כל רכיב בתוך הסכימה:

תיאור המפתח

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

attestationVersion
גרסת התכונה של אימות המפתח.
ערךגרסה
1גרסה 2.0 של Keymaster
2גרסה 3.0 של Keymaster
3גרסה 4.0 של Keymaster
4גרסה 4.1 של Keymaster
100גרסה 1.0 של KeyMint
200KeyMint גרסה 2.0
300KeyMint גרסה 3.0
attestationSecurityLevel

רמת האבטחה של האימות (attestation).

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

keymasterVersion מתוך keyMintVersion
גרסת שיטת הפשטת החומרה (HAL) של Keymaster או של KeyMint.
ערךגרסה
0Keymaster גרסה 0.2 או 0.3
1גרסה 1.0 של Keymaster
2גרסה 2.0 של Keymaster
3גרסה 3.0 של Keymaster
4גרסה 4.0 של Keymaster
41גרסה 4.1 של Keymaster
100גרסה 1.0 של KeyMint
200KeyMint גרסה 2.0
300גרסה 3.0 של KeyMint
keymasterSecurityLevel מתוך keyMintSecurityLevel
רמת האבטחה של הטמעת Keymaster/KeyMint.
attestationChallenge
האתגר שסופק בזמן יצירת המפתח. בודקים אם הערך הזה תואם לערך שהשרת סיפק, כפי שהוא מאוחסן בתג ההרשאה Tag::ATTESTATION_CHALLENGE. אחרת, השירות שלכם עלול להיות חשוף להפעלה מחדש של אישורי אימות ישנים.
uniqueId
הערך הזה מזהה את המכשיר – אבל רק לפרק זמן מוגבל. הוא מחושב ומשמשים רק אפליקציות מערכת. בכל האפליקציות האחרות, השדה uniqueId ריק.
softwareEnforced
אופציונלי. רשימת ההרשאות של Keymaster / KeyMint, שאכיפתה מתבצעת על ידי מערכת Android ולא על ידי סביבת המחשוב המהימנה (TEE) של המכשיר. המידע ברשימת ההרשאות הזו נאסף או נוצר על ידי קוד שמהווה חלק מהפלטפורמה, ונשמר במחיצה של המערכת במכשיר. אפשר לסמוך על התוכן של רשימת ההרשאות הזו כל עוד פועלת במכשיר מערכת הפעלה שתואמת למודל האבטחה של פלטפורמת Android. כל מכשירי Android שאושרו תואמים לדגם האבטחה הזה, לכן אם המכשיר נעול ומצב ההפעלה המאומתת הוא Verified, הערכים כאן אמורים להיות מהימנים. במכשיר שעבר שינוי, שבו נעילת האתחול (bootloader) פתוחה, המשתמש יכול להתקין מערכת הפעלה שלא תואמת למודל האבטחה של פלטפורמת Android. לכן, יכול להיות שהמשתמש יבחר את הערכים בשדה הזה באופן שרירותי.
hardwareEnforced
אופציונלי. רשימת ההרשאות של Keymaster/KeyMint, שמופעלת על ידי סביבת המחשוב המאובטחת (TEE) של המכשיר. המידע ברשימת ההרשאות הזו נאסף או נוצר על ידי קוד שמהווה חלק מהחומרה המאובטחת ולא נשלט על ידי הפלטפורמה. לדוגמה, המידע ברשימת ההרשאות מגיע מתוכנת האתחול של המכשיר או מה-TEE שמופעל במכשיר. השדות ברשימת ההרשאות הזו שלא מוגדרים ישירות על ידי KeyMint מסופקים על ידי חלקים אחרים של החומרה המאובטחת (לדוגמה, תוכנת האתחול) דרך ערוצי תקשורת מאובטחים שלא כרוכים באמון בפלטפורמה. ההבדל בין החומרה המאובטחת לבין מערכת Android הוא שהמשתמש לא יכול לשנות את הקוד שפועל בחומרה המאובטחת (קושחת הקצר). לכן, הוא לא יכול לשנות את הערכים ברשימת ההרשאות הזו.

SecurityLevel

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

מאחר שמבנה הנתונים הוא ספירה, הוא יכול לקבל רק אחד מהערכים הבאים:

מאגר מפתחות
הלוגיקה ליצירה ולניהול של התכונה מוטמעת במערכת Android. למטרות יצירה ואחסון של זוגות מפתחות, המיקום הזה פחות מאובטח מ-TEE אבל מאובטח יותר ממרחב התהליכים של האפליקציה.
TrustedEnvironment
הלוגיקת היצירה והניהול של התכונה מיושמת בחומרה מאובטחת, כמו TEE. למטרות יצירת זוגות מפתחות ושמירתם, המיקום הזה מאובטח יותר כי חומרה מאובטחת עמידת מאוד בפני פריצה מרחוק.
StrongBox
הלוגיקת היצירה והניהול של התכונה מיושמת במודול אבטחת חומרה ייעודי. למטרות יצירה ואחסון של זוגות מפתחות, המיקום הזה מאובטח יותר כי הוא עמיד מאוד בפני פריצה מרחוק ותקיפות חומרה על המודול.
תוכנות
הלוגיקת היצירה והניהול של התכונה מיושמת בהטמעה של KeyMint או Keymaster שלא פועלת בסביבה מאובטחת. למטרות יצירה ואחסון של זוגות מפתחות, המיקום הזה פחות מאובטח מאזור TEE, אבל הוא מאובטח יותר ממרחב העיבוד של האפליקציה.

AuthorizationList

מבנה הנתונים הזה מכיל את המאפיינים של זוג המפתחות עצמו, כפי שהם מוגדרים בשכבת ההפשטה של החומרה (HAL) של Keymaster או של KeyMint. כדי לוודא שצמד מפתחות עדיין תקף לשימוש באפליקציה, משווים את הערכים האלה למצב הנוכחי של המכשיר או לקבוצה של ערכים צפויים.

כל שם שדה תואם לתג הרשאה של Keymaster או KeyMint בעל שם דומה. לדוגמה, השדה keySize ברשימת ההרשאות תואם לתג ההרשאה Tag::KEY_SIZE.

מפרט הממשק של AIDL מכיל את המידע המלא על תגי הרשאה. המאפיין הזה מגדיר את ערך המזהה ואת הסוג של כל תג, וגם מציין אם כל תג צפוי להופיע ברשימת ההרשאות hardwareEnforced (המשמעות היא שהתג נאכף בסביבה המאובטחת) או ברשימת ההרשאות softwareEnforced (המשמעות היא שהתג נאכף על ידי Android, בדרך כלל על ידי Keystore).

כל השדות ברשימה הבאה הם אופציונליים:

purpose
תואם לתג ההרשאה Tag::PURPOSE, שבו נעשה שימוש בערך מזהה של תג 1.
algorithm

תואם לתג ההרשאה Tag::ALGORITHM, שבו נעשה שימוש בערך 2 של מזהה התג.

באובייקט האימות AuthorizationList, הערך של האלגוריתם הוא תמיד RSA או EC.

keySize
תואם לתג ההרשאה Tag::KEY_SIZE, שבו נעשה שימוש בערך מזהה תג של 3.
digest
תואם לתג ההרשאה Tag::DIGEST, שבו נעשה שימוש בערך מזהה של תג 5.
padding
תואם לתג ההרשאה Tag::PADDING, שבו נעשה שימוש בערך מזהה תג של 6.
ecCurve

תואם לתג ההרשאה Tag::EC_CURVE, שבו נעשה שימוש בערך 10 למזהה התג.

קבוצת הפרמטרים שמשמשת ליצירת זוג מפתחות של עקומה אליפטית (EC), שמשתמש ב-ECDSA לחתימה ולאימות, בתוך מאגר המפתחות של מערכת Android.

rsaPublicExponent
תואם לתג ההרשאה Tag::RSA_PUBLIC_EXPONENT, שמשתמש בערך מזהה תג של 200.
mgfDigest

הצגה רק בגרסת אימות (attestation) של מפתח >= 100.

תואם לתג ההרשאה Tag::RSA_OAEP_MGF_DIGEST של KeyMint, שמשתמש בערך מזהה תג של 203.
rollbackResistance

הצגה רק בגרסת אימות (attestation) של מפתח >= 3.

תואם לתג ההרשאה Tag::ROLLBACK_RESISTANT, שכולל את ערך מזהה התג 303.

earlyBootOnly

השדה הזה קיים רק בגרסה 4 ואילך של אימות המפתחות.

תואם לתג ההרשאה Tag::EARLY_BOOT_ONLY, שמשתמש בערך מזהה תג של 305.

activeDateTime
תואם לתג ההרשאה Tag::ACTIVE_DATETIME, שמשתמש בערך מזהה תג של 400.
originationExpireDateTime
תואם לתג ההרשאה של Tag::ORIGINATION_EXPIRE_DATETIME Keymaster, שמשתמש בערך מזהה תג של 401.
usageExpireDateTime
תואם לתג ההרשאה Tag::USAGE_EXPIRE_DATETIME, שבו נעשה שימוש בערך מזהה תג של 402.
usageCountLimit
תואם לתג ההרשאה Tag::USAGE_COUNT_LIMIT, שבו נעשה שימוש בערך מזהה התג 405.
noAuthRequired

תואם לתג ההרשאה Tag::NO_AUTH_REQUIRED, שמשתמש בערך מזהה תג של 503.

userAuthType
תואם לתג ההרשאה Tag::USER_AUTH_TYPE, שבו נעשה שימוש בערך מזהה תג של 504.
authTimeout
תואם לתג ההרשאה Tag::AUTH_TIMEOUT, שכולל ערך מזהה התג 505.
allowWhileOnBody

תואם לתג ההרשאה Tag::ALLOW_WHILE_ON_BODY, שמשתמש בערך מזהה תג של 506.

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

trustedUserPresenceRequired

השדה הזה קיים רק בגרסה 3 ואילך של אימות המפתחות.

תואם לתג ההרשאה Tag::TRUSTED_USER_PRESENCE_REQUIRED, שבו נעשה שימוש בערך מזהה תג של 507.

קובעת שאפשר להשתמש במפתח הזה רק אם המשתמש סיפק הוכחה נוכחות פיזית. דוגמאות לכך:

  • למפתח StrongBox, לחצן חומרה שמחובר לחוט למסמר במכשיר StrongBox.
  • במפתח TEE, אימות טביעת אצבע מספק הוכחה לנוכחות כל עוד ל-TEE יש שליטה בלעדית בסורק והוא מבצע את תהליך ההתאמה של טביעת האצבע.
trustedConfirmationRequired

השדה הזה קיים רק בגרסה 3 ואילך של אימות המפתחות.

תואם לתג ההרשאה Tag::TRUSTED_CONFIRMATION_REQUIRED, שבו נעשה שימוש בערך מזהה תג של 508.

מציינת שאפשר להשתמש במפתח רק אם המשתמש מספק אישור לחתימה על הנתונים באמצעות אסימון אישור. למידע נוסף על קבלת אישור מהמשתמשים, ראו אישור מוגן ב-Android.

הערה: התג הזה רלוונטי רק למפתחות שמשתמשים במטרה SIGN.

unlockedDeviceRequired

השדה הזה קיים רק בגרסה 3 ואילך של אימות המפתחות.

תואם לתג ההרשאה Tag::UNLOCKED_DEVICE_REQUIRED, שכולל את ערך מזהה התג 509.

allApplications

תואם לתג ההרשאה Tag::ALL_APPLICATIONS, שמשתמש בערך מזהה תג של 600.

מציין אם כל האפליקציות במכשיר יכולות לגשת לזוג המפתחות.

applicationId
תואם לתג ההרשאה Tag::APPLICATION_ID, שמשתמש בערך של מזהה התג 601.
creationDateTime
תואם לתג ההרשאה Tag::CREATION_DATETIME, שמשתמש בערך מזהה תג של 701.
origin

תואם לתג ההרשאה Tag::ORIGIN, שבו נעשה שימוש בערך מזהה תג של 702.

rollbackResistant

השדה הזה קיים רק בגרסאות 1 ו-2 של אימות המפתחות.

תואם לתג ההרשאה Tag::ROLLBACK_RESISTANT, שמשתמש בערך מזהה תג של 703.

rootOfTrust

תואם לתג ההרשאה Tag::ROOT_OF_TRUST, שמשתמש בערך מזהה תג של 704.

לפרטים נוספים קראו את הקטע שמתאר את מבנה הנתונים RootOfTrust.

osVersion

תואם לתג ההרשאה Tag::OS_VERSION, שמשתמש בערך מזהה תג של 705.

הגרסה של מערכת ההפעלה של Android שמשויכת ל-Keymaster, שצוינה כמספר שלם בן שש ספרות. לדוגמה, הגרסה 8.1.0 מיוצגת כ-080100.

רק גרסה 1.0 ואילך של Keymaster כוללת את הערך הזה ברשימת ההרשאות.

osPatchLevel

תואם לתג ההרשאה Tag::PATCHLEVEL, שמשתמש בערך של מזהה התג 706.

החודש והשנה שמשויכים לתיקון האבטחה שבו נעשה שימוש ב-Keymaster, שצוינו כמספר שלם בן שש ספרות. לדוגמה, התיקון של אוגוסט 2018 מיוצג כ-201808.

רק גרסה 1.0 ואילך של Keymaster כוללת את הערך הזה ברשימת ההרשאות.

attestationApplicationId

השדה הזה קיים רק בגרסאות של אימות מפתחות שמספרן גבוה מ-2.

תואם לתג ההרשאה של Keymaster‏ Tag::ATTESTATION_APPLICATION_ID, שמשתמש בערך מזהה תג של 709.

פרטים נוספים זמינים בקטע שמתאר את מבנה הנתונים של AttestationApplicationId.

attestationIdBrand

השדה הזה קיים רק בגרסאות של אימות מפתחות שמספרן גבוה מ-2.

תואם לתג Keymaster‏ Tag::ATTESTATION_ID_BRAND, שמשתמש בערך מזהה תג של 710.

attestationIdDevice

השדה הזה קיים רק בגרסאות של אימות מפתחות שמספרן גבוה מ-2.

תואם לתג Keymaster‏ Tag::ATTESTATION_ID_DEVICE, שבו נעשה שימוש בערך מזהה תג של 711.

attestationIdProduct

הצגה רק בגרסאות אימות (attestation) של מפתח >= 2.

תואם לתג Keymaster‏ Tag::ATTESTATION_ID_PRODUCT, שמשתמש בערך מזהה תג של 712.

attestationIdSerial

הצגה רק בגרסאות אימות (attestation) של מפתח >= 2.

תואם לתג Keymaster‏ Tag::ATTESTATION_ID_SERIAL, שמשתמש בערך מזהה תג של 713.

attestationIdImei

הצגה רק בגרסאות אימות (attestation) של מפתח >= 2.

תואם לתג ההרשאה Tag::ATTESTATION_ID_IMEI, שמשתמש בערך מזהה תג של 714.

attestationIdMeid

השדה הזה קיים רק בגרסאות של אימות מפתחות שמספרן גבוה מ-2.

תואם לתג ההרשאה Tag::ATTESTATION_ID_MEID, שמשתמש בערך מזהה תג של 715.

attestationIdManufacturer

הצגה רק בגרסאות אימות (attestation) של מפתח >= 2.

תואם לתג ההרשאה Tag::ATTESTATION_ID_MANUFACTURER, שמשתמש בערך מזהה תג של 716.

attestationIdModel

השדה הזה קיים רק בגרסאות של אימות מפתחות שמספרן גבוה מ-2.

תואם לתג ההרשאה Tag::ATTESTATION_ID_MODEL, שבו נעשה שימוש בערך מזהה תג של 717.

vendorPatchLevel

השדה הזה קיים רק בגרסאות של אימות מפתחות בגרסה 3 ואילך.

תואם לתג ההרשאה Tag::VENDOR_PATCHLEVEL, שמשתמש בערך מזהה תג של 718.

רמת תיקון האבטחה של קובץ האימג' של הספק שצריך להתקין במכשיר כדי שאפשר יהיה להשתמש במפתח הזה. הערך מופיע בפורמט YYYYMMDD, והוא מייצג את התאריך של תיקון האבטחה של הספק. לדוגמה, אם מפתח נוצר במכשיר Android שבו מותקן תיקון האבטחה של הספק מ-1 באוגוסט 2018, הערך הזה יהיה 20180801.

bootPatchLevel

הצגה רק בגרסאות אימות (attestation) של מפתח >= 3.

תואם לתג ההרשאה Tag::BOOT_PATCHLEVEL, שמשתמש בערך מזהה תג של 719.

רמת תיקון האבטחה של קובץ האימג' של הליבה שצריך להתקין במכשיר כדי שאפשר יהיה להשתמש במפתח הזה. הערך מופיע בפורמט YYYYMMDD, ומייצג את התאריך של תיקון האבטחה למערכת. לדוגמה, אם מפתח נוצר במכשיר Android שבו מותקן תיקון האבטחה של המערכת מ-5 באוגוסט 2018, הערך הזה יהיה 20180805.

deviceUniqueAttestation

הצגה רק בגרסאות אימות (attestation) של מפתח >= 4.

תואם לתג ההרשאה Tag::DEVICE_UNIQUE_ATTESTATION, שבו נעשה שימוש בערך מזהה תג של 720.

attestationIdSecondImei

קיים רק בגרסאות אימות (attestation) של מפתח >= 300.

תואם לתג ההרשאה Tag::ATTESTATION_ID_SECOND_IMEI, שכולל את ערך מזהה התג 723.

RootOfTrust

אוסף הערכים הזה מגדיר מידע חשוב על סטטוס המכשיר.

כל השדות ברשימה הבאה הם שדות חובה:

verifiedBootKey

גיבוב מאובטח של המפתח שמאמת את קובץ האימג' של המערכת. מומלץ להשתמש באלגוריתם SHA-256 לגיבוב הזה.

deviceLocked
הערך הוא True אם תוכנת האתחול של המכשיר נעולה, מה שמאפשר בדיקה של 'הפעלה מאומתת' ומונעת הבהוב של תמונת מכשיר לא חתומה למכשיר. מידע נוסף על התכונה הזו זמין במאמר אימות ההפעלה.
verifiedBootState
מצב ההפעלה של המכשיר, בהתאם לתכונה 'הפעלה מאומתת'.
verifiedBootHash

הצגה רק בגרסאות אימות (attestation) של מפתח >= 3.

סיכום של כל הנתונים שמוגנים על ידי Verified Boot. במכשירים שמשתמשים בהטמעה של Android Verified Boot לאתחול מאומת, הערך הזה מכיל את הסיכום של המבנה VBMeta או של מבנה המטא-נתונים של אתחול מאומת.

מידע נוסף על אופן החישוב של הערך הזה זמין במאמר The VBMeta Digest.

VerifiedBootState

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

מבנה הנתונים הזה הוא ספירה, ולכן הוא יכול לקבל רק אחד מהערכים הבאים:

מאומת

מציין שרשרת אמון מלאה, שכוללת את מנהל האתחול, את מחיצת האתחול ואת כל המחיצות המאומתות.

כשהמכשיר נמצא במצב האתחול הזה, הערך של verifiedBootKey הוא הגיבוב של האישור המוטמע במכשיר, שיצרן המכשיר מוסיף ל-ROM של המכשיר במפעל.

חתימה עצמית

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

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

לא מאומת
המשמעות של הערך הזה היא שהמשתמש יכול לשנות את המכשיר באופן חופשי. לכן, המשתמש אחראי לאמת את תקינות המכשיר.
נכשלה
הסמל הזה מציין שהמכשיר נכשל באימות. אסור להשתמש בערך הזה בשום שלב באישור האימות (attestation) עבור VerifiedBootState.

AttestationApplicationId

מבנה הנתונים הזה משקף את האמונה של פלטפורמת Android לגבי האפליקציות שמורשות להשתמש בחומר המפתח הסודי במסגרת אימות (attestation). המזהה יכול לכלול כמה חבילות אם ורק אם כמה חבילות משתפות את אותו מזהה UID. המחרוזת של האוקטטים מוגדרת בפורמט לפי הסכימה הבאה של ASN.1:

AttestationApplicationId ::= SEQUENCE {
    package_infos  SET OF AttestationPackageInfo,
    signature_digests  SET OF OCTET_STRING,
}

AttestationPackageInfo ::= SEQUENCE {
    package_name  OCTET_STRING,
    version  INTEGER,
}
package_infos
קבוצת אובייקטים של AttestationPackageInfo, שבכל אחד מהם מופיע שם החבילה ומספר הגרסה.
חתימות_חתימה

קבוצת תקצירים מסוג SHA-256 של אישורי החתימה של האפליקציה. לאפליקציה יכולות להיות כמה שרשראות אישורים של מפתחות חתימה. לכל אחד מהם, האישור 'עלה' עובר עיכול ומוחזר בשדה signature_digests. שם השדה מטעה, כי הנתונים המסוכמים הם אישורי החתימה של האפליקציה ולא של החתימות של האפליקציה, כי הוא נקרא על שם המחלקה Signature שמוחזרת על ידי קריאה ל-getPackageInfo(). קטע הקוד הבא מציג קבוצה לדוגמה:

{SHA256(PackageInfo.signature[0]), SHA256(PackageInfo.signature[1]), ...}

סכימת נתונים של תוספי מידע על הקצאת הרשאות

למזהה ה-OID של התוסף של פרטי הקצאת ההרשאות הוא 1.3.6.1.4.1.11129.2.1.30. התוסף מספק מידע על המכשיר שידוע לשרת ההקצאה. התוסף הזה תואם לסכימת CDDL.

  {
        1 : int,   ; certificates issued
  }

המפה לא מחולקת לגרסאות, וניתן להוסיף לה שדות אופציונליים חדשים.

certs_issued

מספר משוער של אישורים שהונפקו למכשיר ב-30 הימים האחרונים. אם הערך גדול מהממוצע בסדר גודל מסוים, הוא יכול לשמש כאות לניצול לרעה של התהליכים שלנו.