ב-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:
- KeyMint – כל התגים מוגדרים ב-
Tag.aidlבענף הרלוונטי של גרסת Android. - Keymaster – התגים מוגדרים ב-
platform/hardware/interfaces/keymaster/keymaster-version/types.halלכלkeymaster-version, למשל3.0/types.halל-Keymaster 3 ו-4.0/types.halל-Keymaster 4. ב-Keymaster 2 ומטה, התגים מוגדרים ב-platform/hardware/libhardware/include/hardware/keymaster_defs.h.