תגי הרשאה

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

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

לדוגמה, לתג עם השם Tag::BLOCK_MODE יש ערך enum בסיסי של 4 וסמן מסוג TagType::ENUM_REP שמציין שהערך המשויך הוא enum שניתן לחזרה (במקרה הזה, 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: