تحتوي هذه الصفحة على معلومات حول ميزات التشفير في 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)
- RSASSA-PSS (
- أوضاع الملخّص لتوقيع 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.
على سبيل المثال، لا تفرض البيئة الآمنة عادةً قيودًا على الفترة الزمنية التي يمكن فيها استخدام المفتاح، لأنّه ليس لديها إذن وصول موثوق إلى معلومات التاريخ والوقت. نتيجةً لذلك، يفرض Keystore استخدام أذونات مثل
Tag::ORIGINATION_EXPIRE_DATETIME في
Android، وستتضمّن SecurityLevel::KEYSTORE.
لمزيد من المعلومات حول تحديد ما إذا كانت المفاتيح وتراخيصها محمية بواسطة الأجهزة، يُرجى الاطّلاع على مقالة إثبات صحة المفتاح.
أذونات إنشاء الرسائل المشفّرة
تُستخدَم العلامات التالية لتحديد الخصائص المتعلقة بالتشفير للعمليات التي تستخدم المفتاح المرتبط بها:
Tag::ALGORITHMTag::KEY_SIZETag::BLOCK_MODETag::PADDINGTag::CALLER_NONCETag::DIGESTTag::MGF_DIGEST
يمكن تكرار العلامات التالية، ما يعني أنّه يمكن ربط قيم متعدّدة بمفتاح واحد:
Tag::BLOCK_MODETag::PADDINGTag::DIGESTTag::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 أثناء قفل الجهاز.
تستخدِم جميع عمليات التشفير وإنشاء الأرقام العشوائية الموضّحة في هذا القسم مكتبة BoringSSL، باستثناء الحالات التي يُشار فيها صراحةً إلى استخدام KeyMint. يتم ضبط جميع الأسرار على القيمة صفر بمجرد عدم الحاجة إليها.
UnlockedDeviceRequired super keys
لحماية مفاتيح UNLOCKED_DEVICE_REQUIRED بشكل مشفّر،
تستخدم خدمة Keystore عملية "التشفير الفائق" قبل تخزينها في قاعدة البيانات. عند الإمكان، يحمي هذا الإعداد مفاتيح التشفير الفائق (المفاتيح الفائقة) عندما يكون الجهاز مقفلاً، وذلك بطريقة لا يمكن استردادها إلا من خلال فتح قفل الجهاز بنجاح. (يتم استخدام مصطلح "التشفير الفائق" لأنّ طبقة التشفير هذه يتم تطبيقها بالإضافة إلى طبقة التشفير التي يطبّقها KeyMint على جميع المفاتيح).
لكل مستخدم (بما في ذلك الملفات الشخصية) مفتاحان فائقان مرتبطان بـ UNLOCKED_DEVICE_REQUIRED:
- المفتاح المتميّز المتماثل UnlockedDeviceRequired هذا مفتاح
AES‑256‑GCM. ويشفّر
مفاتيح
UNLOCKED_DEVICE_REQUIREDالتي يتم استيرادها أو إنشاؤها أو استخدامها أثناء فتح قفل الجهاز للمستخدم. - المفتاح الفائق غير المتماثل UnlockedDeviceRequired. هذا مفتاحا تشفير ECDH P-521. ويشفّر
UNLOCKED_DEVICE_REQUIREDالمفاتيح التي يتم استيرادها أو إنشاؤها أثناء قفل الجهاز للمستخدم. لمزيد من التفاصيل، يُرجى الاطّلاع على تخزين المفاتيح أثناء قفل الجهاز.
إنشاء المفاتيح الفائقة وحمايتها
عند إنشاء مستخدم، ينشئ Keystore المفاتيح الفائقة UnlockedDeviceRequired الخاصة بالمستخدم ويخزّنها في قاعدة البيانات، ويتم تشفيرها (بشكل غير مباشر) باستخدام كلمة المرور الاصطناعية الخاصة بالمستخدم:
- يستمد خادم النظام كلمة مرور Keystore الخاصة بالمستخدم من كلمة المرور الاصطناعية الخاصة بالمستخدم باستخدام دالة اشتقاق المفاتيح (KDF) وفقًا لمعيار SP800‑108.
- يمرّر خادم النظام كلمة مرور Keystore الخاصة بالمستخدم إلى Keystore.
- تنشئ خدمة Keystore المفاتيح الفائقة للمستخدم.
- لكل مفتاح من المفاتيح الفائقة الخاصة بالمستخدم:
- ينشئ Keystore قيمة salt عشوائية.
- تستمد Keystore مفتاح AES‑256‑GCM من كلمة مرور Keystore التي يحدّدها المستخدم ومن القيمة العشوائية باستخدام HKDF‑SHA256.
- تشفّر Keystore الجزء السري من المفتاح الممتاز باستخدام مفتاح AES‑256‑GCM هذا.
- يخزّن 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).
تخزين المفاتيح عندما يكون الجهاز مقفلاً
تسمح خدمة Keystore للمستخدمين بإنشاء UNLOCKED_DEVICE_REQUIRED مفاتيح
أثناء قفل الجهاز. تستخدم هذه الميزة نظام تشفير مختلطًا لضمان عدم إمكانية فك تشفيرها إلا عند فتح قفل الجهاز لاحقًا:
- التشفير (إنشاء مفتاح
UNLOCKED_DEVICE_REQUIREDأثناء قفل الجهاز):- تنشئ خدمة Keystore زوج مفاتيح ECDH P‑521 مؤقتًا جديدًا.
- تنشئ خدمة Keystore سرًا مشتركًا من خلال تنفيذ اتفاقية مفتاح ECDH بين المفتاح الخاص لمفتاح التشفير المؤقت هذا والجزء العام من المفتاح الفائق غير المتماثل UnlockedDeviceRequired.
- ينشئ Keystore قيمة salt عشوائية.
- يستمدّ Keystore مفتاح AES‑256‑GCM من السر المشترك والملح باستخدام HKDF‑SHA256.
- تشفّر خدمة Keystore المفتاح
UNLOCKED_DEVICE_REQUIREDباستخدام مفتاح AES‑256‑GCM هذا. - يخزِّن Keystore مفتاح
UNLOCKED_DEVICE_REQUIREDالمشفّر، والملح، والجزء العام من زوج المفاتيح المؤقتة في قاعدة بياناته.
- فك التشفير (باستخدام
UNLOCKED_DEVICE_REQUIREDالمفتاح الذي تم إنشاؤه أثناء فتح قفل الجهاز):- يحمّل Keystore المفتاح المشفّر
UNLOCKED_DEVICE_REQUIREDوالملح والجزء العام من زوج المفاتيح المؤقت من قاعدة البيانات. - تنشئ خدمة Keystore سرًا مشتركًا من خلال تنفيذ اتفاقية مفتاح ECDH بين الجزء العام من مفتاحَي التشفير المؤقتَين والجزء الخاص من المفتاح الرئيسي غير المتماثل الذي يتطلّب فتح قفل الجهاز. المفتاح الخاص متاح لأنّ الجهاز غير مقفل.
- يستمدّ Keystore مفتاح AES‑256‑GCM من السر المشترك والملح باستخدام HKDF‑SHA256. هذا المفتاح AES‑256‑GCM هو نفسه المفتاح الذي تم استخراجه أثناء التشفير.
- تزيل خدمة Keystore تشفير المفتاح
UNLOCKED_DEVICE_REQUIREDباستخدام مفتاح AES‑256‑GCM. - تعيد خدمة Keystore تشفير المفتاح
UNLOCKED_DEVICE_REQUIREDباستخدام المفتاح الرئيسي المتماثل UnlockedDeviceRequired. لا يؤثّر ذلك في خصائص أمان المفتاح، ولكنّه يتيح الوصول إليه بشكل أسرع لاحقًا.
- يحمّل 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، ما يعني أنّه لا يلزم توفير أي موارد أخرى غير الكائن الثنائي الكبير (blob) ونظام KeyMint قيد التشغيل. يمكن فحص العلامات المرتبطة بمفتاح لمعرفة ما إذا كان المفتاح مستقلاً. في الوقت الحالي، يتم تحديد قيمتين فقط:
KeyBlobUsageRequirements::STANDALONEKeyBlobUsageRequirements::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 واجهة للسماح للعميل بتقديم إنتروبيا إضافية يتم دمجها في الأرقام العشوائية التي يتم إنشاؤها.
استخدِم أداة إنشاء أرقام عشوائية كالمصدر الأساسي للقيم الأولية. لا يمكن أن تكون البيانات الأساسية المقدَّمة من خلال واجهة برمجة التطبيقات الخارجية هي المصدر الوحيد للعشوائية المستخدَمة لإنشاء الأرقام. علاوةً على ذلك، يجب أن تضمن عملية الدمج المستخدَمة عدم إمكانية توقّع الناتج العشوائي إذا كان أيّ من مصادر القيم الأولية غير قابل للتوقّع.