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