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

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