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