حياكة

توفر طبقة تجريد الأجهزة (HAL) في Weaver‏ (IWeaver.aidl)، التي تم طرحها في Android 8.1، واجهة آمنة لمصادقة المستخدمين باستخدام عامل المعرفة لقفل الشاشة (LSKF)، مثل رقم التعريف الشخصي والنمط وكلمة المرور.

يحلّ Weaver محلّ وظيفة التحقّق من عامل المعرفة لقفل الشاشة في Gatekeeper. ومع ذلك، لا يزال Gatekeeper يُستخدم لإنشاء رموز مصادقة الأجهزة.

في Android 9 والإصدارات الأحدث، يتطلّب مستند توافق Android (CDD) 9.11.2 من الأجهزة التي تتوافق مع StrongBox توفير أجهزة آمنة مخصّصة تدعم مصادقة المستخدمين الآمنة. ويستوفي تنفيذ طبقة تجريد الأجهزة في Weaver باستخدام هذه الأجهزة الآمنة متطلّب "مصادقة المستخدمين الآمنة".

على الأجهزة التي لا تتضمّن عنصرًا آمنًا مخصّصًا (SE)، يمكن مع ذلك تنفيذ Weaver في بيئة تنفيذ موثوقة (TEE) مثل Trusty.

المكونات

يتألّف Weaver من ثلاثة مكوّنات:

  • واجهة Weaver AIDL‏ (IWeaver): المواصفات الرسمية لطبقة تجريد الأجهزة. في Android 13 والإصدارات الأقدم، تم استخدام HIDL بدلاً من AIDL.
  • خدمة طبقة تجريد الأجهزة في Weaver: عملية Android خاصة بالمورِّد تنفّذ الواجهة IWeaver.
  • التطبيق الموثوق في Weaver‏ (TA): المنطق الأساسي الذي يتم تشغيله في بيئة آمنة. يتحقّق من عامل المعرفة لقفل الشاشة ويفرض تحديد المعدّل. تتواصل خدمة طبقة تجريد الأجهزة مع التطبيق الموثوق باستخدام قناة آمنة خاصة بالتنفيذ.

واجهة البث المباشر

تقدّم واجهة Weaver مصفوفة ثابتة الحجم من الخانات الثابتة، تحتوي كل منها على مفتاح ثابت الحجم وقيمة ثابتة الحجم. يتم تحديد كل خانة من خلال رقم تعريفها، وهو عدد صحيح في الفترة [0, numSlots - 1]. لا يمكن الوصول إلى قيمة الخانة إلا عند تقديم مفتاح يطابق المفتاح المخزّن.

تتألّف واجهة Weaver مما يلي:

  • getConfig(): تسترد عدد الخانات وحجم المفتاح وحجم القيمة التي يتيحها التنفيذ.
  • write(): تستبدل الخانة المحدّدة بزوج جديد من المفتاح والقيمة. هذه العملية ذرّية وتجعل البيانات السابقة غير قابلة للاسترداد نهائيًا (الحذف الآمن).
  • read(): تحاول استرداد قيمة الخانة المحدّدة. تنجح هذه العملية فقط عندما لا يكون مهلة تحديد المعدّل (التي يفرضها التطبيق الموثوق) نشطة وكان المفتاح المقدَّم يطابق تمامًا المفتاح المخزّن.

للاطّلاع على مواصفات الواجهة الكاملة، يُرجى الرجوع إلى IWeaver.aidl.

استخدام Android

عندما يتوفّر تنفيذ Weaver، تستخدمه LockSettingsService في خادم نظام Android لحماية بيانات المستخدمين. بالنسبة إلى كل مستخدم على الجهاز، تدير LockSettingsService خانة Weaver:

  • مفتاح الخانة (weaverKey): قيمة تجزئة لعامل المعرفة لقفل الشاشة الخاص بالمستخدم. إذا لم يكن لدى المستخدم قفل شاشة، يتم استخدام سلسلة تلقائية.
  • قيمة الخانة (weaverSecret): سرّ تشفيري عشوائي تم إنشاؤه بدرجة عالية من العشوائية.

تم تصميم weaverSecret بحيث لا يمكن استرداده إلا من خلال إحدى الطريقتَين التاليتَين:

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

تستخدم LockSettingsService كلاً من weaverKey وweaverSecret لتشفير كلمة المرور الاصطناعية للمستخدم. بما أنّ كلمة المرور الاصطناعية تحمي مساحة التخزين المشفّرة ببيانات الاعتماد (CE) للمستخدم من أجل التشفير المستند إلى الملفات (FBE) والمفاتيح المرتبطة بالمصادقة الخاصة بالمستخدم في Android Keystore، تظل البيانات غير قابلة للوصول إليها إلى أن يحرّر Weaver السرّ.

Weaver في مقابل Gatekeeper

من الناحية التاريخية، كانت طبقة تجريد الأجهزة في Gatekeeper تؤدي دورَين مختلفَين في طلب verify() واحد:

  1. التحقّق: التحقّق من عامل المعرفة لقفل الشاشة، مع تحديد المعدّل الذي تفرضه بيئة التنفيذ الموثوقة.
  2. التصديق: إصدار HardwareAuthToken لإعلام KeyMint (المعروف سابقًا باسم Keymaster) بأنّ مصادقة عامل المعرفة لقفل الشاشة قد نجحت.

لماذا تم الانتقال إلى Weaver؟

مع طرح رموز إعادة ضبط رمز المرور الآمنة في Android 8.1، أصبحت "كلمة المرور الاصطناعية" هي السرّ التشفيري الأساسي. يتم الآن التعامل مع الدورَين الموضّحَين أعلاه من خلال عمليتَي تسجيل منفصلتَين في Gatekeeper، إحداهما لعامل المعرفة لقفل الشاشة ضمن userId + 100000 والأخرى لكلمة المرور الاصطناعية ضمن userId.

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

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

الرمز المرجعي

يتوفّر الرمز المرجعي لعمليات تنفيذ Weaver في العناصر الآمنة المتوافقة مع ISO/IEC7816-4 في AOSP: external/libese/.

الاختبار

للتحقّق من عملية تنفيذ Weaver، استخدِم VtsHalWeaverTargetTest:

atest VtsHalWeaverTargetTest

أو:

vts-tradefed run vts -m VtsHalWeaverTargetTest