توفّر طبقة تجريد الأجهزة (HAL) في Weaver (IWeaver.aidl)، والتي تم طرحها في نظام Android 8.1، واجهة آمنة لمصادقة المستخدمين باستخدام عامل معرفة شاشة القفل (LSKF)، مثل رقم التعريف الشخصي والنمط وكلمة المرور.
يحلّ Weaver محل وظيفة التحقّق من LSKF في Gatekeeper. ومع ذلك، لا يزال Gatekeeper يُستخدم لإنشاء رموز مميزة للمصادقة على الأجهزة.
في نظام التشغيل Android 9 والإصدارات الأحدث، يتطلب المستند التعريفي المتوافق مع Android (CDD) 9.11.2 أن توفّر الأجهزة المتوافقة مع StrongBox أجهزة آمنة مخصّصة تتيح مصادقة المستخدم الآمنة. يؤدي تنفيذ Weaver HAL باستخدام هذه الأجهزة الآمنة إلى استيفاء شرط "مصادقة المستخدم الآمنة".
على الأجهزة التي لا تتضمّن عنصر أمان (SE) مخصّصًا، يمكن تنفيذ Weaver في بيئة تنفيذ موثوقة (TEE) مثل Trusty.
في الإصدار 17 من نظام التشغيل Android والإصدارات الأحدث، يُنصح بشدة بتنفيذ Weaver حتى على الأجهزة التي لا تتضمّن عنصر أمان مخصّصًا.
المكونات
يتألف Weaver من ثلاثة مكوّنات:
- واجهة Weaver AIDL (
IWeaver): المواصفات الرسمية لطبقة HAL. كانت الإصدارات Android 13 والإصدارات الأقدم تستخدم HIDL بدلاً من AIDL. - خدمة Weaver Hardware Abstraction Layer (HAL):
هي عملية Android خاصة بالمورّد تنفّذ واجهة
IWeaver. - تطبيق Weaver الموثوق (TA): المنطق الأساسي الذي يتم تنفيذه في بيئة آمنة ويجري عملية التحقّق من LSKF ويفرض قيودًا على المعدّل. تتواصل خدمة HAL مع البيئة التنفيذية الموثوقة (TA) باستخدام قناة آمنة خاصة بالتنفيذ.
واجهة البث المباشر
تعرض واجهة Weaver صفيفًا ثابت الحجم من الخانات الثابتة، يحتوي كل منها على مفتاح ثابت الحجم وقيمة ثابتة الحجم. يتم تحديد كل خانة من خلال معرّفها، وهو عدد صحيح في الفاصل الزمني [0, numSlots - 1]. لا يمكن الوصول إلى قيمة الخانة إلا عند تقديم مفتاح مطابق للمفتاح المخزّن.
تتألف واجهة Weaver بشكل أساسي من:
getConfig(): تستردّ عدد الخانات وحجم المفتاح وحجم القيمة المتوافقَين مع عملية التنفيذ.write(): تستبدل هذه السمة الخانة المحدّدة بزوج جديد من المفتاح والقيمة. هذه العملية ذرية وتجعل البيانات السابقة غير قابلة للاسترداد نهائيًا (حذف آمن).read(): تحاول استرداد قيمة الخانة المحدّدة. لا ينجح ذلك إلا عندما لا يكون المهلة الزمنية للحدّ من معدّل الاستخدام (التي تفرضها TA) نشطة، وعندما يتطابق المفتاح المقدَّم تمامًا مع المفتاح المخزَّن.-
warmUp(): في الإصدار 17 من نظام التشغيل Android والإصدارات الأحدث، تنقل هذه السمة تلميحًا بأنّه قد تحدث عملية قراءة أو كتابة قريبًا.
للاطّلاع على مواصفات الواجهة الكاملة، يُرجى الرجوع إلى
IWeaver.aidl.
الاستخدام من خلال Android
عند توفّر عملية تنفيذ Weaver، يستخدمها LockSettingsService في خادم نظام Android لحماية بيانات المستخدم. بالنسبة إلى كل مستخدم على الجهاز، يدير LockSettingsService خانة Weaver:
- مفتاح الفتحة (
weaverKey): هو قيمة تجزئة لمفتاح LSKF الخاص بالمستخدم. إذا لم يكن لدى المستخدم قفل شاشة، سيتم استخدام سلسلة تلقائية. - قيمة الخانة (
weaverSecret): عبارة عن سر تشفيري عالي الإنتروبيا يتم إنشاؤه بشكل عشوائي.
تم تصميم weaverSecret بحيث يمكن استرداده فقط من خلال إحدى الطريقتين التاليتين:
- توفير
weaverKeyالصحيح إلى Weaver TA ضمن سياسة الحدّ الأقصى لعدد الطلبات. - اختراق البيئة الآمنة التي يتم فيها تشغيل Weaver TA وهذا الإجراء يهدف إلى أن يكون صعبًا للغاية.
يستخدم LockSettingsService كلاً من weaverKey وweaverSecret لتشفير "كلمة المرور الاصطناعية" الخاصة بالمستخدم. بما أنّ
كلمة المرور الاصطناعية تحمي مساحة التخزين المشفّرة ببيانات الاعتماد (CE)
للتشفير المستند إلى الملفات (FBE)
والمفاتيح المرتبطة بالمصادقة في Android Keystore،
تظل البيانات غير قابلة للوصول إليها إلى أن تكشف Weaver عن السر.
في نظام التشغيل Android 17 والإصدارات الأحدث،
تستدعي LockSettingsService الطريقة warmUp() في Weaver
عندما يبدأ إدخال مفتاح LSKF. يمكن أن تستخدم عمليات تنفيذ Weaver هذه الإشارة
لإخراج الأجهزة الآمنة من حالة الطاقة المنخفضة بهدف تقليل وقت الاستجابة
لطلب read() وشيك.
Weaver vs. Gatekeeper
في السابق، كان Gatekeeper HAL يؤدي دورَين مختلفَين في مكالمة verify() واحدة:
- التحقّق: التحقّق من LSKF، مع فرض قيود على عدد الطلبات باستخدام TEE.
- التصديق: إصدار
HardwareAuthTokenلإعلام KeyMint (المعروف سابقًا باسم Keymaster) بأنّ مصادقة LSKF قد نجحت.
لماذا تم الانتقال إلى Weaver؟
مع طرح رموز إعادة ضبط رمز المرور الآمنة في نظام التشغيل Android 8.1، أصبحت "كلمة المرور الاصطناعية" هي سر التشفير الأساسي. يتم الآن التعامل مع الدورَين الموضّحَين أعلاه من خلال عمليات تسجيل منفصلة في Gatekeeper، إحداها لـ LSKF ضمن userId + 100000 والأخرى لـ Synthetic Password ضمن userId.
تم طرح Weaver لتولّي الدور الأول، وذلك باستخدام واجهة HAL أبسط تتوافق مع عمليات التنفيذ المستندة إلى "العنصر الآمن" (SE).
| الميزة | Weaver | موظف الاستقبال |
|---|---|---|
| الحذف الآمن | ويجب إجراء عملية حذف آمنة، ويسهل تنفيذها لأنّ الواجهة تستخدم عددًا ثابتًا من الخانات ذات الحجم الثابت. | لا يُشترط الحذف الآمن، كما أنّه يصعب تنفيذه لأنّ الواجهة تتيح عددًا غير محدود من عمليات التسجيل. |
| الأجهزة | تم تحسينها لمحركات البحث، ولكنّها تعمل أيضًا في البيئات التنفيذية الموثوقة (TEE). | فعليًا، لا يمكن استخدام سوى TEE. لا يوفّر تنفيذها في بيئة تنفيذ آمنة أي مزايا أمان مع التصميم الحالي. |
| التعامل مع الأخطاء | رموز خطأ أكثر وضوحًا | رموز الخطأ غير الواضحة ونتيجةً لذلك، لا تفرّق شاشة القفل بين أخطاء LSKF غير الصحيحة والأخطاء غير ذات الصلة. |
| التنفيذ الذري | يُجري الرمز البرمجي في LockSettingsService الذي يستخدم Weaver تغييرات LSKF بشكل ذري. تتم كتابة البيانات الجديدة في خانة Weaver جديدة، ولا يتم محو الخانة القديمة إلا عندما يكون ذلك آمنًا. |
لا ينفّذ الرمز البرمجي في LockSettingsService الذي يستخدم Gatekeeper تغييرات LSKF بشكل متزامن. قد يتم فقدان جميع بيانات المستخدم إذا حدث خطأ أثناء تغيير LSKF. |
الرمز المرجعي
يحتوي AOSP على مرجعَين لتنفيذ Weaver:
-
في الإصدار 17 من نظام التشغيل Android والإصدارات الأحدث،
system/weaver/يتضمّن عملية تنفيذ Weaver للبيئات الآمنة العامة. -
في الإصدار 8.1 من نظام التشغيل Android والإصدارات الأحدث،
external/libese/يتضمّن عملية تنفيذ Weaver للعناصر الآمنة المتوافقة مع معيار ISO/IEC7816-4.
الاختبار
للتحقّق من صحة عملية تنفيذ Weaver، استخدِم VtsHalWeaverTargetTest:
atest VtsHalWeaverTargetTest
أو:
vts-tradefed run vts -m VtsHalWeaverTargetTest