الميزات

تحتوي هذه الصفحة على معلومات حول ميزات التشفير في Android Keystore، كما هو موفّر من خلال تنفيذ KeyMint (أو Keymaster) الأساسي.

العمليات الأساسية للتشفير

توفّر خدمة Keystore فئات العمليات التالية:

  • إنشاء مفاتيح ينتج عنه مادة مفتاح خاص أو سرّي لا يمكن الوصول إليها إلا من خلال البيئة الآمنة. يمكن للعملاء إنشاء مفاتيح بالطرق التالية:
    • إنشاء مفتاح جديد
    • استيراد مواد المفاتيح غير المشفرة
    • استيراد مواد المفاتيح المشفَّرة
  • إثبات صحة المفتاح: يؤدي إنشاء مفتاح غير متماثل إلى إنشاء شهادة تتضمّن جزء المفتاح العام من زوج المفاتيح. تحتوي هذه الشهادة اختياريًا أيضًا على معلومات حول البيانات الوصفية للمفتاح وحالة الجهاز، وكلها موقّعة بمفتاح مرتبط بسلسلة مفاتيح تعود إلى جذر موثوق به.
  • عمليات التشفير:
    • التشفير المتماثل وفك التشفير (AES و3DES)
    • فك التشفير غير المتماثل (RSA)
    • التوقيع غير المتماثل (ECDSA وRSA)
    • التوقيع والتحقّق المتماثلان (HMAC)
    • اتفاقية المفتاح غير المتماثل (ECDH)

يُرجى العِلم أنّ Keystore وKeyMint لا يتعاملان مع عمليات المفتاح العام للمفاتيح غير المتماثلة.

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

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

العناصر الأساسية الضرورية

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

  • RSA
    • إتاحة مفاتيح 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:
      • Unpadded
      • 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 وCTR وECB وGCM لا يسمح تنفيذ GCM باستخدام علامات أصغر من 96 بت أو أطوال أرقام عشوائية غير 96 بت.
    • تتوفّر أوضاع التعبئة PaddingMode::NONE وPaddingMode::PKCS7 في وضعي CBC وECB. بدون إضافة مساحة فارغة، يتعذّر التشفير في وضع CBC أو ECB إذا لم يكن الإدخال مضاعفًا لحجم الحظر.
  • HMAC SHA-256، مع أي حجم مفتاح يصل إلى 32 بايت على الأقل

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

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

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

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

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

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

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

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

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

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

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

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

فرض القيود على الأجهزة أو البرامج

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

يتم عرض هذا الحقل في KeyMint API باستخدام الحقل securityLevel من النوع KeyCharacteristics. يكون الجهاز الآمن مسؤولاً عن وضع أذونات الوصول في KeyCharacteristics بمستوى الأمان المناسب، استنادًا إلى ما يمكنه فرضه. تتوفّر هذه المعلومات أيضًا في سجلّات شهادات المصادقة للمفاتيح غير المتماثلة: تظهر خصائص المفتاح SecurityLevel::TRUSTED_ENVIRONMENT أو SecurityLevel::STRONGBOX في القائمة hardwareEnforced، وتظهر خصائص SecurityLevel::SOFTWARE أو SecurityLevel::KEYSTORE في القائمة softwareEnforced.

على سبيل المثال، لا تفرض البيئة الآمنة عادةً قيودًا على الفترة الزمنية التي يمكن فيها استخدام المفتاح، لأنّه ليس لديها إذن وصول موثوق إلى معلومات التاريخ والوقت. نتيجةً لذلك، يتم فرض عمليات التفويض، مثل Tag::ORIGINATION_EXPIRE_DATETIME، من خلال Keystore في نظام التشغيل Android، وستتضمّن SecurityLevel::KEYSTORE.

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

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

تُستخدَم العلامات التالية لتحديد الخصائص المتعلقة بالتشفير للعمليات التي تستخدم المفتاح المرتبط بها:

  • Tag::ALGORITHM
  • Tag::KEY_SIZE
  • Tag::BLOCK_MODE
  • Tag::PADDING
  • Tag::CALLER_NONCE
  • Tag::DIGEST
  • Tag::MGF_DIGEST

العلامات التالية قابلة للتكرار، ما يعني أنّه يمكن ربط قيم متعددة بمفتاح واحد:

  • Tag::BLOCK_MODE
  • Tag::PADDING
  • Tag::DIGEST
  • Tag::MGF_DIGEST

يتم تحديد القيمة التي سيتم استخدامها في وقت العملية.

الغرض

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

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

استيراد المفتاح

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

  • أزواج المفاتيح غير المتماثلة بتنسيق PKCS#8 بترميز DER (بدون تشفير مستند إلى كلمة مرور)
  • المفاتيح المتماثلة كبايتات أولية

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

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

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

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

  • يحتوي Tag::USER_SECURE_ID على قيمة رقمية مؤلفة من 64 بت تحدّد معرّف المستخدم الآمن الذي يتم توفيره في رمز مميّز آمن للمصادقة من أجل إتاحة استخدام المفتاح. في حال تكرارها، يمكن استخدام المفتاح إذا تم توفير أي من القيم في رمز مميّز للمصادقة الآمنة.

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

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

يجب أن يكون الجهاز غير مقفل

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

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

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

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

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

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

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

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

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

ربط حساب العميل

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

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

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

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

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

بما أنّ الوقت الفعلي يتم توفيره من خلال بيئة غير آمنة، فإنّ العلامات ذات الصلة بانتهاء الصلاحية تكون ضمن القائمة التي تفرضها البرامج.

ربط جذر الثقة

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

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

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

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

  • KeyBlobUsageRequirements::STANDALONE
  • KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM

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

السرعة

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

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

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

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

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

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

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