تستخدِم واجهة برمجة التطبيقات KeyMint (المعروفة سابقًا باسم Keymaster) على نطاق واسع علامات التفويض، وهي عبارة عن أزواج اسم وقيمة. تحتوي كل علامة محتملة على ما يلي:
- اسم تعداد مع قيمة مرتبطة
- نوع مرتبط (على سبيل المثال، عدد صحيح أو وحدات بايت أو تاريخ أو تعداد)، ويتضمّن إشارة إلى ما إذا كان يُسمح بقيم متعددة
على سبيل المثال، تحتوي العلامة التي تحمل الاسم
Tag::BLOCK_MODE
على قيمة تعداد أساسية هي 4
وعلامة نوع TagType::ENUM_REP
تشير إلى أنّ القيمة المرتبطة هي تعداد قابل للتكرار (في هذه الحالة، BlockMode
).
تؤدي العلامات وظيفتَين في واجهة برمجة التطبيقات:
- كوسيطات لعملية يتم تنفيذها على واجهة برمجة التطبيقات، على سبيل المثال، يشير
Tag::MAC_LENGTH
في عملية توقيع HMAC إلى طول HMAC المطلوب. - الخصائص الأساسية هي القيم المرتبطة بشكل دائم بمفتاح معيّن (أي المضمّنة في كائن المفتاح الثنائي الكبير)، على سبيل المثال، يشير
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
.