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