תגי הרשאה

ב-API של KeyMint (לשעבר Keymaster) נעשה שימוש נרחב בתגי הרשאה, שהם צמדים של שם-ערך. לכל תג אפשרי יש:

  • שם של enum עם ערך משויך
  • סוג משויך (לדוגמה, integer, ‏ bytes, ‏ date, ‏ enum), שכולל אינדיקציה לגבי האפשרות להזין כמה ערכים

לדוגמה, לתג בשם Tag::BLOCK_MODE יש ערך Enumeration בסיסי של 4 וסמן טיפוס TagType::ENUM_REP שמציין שהערך המשויך הוא Enumeration שניתן לחזור עליו (במקרה הזה, BlockMode).

לתגים יש שתי פונקציות ב-API:

  • כפרמטרים של פעולה שמתבצעת ב-API. לדוגמה, הערך Tag::MAC_LENGTH בפעולת חתימה של HMAC מציין את אורך ה-HMAC המבוקש.
  • מאפייני מפתח, ערכים שמקושרים באופן קבוע למפתח מסוים (כלומר, כלולים ב-blob של המפתח). לדוגמה, הערך Tag::EC_CURVE מציין לאיזה עקומה אליפטית מיועד המפתח. לכל מאפיין מפתח משויך רמת אבטחה שמציינת איזה חלק במערכת מופקדת על אכיפת המאפיין:
    • מאפיין מפתח ברמת אבטחה TRUSTED_ENVIRONMENT או STRONGBOX נאכף בחומרה המאובטחת.
    • מאפיין מפתח עם רמת אבטחה SOFTWARE או KEYSTORE נאכף רק על ידי שירות המערכת keystore2 (ולכן מאפיין כזה לא עמיד בפני פגיעה במערכת ההפעלה).

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

  • המאפיינים של המפתח מציינים את קבוצת הפרמטרים המותרים למפתח, לדוגמה:
    • השדה Tag::PURPOSE של מפתח ECDSA יכול לכלול גם את SIGN וגם את AGREE_KEY.
    • השדה Tag::BLOCK_MODE של מפתח AES עשוי לכלול את המצבים ECB,‏ CBC ו-CTR.
  • לאחר מכן, בקשת begin() תכלול ערך פרמטר ספציפי לפעולה, לדוגמה:
    • ל-begin() יש פרמטר של מטרה מפורשת שצריך להתאים לאחד מהערכים של Tag::PURPOSE של מאפייני המפתח.
    • begin() לפעולה של AES צריך לכלול ערך יחיד של Tag::BLOCK_MODE בשדה params, שצריך להתאים לאחד מהערכים במאפייני המפתח.

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

  • חלק מהתגים משמשים כפרמטרים לפעולה של יצירת המפתח עצמה. לדוגמה, התג Tag::CERTIFICATE_SUBJECT משפיע רק על תהליך יצירת המפתח (האסימטרי), על ידי שליטה בשדה באישור X.509 המוחזר.
  • תגים אחרים מקושרים למפתח החדש שנוצר בתור מאפייני מפתח, והם עוברים אנקפסולציה ב-keyblob המוחזר כדי שהם ישויכו למפתח באופן קבוע.

מידע מפורט על ערכי התגים זמין במפרטי הממשק הבאים של HAL: