Authentication

يتضمّن نظام التشغيل Android مفهوم أدوات مصادقة المستخدم التي تُستخدَم لفتح قفل الجهاز ولحصر الوصول إلى مفاتيح التشفير. يتضمّن ذلك المكوّنات التالية:

  • مقدّم خدمة ومساحة تخزين لمفاتيح التشفير تخزِّن هذه الفئة مفاتيح التشفير وتوفّر إجراءات تشفير عادية استنادًا إلى هذه المفاتيح. يتوافق Android مع Keystore المحمي بواسطة الأجهزة وKeyMint (المعروف سابقًا باسم Keymaster) لتقديم خدمات التشفير، بما في ذلك التشفير المحمي بواسطة الأجهزة لتخزين المفاتيح الذي قد يتضمّن بيئة تنفيذ موثوقة (TEE) أو عنصر آمن (SE)، مثل StrongBox.
  • أدوات مصادقة المستخدمين: إثبات تواجد المستخدم و/أو إتمام عملية المصادقة بنجاح يتوافق نظام التشغيل Android مع Gatekeeper للمصادقة باستخدام رقم التعريف الشخصي أو النقش أو كلمة المرور وبصمة الإصبع للمصادقة باستخدام بصمة الإصبع. يمكن للأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android والإصدارات الأحدث استخدام BiometricPrompt كنقطة تكامل واحدة لبصمات الأصابع والمقاييس الحيوية الإضافية. تتواصل هذه المكوّنات مع خدمة تخزين المفاتيح من خلال قناة مصادقة لتحديد حالة المصادقة. (يتم أيضًا توفير نظام Android Keystore على مستوى إطار العمل من خلال خدمة Keystore).

كل مكوّن من هذه المكوّنات خاص بالمورّد، ولكن يجب أن يتوافق تنفيذ المورّد مع مواصفات واجهة طبقة تجريد الأجهزة (HAL)، وأن يجتاز اختبارات مجموعة اختبارات المورّد (VTS) ذات الصلة.

يتم عادةً تقسيم عمليات التنفيذ الخاصة بالمورّدين إلى جزأين أيضًا، ويربط بينهما آلية تواصل خاصة بالمورّد :

  • يتم تشغيل خدمة HAL كعملية لنظام Android، وتتلقّى طلبات Binder من نظام Android.
  • يعمل التطبيق الموثوق (TA) في البيئة الآمنة، وينفّذ العمليات الآمنة الفعلية.

التسجيل

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

على المستخدم الذي يريد تغيير بيانات اعتماد حالية تقديم بيانات الاعتماد هذه. في حال إثبات صحة بيانات اعتماد حالية بنجاح، يتم نقل رقم تعريف الأمان (SID) الخاص بالمستخدم والمرتبط ببيانات الاعتماد الحالية إلى بيانات الاعتماد الجديدة، ما يتيح للمستخدم مواصلة الوصول إلى المفاتيح بعد تغيير بيانات الاعتماد.

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

المصادقة

يوضّح هذا القسم مسار مصادقة نموذجيًا يتضمّن تفاعلات بين عدة مكوّنات في كل من نظام التشغيل Android وبيئة الأمان. يُرجى العِلم أنّ جميع المكوّنات الآمنة تشترك في مفتاح HMAC سري (لكل عملية تشغيل) تستخدمه للمصادقة على رسائل بعضها البعض.

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

الشكل 1. عملية المصادقة

  1. يقدّم المستخدم طريقة مصادقة وتُرسل الخدمة المرتبطة بها طلبًا إلى خدمة HAL.
    • بالنسبة إلى رقم التعريف الشخصي أو النقش أو كلمة المرور، يرسل التطبيق LockSettingsService طلبًا إلى gatekeeperd.
    • تعتمد إجراءات المصادقة المستندة إلى المقاييس الحيوية على إصدار Android. على الأجهزة التي تعمل بالإصدار 8.x من نظام التشغيل Android والإصدارات الأقدم، يرسل FingerprintService طلبًا إلى fingerprintd. أما على الأجهزة التي تعمل بالإصدار 9 من نظام التشغيل Android والإصدارات الأحدث، فيرسل BiometricPrompt طلبًا إلى برنامج الخدمة المناسب للقياسات الحيوية (على سبيل المثال، fingerprintd لبصمات الأصابع أو faced للتعرّف على الوجه) باستخدام فئة BiometricManager المناسبة، مثل FingerprintManager أو FaceManager. بغض النظر عن الإصدار، تتم المصادقة بالمقاييس الحيوية بشكل غير متزامن بعد إرسال الطلب.
  2. ترسل خدمة HAL البيانات إلى TA المقابل، الذي ينشئ AuthToken:
    • لإجراء المصادقة باستخدام رقم التعريف الشخصي أو النقش أو كلمة المرور، يرسل gatekeeperd تجزئة رقم التعريف الشخصي أو النقش أو كلمة المرور إلى Gatekeeper TA في بيئة التنفيذ الموثوقة (TEE) من خلال خدمة Gatekeeper HAL. في حال نجاح المصادقة في بيئة التنفيذ الموثوقة (TEE)، ستصدر Gatekeeper TA رمز AuthToken يحتوي على معرّف الأمان (SID) الخاص بالمستخدم (موقّع باستخدام مفتاح HMAC المشترك).
    • بالنسبة إلى المصادقة ببصمة الإصبع، يستمع fingerprintd إلى أحداث بصمة الإصبع ويرسل البيانات إلى تطبيق Fingerprint TA في بيئة التنفيذ الموثوقة (TEE) من خلال طبقة تجريد الأجهزة (HAL) الخاصة ببصمة الإصبع. في حال نجاح المصادقة في بيئة التنفيذ الموثوقة (TEE)، ستصدر خدمة Fingerprint TA رمز AuthToken (موقّع باستخدام مفتاح AuthToken HMAC).
    • بالنسبة إلى المصادقة الأخرى بالمقاييس الحيوية، تستمع قائمة برامج التشغيل المناسبة للمقاييس الحيوية إلى حدث المقاييس الحيوية وترسله إلى خدمة HAL المناسبة للمقاييس الحيوية وإلى البيئة التنفيذية الموثوقة.
  3. يتلقّى البرنامج الخفي AuthToken موقّعًا ويُمرّره إلى خدمة تخزين المفاتيح من خلال إضافة إلى واجهة Binder الخاصة بخدمة تخزين المفاتيح. (يرسل gatekeeperd أيضًا إشعارًا إلى خدمة تخزين المفاتيح عند إعادة قفل الجهاز وعند تغيير كلمة مرور الجهاز).
  4. تنقل خدمة Keystore رموز AuthToken إلى KeyMint وتتحقّق منها باستخدام المفتاح المشترَك مع Gatekeeper ومكوّن TEE المتوافق مع المقاييس الحيوية. تثق KeyMint بالطابع الزمني في الرمز المميز باعتباره آخر وقت للمصادقة، وتستند في قرار إصدار المفتاح (للسماح لأحد التطبيقات باستخدام المفتاح) إلى الطابع الزمني.

لا يتطلّب مسار المصادقة التواصل المباشر بين التطبيقات الموثوقة في البيئة الآمنة، بل تنتقل رموز AuthToken من تطبيق المصادقة الموثوق إلى خدمة keystore2 في Android، والتي بدورها تنقلها إلى تطبيق KeyMint الموثوق. يسمح ذلك أيضًا لخدمة keystore2 برفض الطلبات التي من المحتمل أن تفشل بسرعة، لأنّها على دراية برموز AuthToken المتوفّرة في النظام، ما يؤدي إلى توفير عملية IPC التي قد تكون مكلفة في TEE.

تنسيق AuthToken

يتم تحديد تنسيق AuthToken من خلال مواصفات AIDL في HardwareAuthToken.aidl.

تسلسل خطوات تشغيل الجهاز

في كل مرة يتم فيها تشغيل الجهاز، يجب إنشاء مفتاح HMAC الخاص برمز AuthToken ومشاركته مع جميع مكونات TEE (مثل Gatekeeper وKeyMint وtrustlet المقاييس الحيوية المتوافقة). وبالتالي، لتوفير حماية إضافية ضد هجمات إعادة الإرسال، يجب إنشاء مفتاح HMAC بشكل عشوائي في كل مرة تتم فيها إعادة تشغيل الجهاز.

هناك طريقتان شائعتان يحصل من خلالهما المساعدون التدريسيون على مفتاح HMAC المشترك هذا:

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

في كلتا الحالتين، يجب ألا يتم إتاحة مفتاح HMAC خارج بيئة التنفيذ الموثوقة.

نظام التشغيل Trusty، الذي يعمل بجانب نظام التشغيل Android، هو مثال على بيئة تنفيذ موثوقة، ولكن يمكن استخدام بيئات تنفيذ موثوقة أخرى بدلاً منه. يستخدم Trusty نظام IPC داخليًا للتواصل مباشرةً بين KeyMint وGatekeeper أو trustlet المناسب للمصادقة البيومترية. يتم الاحتفاظ بمفتاح HMAC في KeyMint فقط، وتطلب خدمتا Fingerprint وGatekeeper المفتاح من KeyMint في كل مرة يتم استخدامه فيها، ولا يتم الاحتفاظ بالقيمة أو تخزينها مؤقتًا.

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