ב-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.