الميزات

تحتوي هذه الصفحة على معلومات عن ميزات التشفير في Keystore في الإصدار 6.0 من نظام التشغيل Android والإصدارات الأحدث.

العناصر الأساسية للتشفير

يوفّر "متجر المفاتيح" فئات العمليات التالية:

  • إنشاء المفاتيح
  • استيراد المفاتيح غير المتماثلة وتصديرها (بدون لف المفتاح)
  • استيراد مفاتيح التشفير المتماثلة الأوّلية (بدون لفّ المفتاح)
  • التشفير غير المتماثل وفك التشفير باستخدام أوضاع الحشو المناسبة
  • التوقيع غير المتماثل والتحقّق منه باستخدام وضعَي تجميع البيانات والإضافة المناسبة
  • التشفير المتماثل وفك التشفير في الأوضاع المناسبة، بما في ذلك وضع AEAD
  • إنشاء رموز مصادقة الرسائل المتماثلة والتحقّق منها

يتم تحديد عناصر البروتوكول، مثل الغرض والوضع والإضافة، بالإضافة إلى قيود التحكّم في الوصول، عند إنشاء المفاتيح أو استيرادها، ويتم ربطها دائمًا بالمفتاح، ما يضمن عدم إمكانية استخدام المفتاح بأي طريقة أخرى.

بالإضافة إلى القائمة أعلاه، هناك خدمة أخرى تقدّمها عمليات تنفيذ Keymaster، ولكنّها لا يتم عرضها كواجهة برمجة تطبيقات: إنشاء أرقام عشوائية. ويُستخدَم هذا الإجراء داخليًا لإنشاء المفاتيح ومتّجهات الإعداد وعمليات الحشو العشوائي وغيرها من عناصر البروتوكولات الآمنة التي تتطلّب استخدام الأرقام العشوائية.

العناصر الأساسية اللازمة

توفّر جميع عمليات تنفيذ Keymaster ما يلي:

  • شريك البيع بالتجزئة
    • إتاحة مفاتيح بحجم 2048 و3072 و4096 بت
    • إتاحة الأس المشترَك F4‏ (2^16+1)
    • أوضاع الإضافة لتوقيع RSA:
      • ‫RSASSA-PSS (PaddingMode::RSA_PSS)
      • ‫RSASSA-PKCS1-v1_5 (PaddingMode::RSA_PKCS1_1_5_SIGN)
    • أوضاع الملخّص لتوقيع RSA:
      • SHA-256
    • أوضاع الإضافة لتشفير/فك تشفير RSA:
      • غير مبطن
      • ‫RSAES-OAEP (PaddingMode::RSA_OAEP)
      • ‫RSAES-PKCS1-v1_5 (PaddingMode::RSA_PKCS1_1_5_ENCRYPT)
  • ECDSA
    • تتوفّر مفاتيح بسعة 224 و256 و384 و521 بت، باستخدام منحنيات NIST P-224 وP-256 وP-384 وP-521، على التوالي
    • أوضاع الملخّص لخوارزمية ECDSA:
      • لا يتوفّر ملخّص (تم إيقافه نهائيًا وسيتمّت إزالته في المستقبل)
      • SHA-256
  • AES
    • مفاتيح التشفير بسعة 128 و256 بت
    • CBC، نسبة النقر إلى الظهور وECB وGCM لا يسمح تطبيق GCM باستخدام علامات أصغر من 96 بت أو أطوال أرقام عشوائية غير 96 بت.
    • يمكن استخدام وضعَي الحشو PaddingMode::NONE و PaddingMode::PKCS7 في وضعَي CBC وECB. في حال عدم استخدام الحشو، يتعذّر تشفير ملف البيانات باستخدام وضع CBC أو ECB إذا لم يكن الإدخال مضاعِفًا لحجم الكتلة.
  • HMAC SHA-256، بأي حجم مفتاح يصل إلى 32 بايت على الأقل

ننصح بشدة باستخدام SHA1 والأعضاء الآخرين في مجموعة SHA2 (SHA-224 وSHA384 وSHA512) في عمليات تنفيذ Keymaster. يقدّم Keystore هذه المفاتيح في البرامج إذا لم يقدّمها تنفيذ Keymaster للأجهزة.

يُنصح أيضًا باستخدام بعض العناصر الأساسية لإمكانية التشغيل التفاعلي مع الأنظمة الأخرى:

  • أحجام مفاتيح أصغر لتشفير RSA
  • الأسس العامة العشوائية لتشفير RSA

التحكّم في الوصول إلى المفاتيح

إنّ المفاتيح المستندة إلى الأجهزة والتي لا يمكن استخراجها مطلقًا من الجهاز لا توفّر أمانًا كبيرًا إذا كان بإمكان المهاجم استخدامها متى شاء (على الرغم من أنّها أكثر أمانًا مقارنةً بالمفاتيح التي يمكن استخراجها). وبالتالي، من المهم أن يفرض "متجر المفاتيح" عناصر التحكّم في الوصول.

يتم تعريف عناصر التحكّم في الوصول على أنّها "قائمة أذونات" لأزواج العلامات/القيم. علامات التفويض هي أعداد صحيحة بسعة 32 بت، والقيم لها أنواع مختلفة. يمكن تكرار بعض العلامات لتحديد قيم متعدّدة. يتم تحديد ما إذا كان يمكن تكرار العلامة في واجهة HAL لـ KeyMint (المعروفة سابقًا باسم Keymaster). عند إنشاء مفتاح، يحدِّد المُتصل قائمة تفويض. يُعدّل تنفيذ Keymaster في Keystore الأساسي القائمة لتحديد بعض المعلومات الإضافية، مثل ما إذا كان المفتاح يتضمّن حماية لإعادة التراجع، ويعرض قائمة "نهائية" للتفويض، ويتم ترميزها في ملف البيانات المتعدّدة للمفتاح الذي تم إرجاعه. ستتعذّر أي محاولة لاستخدام المفتاح لأي عملية تشفير في حال تعديل قائمة التفويض النهائية.

بالنسبة إلى Keymaster 2 والإصدارات الأقدم، يتم تحديد مجموعة العلامات المحتملة في التعداد keymaster_authorization_tag_t وتكون ثابتة بشكل دائم (على الرغم من إمكانية تمديدها). تمّت إضافة البادئة KM_TAG إلى الأسماء. تُستخدَم أولى أربع بتات من أرقام تعريف العلامات للإشارة إلى النوع.

غيّر Keymaster 3 بادئة KM_TAG إلى Tag::.

تشمل الأنواع المحتملة ما يلي:

ENUM: يتمّ تحديد العديد من قيم العلامات في التعدادات. على سبيل المثال، يتم تحديد القيم المحتمَلة TAG::PURPOSE في enum keymaster_purpose_t.

ENUM_REP: يُستخدَم هذا الرمز على النحو نفسه المستخدَم مع ENUM، باستثناء أنّه يمكن تكرار العلامة في قائمة تفويض. يشير التكرار إلى قيم مُعتمَدة متعددة. على سبيل المثال، يحتوي مفتاح التشفير على الأرجح على KeyPurpose::ENCRYPT و KeyPurpose::DECRYPT.

UINT: أعداد صحيحة غير موقَّعة بسعة 32 بت مثال: TAG::KEY_SIZE

UINT_REP: يُستخدَم هذا الرمز على النحو نفسه المستخدَم مع UINT، باستثناء أنّه يمكن تكرار العلامة في قائمة تفويض. يشير التكرار إلى قيم مُعتمَدة متعددة.

ULONG: أعداد صحيحة غير موقَّعة بسعة 64 بت مثال: TAG::RSA_PUBLIC_EXPONENT

ULONG_REP: يُستخدَم هذا الرمز كما هو الحال مع ULONG، باستثناء أنّه يمكن تكرار العلامة في قائمة تفويض. يشير التكرار إلى قيم مُعتمَدة متعددة.

DATE: قيم التاريخ/الوقت، مُعبَّرةً عن بالملي ثانية منذ 1 كانون الثاني (يناير) 1970 مثال: TAG::PRIVKEY_EXPIRE_DATETIME

BOOL: صحيح أو خطأ يُفترض أنّ القيمة "خطأ" لعلامة من النوع BOOL إذا لم تكن العلامة متوفّرة و"صحيح" إذا كانت متوفّرة. مثال: TAG::ROLLBACK_RESISTANT

BIGNUM: أعداد صحيحة ذات طول عشوائي، يتم التعبير عنها كصفيف بايت بترتيب endian الكبير. مثال: TAG::RSA_PUBLIC_EXPONENT

BYTES: تسلسل من البايتات مثال: TAG::ROOT_OF_TRUST

فرض السياسات من خلال الأجهزة أو البرامج

لا تتضمّن بعض عمليات تنفيذ الأجهزة الآمنة الميزات نفسها. لدعم مجموعة متنوعة من الأساليب، يميز Keymaster بين تنفيذ التحكّم في الوصول إلى "العالم" الآمن وغير الآمن، أو تنفيذ التحكّم في الأجهزة والبرامج ، على التوالي.

جميع عمليات التنفيذ:

  • فرض المطابقة التامّة (وليس فرض) لجميع الأذونات تتطابق قوائم الأذونات في ملفات البيانات الأساسية للمفتاح تمامًا مع الأذونات التي تم عرضها أثناء إنشاء المفتاح، بما في ذلك الترتيب. ويؤدي أي تطابق إلى تشخيص خطأ.
  • حدِّد الأذونات التي يتم فرض قيمها الدلالية.

يمكن العثور على آلية واجهة برمجة التطبيقات لإعلان الأذونات المفروضة على الأجهزة في بنية keymaster_key_characteristics_t. وتقسم قائمة الأذونات إلى قائمتَين فرعيتَين، hw_enforced و sw_enforced. تتحمّل الأجهزة الآمنة مسؤولية وضع القيم المناسبة في كل منها، استنادًا إلى ما يمكنها فرضه.

بالإضافة إلى ذلك، ينفِّذ Keystore إجراءات تنفيذ جميع الإذنات استنادًا إلى البرامج، سواء تم تنفيذها من خلال الأجهزة الآمنة أم لا.

على سبيل المثال، ننصحك بالتفكير في عملية تنفيذ مستندة إلى TrustZone لا تتيح انتهاء صلاحية المفتاح. قد يستمر إنشاء مفتاح يتضمّن تاريخ انتهاء صلاحية. تتضمّن قائمة التفويض الخاصة بالمفتاح العلامة TAG::ORIGINATION_EXPIRE_DATETIME مع تاريخ انتهاء الصلاحية. عند إرسال طلب إلى Keystore للحصول على خصائص المفتاح، يتم العثور على هذه العلامة في قائمة sw_enforced ولا يفرض الجهاز الآمن شرط انتهاء الصلاحية. ومع ذلك، ترفض أداة Keystore محاولات استخدام المفتاح بعد انتهاء صلاحيته.

إذا تم ترقية الجهاز بعد ذلك باستخدام جهاز آمن يتيح انتهاء الصلاحية، سيجد طلب خصائص المفتاح TAG::ORIGINATION_EXPIRE_DATETIME في قائمة hw_enforced ، وستتعذّر محاولات استخدام المفتاح بعد انتهاء صلاحيته حتى إذا تم التلاعب في متجر المفاتيح أو تجاوزه.

لمزيد من المعلومات عن تحديد ما إذا كانت المفاتيح مستندة إلى الأجهزة، يُرجى الاطّلاع على إثبات ملكية المفاتيح.

أذونات إنشاء الرسائل المشفّرة

تُستخدَم العلامات التالية لتحديد الخصائص التشفيرية للعمليات باستخدام المفتاح المرتبط: TAG::ALGORITHM، TAG::KEY_SIZE، TAG::BLOCK_MODE، TAG::PADDING، TAG::CALLER_NONCE، وTAG::DIGEST.

يمكن تكرار TAG::PADDING وTAG::DIGEST وPaddingMode::BLOCK_MODE، ما يعني أنّه يمكن ربط قيم متعدّدة بمفتاح واحد، ويتم تحديد القيمة التي سيتم استخدامها في وقت إجراء العملية.

الغرض

تتضمّن المفاتيح مجموعة مرتبطة من الأغراض، يتم التعبير عنها كإدخال واحد أو أكثر من إدخالات التفويض التي تحمل العلامة TAG::PURPOSE، والتي تحدّد كيفية استخدامها. وتشمل الأغراض ما يلي:

  • KeyPurpose::ENCRYPT
  • KeyPurpose::DECRYPT
  • KeyPurpose::SIGN
  • KeyPurpose::VERIFY

يمكن أن يتضمّن أي مفتاح أي مجموعة فرعية من هذه الأغراض. يُرجى العِلم أنّ بعض التركيبات تؤدي إلى حدوث مشاكل في الأمان. على سبيل المثال، مفتاح RSA الذي يمكن استخدامه في كل من التشفير والتوقيع يسمح لمهاجم يمكنه إقناع النظام بفك تشفير بيانات عشوائية لإنشاء التوقيعات.

الاستيراد والتصدير

يتيح Keymaster تصدير المفاتيح العامة فقط بتنسيق X.509 واستيراد:

  • أزواج المفاتيح العامة والخاصة بتنسيق PKCS#8 بترميز DER، بدون تشفير يستند إلى كلمة المرور
  • المفاتيح المتماثلة بتنسيق وحدات البايت الأوّلية

لضمان إمكانية تمييز المفاتيح المستورَدة عن مفاتيح الإنشاء الآمن، يتم تضمين TAG::ORIGIN في قائمة التفويض المناسبة للمفتاح. على سبيل المثال، إذا تم إنشاء مفتاح في جهاز آمن، يتم العثور على TAG::ORIGIN مع القيمة KeyOrigin::GENERATED في قائمة hw_enforced للخصائص الرئيسية، في حين أنّ المفتاح الذي تم استيراده إلى جهاز آمن يحمل القيمة KeyOrigin::IMPORTED.

مصادقة المستخدم

لا تُنفِّذ عمليات تنفيذ Secure Keymaster مصادقة المستخدم، ولكنها تعتمد على تطبيقات موثوق بها أخرى تُنفِّذ المصادقة. للاطّلاع على الواجهة التي تُنفِّذها هذه التطبيقات، يُرجى الاطّلاع على صفحة Gatekeeper.

يتم تحديد متطلبات مصادقة المستخدم من خلال مجموعتَين من العلامات. تشير المجموعة الأولى إلى المستخدم الذي يمكنه استخدام المفتاح:

  • يشير الرمز TAG::ALL_USERS إلى أنّ المفتاح يمكن لجميع المستخدمين استخدامه. إذا كان موجودًا، لا يكونTAG::USER_ID وTAG::USER_SECURE_ID موجودَين.
  • تحتوي السمة TAG::USER_ID على قيمة رقمية تحدّد معرّف المستخدم المفوَّض. يُرجى العِلم أنّ هذا هو رقم تعريف مستخدم Android (للمستخدمين المتعدّدين)، وليس رقم تعريف المستخدم الفريد للتطبيق، ويتم فرضه من خلال البرامج غير الآمنة فقط. إذا كان موجودًا، لا يكون TAG::ALL_USERS متوفّرًا.
  • يحتوي TAG::USER_SECURE_ID على قيمة رقمية بسعة 64 بت تحدِّد معرِّف المستخدم الآمن الذي يتم تقديمه في رمز مميّز آمن للمصادقة بهدف فتح قفل استخدام المفتاح. في حال تكرار المفتاح، يمكن استخدامه إذا تم تقديم أي من القيم في رمز مميّز آمن للمصادقة.

تشير المجموعة الثانية إلى ما إذا كان يجب مصادقة المستخدم ووقت إجراء ذلك. إذا لم تكن أيّ من هاتين العلامتَين متوفّرة، ولكن كانت TAG::USER_SECURE_ID متوفّرة، يجب إجراء مصادقة عند كل استخدام للمفتاح.

  • يشير الرمز NO_AUTHENTICATION_REQUIRED إلى عدم الحاجة إلى مصادقة المستخدمين، إلا أنّه لا يمكن استخدام المفتاح إلا من خلال التطبيقات التي تعمل باسم المستخدمين المحدّدين في TAG::USER_ID.
  • TAG::AUTH_TIMEOUT هي قيمة رقمية تحدّد، بالثواني، مدى حداثة مصادقة المستخدم لتفويض استخدام المفتاح. ينطبق ذلك فقط على عمليات المفاتيح الخاصة/السرية. لا تتطلّب عمليات المفتاح العام المصادقة. لا تتجاوز مهلات الانتظار عمليات إعادة التشغيل، وبعد إعادة التشغيل، لا تتم مصادقة جميع المفاتيح مطلقًا. يمكن ضبط مهلة الانتظار على قيمة كبيرة للإشارة إلى أنّ المصادقة مطلوبة مرة واحدة لكل عملية إعادة تشغيل (2^32 ثانية تقريبًا 136 عامًا، ويُفترض أنّه تتم إعادة تشغيل أجهزة Android بشكلٍ أكثر من ذلك).

يلزم فتح قفل الجهاز

لا يمكن استخدام المفاتيح التي تحمل الرمز TAG::UNLOCKED_DEVICE_REQUIRED إلا عندما يكون الجهاز غير مقفل. للاطّلاع على الدلالات التفصيلية، يُرجى الاطّلاع على KeyProtection.Builder#setUnlockedDeviceRequired(boolean).

يتم فرض UNLOCKED_DEVICE_REQUIRED من خلال Keystore وليس من خلال Keymaster. في المقابل، في الإصدار 12 من Android والإصدارات الأحدث، يحمى Keystore مفاتيح UNLOCKED_DEVICE_REQUIRED بشكل مشفّر أثناء قفل الجهاز، لضمان عدم إمكانية استخدامها في معظم الحالات حتى إذا تم اختراق Keystore أثناء قفل الجهاز.

لتحقيق ذلك، يُجري "مخزن المفاتيح" عملية "تشفير فائق" لجميع مفاتيح UNLOCKED_DEVICE_REQUIRED قبل تخزينها في قاعدة بياناته، ويحمي مفاتيح التشفير الفائق (المفاتيح الفائقة) عندما يكون الجهاز مقفلاً بطريقة لا يمكن استردادها إلا من خلال فتح قفل الجهاز بنجاح. (يُستخدم مصطلح "التشفير الفائق" لأنّه يتم تطبيق هذه الطبقة من التشفير بالإضافة إلى طبقة التشفير التي يطبّقها Keymaster حاليًا على جميع المفاتيح).

لكل مستخدم (بما في ذلك الملفات التجارية) مفتاحان فائقان مرتبطان بـ UNLOCKED_DEVICE_REQUIRED:

  • المفتاح الفائق المتماثل UnlockedDeviceRequired هذا هو مفتاح AES‑256‑GCM. ويشفِّر مفاتيح UNLOCKED_DEVICE_REQUIRED التي يتم استيرادها أو إنشاؤها عندما يكون الجهاز غير مقفل.
  • المفتاح الفائق غير المتماثل UnlockedDeviceRequired هذا هو مفتاحَا التشفير باستخدام مفتاحَي التشفير المتماثل P‑521. ويشفِّر UNLOCKED_DEVICE_REQUIRED مفاتيح التشفير التي يتم استيرادها أو إنشاؤها عندما يكون الجهاز مقفلاً للمستخدم. تتم إعادة تشفير المفاتيح المشفَّرة باستخدام هذا المفتاح غير المتماثل باستخدام المفتاح المتماثل عند الاستخدام الأول (لا يمكن أن يحدث ذلك إلا عندما يكون الجهاز غير مقفل).

ينشئ Keystore هذه المفاتيح الفائقة عند إنشاء المستخدم ويخزّنها في قاعدة بياناته المشفَّرة بكلمة المرور الاصطناعية للمستخدم. ويتيح ذلك استردادها باستخدام رقم تعريف شخصي أو نقش أو كلمة مرور مكافئة.

وتخزِّن أداة Keystore أيضًا مفاتيح التشفير الفائقة هذه في الذاكرة، ما يتيح لها العمل على مفاتيح UNLOCKED_DEVICE_REQUIRED. ومع ذلك، يحاول التطبيق تخزين الأجزاء السرية من هذه المفاتيح في ذاكرة التخزين المؤقت فقط عندما يكون الجهاز غير مقفل. عندما يتم قفل الجهاز للمستخدم، يُلغي Keystore نسخته المخزّنة مؤقتًا من الأجزاء السرية لهذه المفاتيح الفائقة، إن أمكن. على وجه التحديد، عندما يكون الجهاز مُقفَلاً للمستخدم، يختار Keystore أحد مستويات الحماية الثلاثة ويطبّقه على مفاتيح UnlockedDeviceRequired الفائقة للمستخدم:

  • إذا فعَّل المستخدم رقم التعريف الشخصي أو النقش أو كلمة المرور فقط، يمحو Keystore الأجزاء السرية من مفاتيح التشفير الفائقة المخزّنة مؤقتًا. ويؤدي ذلك إلى عدم إمكانية استرداد مفاتيح super إلا من خلال النسخة المشفّرة في قاعدة البيانات التي لا يمكن فك تشفيرها إلا باستخدام رقم تعريف شخصي أو نقش أو كلمة مرور مكافئة.
  • إذا لم يكن لدى المستخدم سوى مقاييس حيوية من الفئة 3 ("قوية") وكان رقم التعريف الشخصي أو النقش أو كلمة المرور مفعَّلة، ينظّم "متجر المفاتيح" إمكانية استرداد المفاتيح الفائقة باستخدام أي من المقاييس الحيوية من الفئة 3 المسجَّلة للمستخدم (عادةً بصمة الإصبع)، وذلك بدلاً من استخدام رقم التعريف الشخصي أو النقش أو كلمة المرور. ولإجراء ذلك، يتم إنشاء مفتاح AES‏-256-GCM جديد، وتشفير الأجزاء السرية من المفاتيح الفائقة باستخدامه، واستيراد مفتاح AES‏-256-GCM إلى Keymaster كمفتاح مرتبط بالبيانات الحيوية يتطلّب مصادقة حيوية ناجحة خلال آخر 15 ثانية، وإعادة المحتوى إلى القيمة صفر في نُسخ كل هذه المفاتيح.
  • إذا كان لدى المستخدم مقياسًا حيويًا من الفئة 1 ("سهولة الاستخدام") أو قياسًا حيويًا من الفئة 2 ("ضعيف") أو وكيل ثقة مفعّل لفتح الجهاز، يحتفظ "مخزن المفاتيح" بالمفاتيح الفائقة في ذاكرة التخزين المؤقت بتنسيق نص عادي. في هذه الحالة، لا يتم توفير أمان التشفير لمفاتيح UNLOCKED_DEVICE_REQUIRED. يمكن للمستخدمين تجنُّب هذا الخيار الاحتياطي الأقل أمانًا من خلال عدم تفعيل طرق فتح القفل هذه. إنّ أكثر طرق فتح القفل شيوعًا التي تندرج ضمن هذه الفئات هي ميزة "فتح الجهاز بالتعرف على الوجه" على العديد من الأجهزة وميزة "فتح الجهاز باستخدام ساعة ذكية مقترنة".

عند فتح قفل الجهاز للمستخدم، يستعيد Keystore مفاتيح super UnlockedDeviceRequired الفائقة للمستخدم إن أمكن. لفتح الجهاز باستخدام رقم التعريف الشخصي أو النقش أو كلمة المرور، يتم فك تشفير نسخة من هذه المفاتيح المخزّنة في قاعدة بيانات. بخلاف ذلك، يتحقّق التطبيق ممّا إذا كان قد حفظ نسخة من هذه المفاتيح مشفّرة باستخدام مفتاح مرتبط بالبيانات البيومترية، وإذا كان الأمر كذلك، يحاول فك تشفيرها. لا يتم تنفيذ هذا الإجراء إلا إذا تمكّن المستخدم من المصادقة بنجاح باستخدام مقياس حيوي من الفئة 3 خلال آخر 15 ثانية، وذلك من خلال Keymaster (وليس Keystore).

ربط العميل

يتم ربط العميل، أي ربط مفتاح بتطبيق عميل معيّن، من خلال معرّف عميل اختياري وبعض بيانات العميل الاختيارية (TAG::APPLICATION_ID وTAG::APPLICATION_DATA على التوالي). يتعامل Keystore مع هذه القيم على أنّها مجموعات بيانات غير شفافة، ولا يضمن سوى أنّه يتم عرض مجموعات البيانات نفسها التي تم تقديمها أثناء إنشاء/استيراد المفتاح لكل استخدام وأنّها متطابقة بايتًا بايتًا. لا يعرض Keymaster بيانات ربط العميل. يجب أن يعرف المتصل هذا الرقم لاستخدام المفتاح.

لا تتوفّر هذه الميزة للتطبيقات.

انتهاء الصلاحية

يتيح "متجر المفاتيح" حظر استخدام المفتاح حسب التاريخ. يمكن ربط تاريخ بدء صلاحية المفتاح بتاريخ انتهاء صلاحيته بمفتاح، ويرفض Keymaster تنفيذ عمليات المفتاح إذا كان التاريخ/الوقت الحالي خارج النطاق صالح. يتم تحديد نطاق صلاحية المفتاح باستخدام العلامات TAG::ACTIVE_DATETIME و TAG::ORIGINATION_EXPIRE_DATETIME و TAG::USAGE_EXPIRE_DATETIME. يستند التمييز بين "الاستخدام" و"العملية المصدرة" إلى ما إذا كان المفتاح يُستخدَم لمحاولة "إنشاء" نص مشفَّر/توقيع/إلخ. جديد أو "استخدام" نص مشفَّر/توقيع/إلخ. حالي. يُرجى العِلم أنّه لا يتم عرض هذا التمييز في التطبيقات.

علامات TAG::ACTIVE_DATETIME وTAG::ORIGINATION_EXPIRE_DATETIME وTAG::USAGE_EXPIRE_DATETIME اختيارية. في حال عدم توفّر العلامات، يفترض أنّه يمكن استخدام المفتاح المعنيّ في أي وقت لفك تشفير الرسائل أو التحقّق منها.

بما أنّ الوقت المحدد على مدار الساعة يتم توفيره من خلال المجال غير الآمن، من غير المرجّح أن تكون العلامات ذات الصلة بانتهاء الصلاحية مضمّنة في القائمة المفروضة على الأجهزة. سيتطلب فرض انتهاء الصلاحية من خلال الأجهزة أن يحصل "العالم الآمن" بطريقة ما على وقت وبيانات موثوقَين، على سبيل المثال، من خلال بروتوكول استجابة للتحدّي مع خادم وقت بعيد موثوق.

ربط جذر الثقة

تتطلّب خدمة Keystore ربط المفاتيح بجذر ثقة، وهو سلسلة بت يتم توفيرها للجهاز الآمن Keymaster أثناء بدء التشغيل، ويُفضَّل أن يتم ذلك من خلال مشغّل التمهيد. تكون سلسلة البتات هذه مرتبطة بشكل مشفّر بكل مفتاح يديره Keymaster.

يتألّف مصدر الثقة من المفتاح العام المستخدَم للتحقّق من صحة التوقيع على صورة التمهيد وحالة قفل الجهاز. في حال تغيير المفتاح العام للسماح باستخدام صورة نظام مختلفة أو في حال تغيير حالة القفل، لن يكون أي من المفاتيح المحمية من خلال Keymaster التي أنشأها النظام السابق قابلاً للاستخدام، ما لم تتم استعادة جذر الثقة السابق وبدء تشغيل نظام تم توقيعه باستخدام هذا المفتاح. والهدف من ذلك هو زيادة قيمة عناصر التحكّم في الوصول إلى المفاتيح التي تفرضها البرامج من خلال جعل استخدام مفاتيح Keymaster مستحيلاً على نظام التشغيل الذي ثبَّته المهاجم.

مفاتيح مستقلة

يمكن لبعض الأجهزة الآمنة التي تستخدم Keymaster اختيار تخزين مادة المفتاح داخليًا وعرض المعرّفات بدلاً من مادة المفتاح المشفَّرة. وقد تكون هناك حالات أخرى لا يمكن فيها استخدام المفاتيح إلى أن يتوفّر عنصر آخر غير آمن أو آمن في نظام التشغيل. يسمح واجهة HAL لخدمة Keymaster للمُرسِل بطلب أن يكون المفتاح "مستقلاً"، وذلك من خلال علامة TAG::STANDALONE، ويعني ذلك أنّه لا يلزم توفُّر أي موارد أخرى غير العنصر المصغّر ونظام Keymaster الذي يعمل. يمكن فحص العلامات المرتبطة بمفتاح لمعرفة ما إذا كان المفتاح مستقلاً. في الوقت الحالي، تم تحديد قيمتَين فقط:

  • KeyBlobUsageRequirements::STANDALONE
  • KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM

لا تتوفّر هذه الميزة للتطبيقات.

السرعة

عند إنشائه، يمكن تحديد الحد الأقصى لسرعة الاستخدام باستخدام TAG::MIN_SECONDS_BETWEEN_OPS. ترفض عمليات تنفيذ TrustZone تنفيذ العمليات التشفيرية باستخدام هذا المفتاح إذا تم تنفيذ عملية في وقت سابق بأقل منTAG::MIN_SECONDS_BETWEEN_OPS ثانية.

إنّ النهج البسيط لتنفيذ حدود السرعة هو جدول أرقام تعريف المفاتيح وعلامات زمن استخدامها الماضي. حجم هذا الجدول محدود، ولكنه يتسع لـ 16 إدخالًا على الأقل. في حال كان الجدول ممتلئًا ولا يمكن تعديل أيٍّ من الإدخالات أو تجاهلها، تُعدّ عمليات التنفيذ الآمنة للأجهزة "مخطئة بأمان"، وتفضّل رفض جميع عمليات المفاتيح ذات السرعة المحدودة إلى أن تنتهي صلاحية أحد الإدخالات. من المقبول أن تنتهي صلاحية جميع الإدخالات عند إعادة التشغيل.

يمكن أيضًا حصر استخدام المفاتيح في n عملية تشغيل باستخدام TAG::MAX_USES_PER_BOOT. يتطلّب ذلك أيضًا جدول تتبُّع، يتسع لأربع مفاتيح على الأقل، ويضمن أيضًا عدم حدوث أي خلل. يُرجى العِلم أنّه لا يمكن للتطبيقات إنشاء مفاتيح محدودة لكل عملية تشغيل. لا يتم عرض هذه الميزة من خلال "متجر المفاتيح"، وهي محجوزة لعمليات النظام.

لا تتوفّر هذه الميزة للتطبيقات.

إعادة إنشاء بذور أداة إنشاء الأرقام العشوائية

بما أنّ الأجهزة الآمنة تُنشئ أرقامًا عشوائية لمواد المفاتيح ومقاييس البدء (IV)، ولأنّ أدوات إنشاء الأرقام العشوائية في الأجهزة قد لا تكون موثوقًا بها بالكامل في بعض الأحيان، يوفّر Keymaster HAL واجهة لسماح العميل بتقديم معلومات إضافية عن التشويش، والتي يتم دمجها مع الأرقام العشوائية التي يتم إنشاؤها.

استخدِم أداة إنشاء أرقام عشوائية في الجهاز كمصدر أساسي للبذرة. لا يمكن أن تكون بيانات البذور المقدَّمة من خلال واجهة برمجة التطبيقات الخارجية هي المصدر الوحيد للأرقام العشوائية المستخدَمة لإنشاء الأرقام. بالإضافة إلى ذلك، يجب أن تضمن عملية المزج المُستخدَمة أنّ الإخراج العشوائي غير متوقّع إذا كان أيّ من مصادر البذور غير متوقّع.

لا تتوفّر هذه الميزة للتطبيقات، ولكن يستخدمها إطار العمل الذي يقدّم بانتظام معلومات إضافية عن الفوضى، ويتم استرجاعها من مثيل Java SecureRandom، إلى الأجهزة الآمنة.