تستخدِم واجهة برمجة التطبيقات 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.