علامات التفويض

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