Fingerprint HIDL

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

لتنفيذ Fingerprint HIDL، يجب تنفيذ IBiometricsFingerprint.hal في مكتبة خاصة بالمورّد.

مطابقة بصمة الإصبع

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

  1. يضع المستخدم إصبعًا على مستشعر بصمات الأصابع.
  2. تحدّد المكتبة الخاصة بالمورّد ما إذا كان هناك تطابق مع بصمة الإصبع في المجموعة الحالية من نماذج بصمات الأصابع المسجّلة.
  3. يتم تمرير النتائج المطابقة إلى FingerprintService.

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

هندسة معمارية

يتفاعل Fingerprint HAL مع المكوّنات التالية.

  • يتفاعل BiometricManager مباشرةً مع تطبيق في عملية التطبيق. يحتوي كل تطبيق على مثيل من IBiometricsFingerprint.hal
  • تعمل FingerprintService في عملية النظام التي تتعامل مع الاتصال بواجهة HAL الخاصة ببصمة الإصبع.
  • Fingerprint HAL هو تطبيق C/C++ لواجهة IBiometricsFingerprint HIDL. يحتوي هذا الملف على المكتبة الخاصة بالمورّد التي تتواصل مع الأجهزة الخاصة بالجهاز.
  • توفّر مكوّنات Keystore API وKeyMint (المعروفة سابقًا باسم Keymaster) تشفيرًا مستندًا إلى الأجهزة لتخزين المفاتيح بشكل آمن في بيئة آمنة، مثل بيئة التنفيذ الموثوقة (TEE).
تدفّق البيانات للمصادقة ببصمة الإصبع
الشكل 1. مخطّط تدفّق البيانات العالي المستوى للمصادقة ببصمة الإصبع

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

تجري FingerprintService وfingerprintd مكالمات من خلال Fingerprint HAL إلى المكتبة الخاصة بالمورّد لتسجيل بصمات الأصابع وتنفيذ عمليات أخرى.

التفاعل مع fingerprintd
الشكل 2. تفاعل برنامج الخدمة لبصمة الإصبع مع مكتبة بصمة الإصبع الخاصة بالمورّد

إرشادات التنفيذ

تم تصميم إرشادات Fingerprint HAL التالية لضمان عدم تسريب بيانات بصمة الإصبع وإزالتها عند إزالة مستخدم من الجهاز:

  • يجب ألا يكون من الممكن الوصول إلى بيانات بصمات الأصابع الأولية أو مشتقاتها (مثل النماذج) من خارج برنامج تشغيل جهاز الاستشعار أو بيئة التنفيذ الموثوقة (TEE). إذا كان الجهاز يتوافق مع بيئة تنفيذ موثوقة (TEE)، يجب اقتصار إمكانية الوصول إلى الجهاز على TEE فقط وحمايته بموجب سياسة SELinux. يجب أن يكون بإمكان TEE فقط الوصول إلى قناة Serial Peripheral Interface (SPI)، ويجب أن تكون هناك سياسة SELinux صريحة على جميع ملفات الجهاز.
  • يجب أن يتم الحصول على بصمة الإصبع وتسجيلها والتعرّف عليها داخل TEE.
  • لا يتم تخزين بيانات بصمة الإصبع على نظام الملفات إلا بشكل مشفر حتى وإن كان نظام الملفات نفسه قد تم تشفيره.
  • يجب توقيع نماذج بصمات الأصابع باستخدام مفتاح خاص خاص بالجهاز. بالنسبة إلى مقاييس التشفير المتقدّمة (AES)، يجب على الأقل توقيع نموذج باستخدام المسار المطلق لنظام الملفات والمجموعة ورقم تعريف البصمة، وذلك لضمان عدم إمكانية تشغيل ملفات النماذج على جهاز آخر أو من قِبل أي شخص آخر غير المستخدم الذي سجّل البصمة على الجهاز نفسه. فعلى سبيل المثال، يجب ألا ينجح تنفيذ عملية نسخ بيانات بصمة الإصبع من مستخدم آخر على نفس الجهاز أو من جهاز آخر.
  • يجب أن تستخدم عمليات التنفيذ إما مسار نظام الملفات الذي توفّره الدالة setActiveGroup() أو أن توفّر طريقة لمحو جميع بيانات نماذج المستخدمين عند إزالة المستخدم. ننصح بشدة بتخزين ملفات نموذج بصمة الإصبع بشكل مشفّر وفي المسار المقدَّم. إذا كان ذلك غير ممكن بسبب متطلبات التخزين في بيئة التنفيذ الموثوقة (TEE)، على المطوّر إضافة نقاط ربط لضمان إزالة البيانات عند إزالة المستخدم.

طُرق بصمة الإصبع

تحتوي واجهة Fingerprint HIDL على الطرق الرئيسية التالية في IBiometricsFingerprint.hal.

الطريقة الوصف
enroll() تؤدي إلى تبديل آلة الحالة في طبقة HAL لبدء جمع نموذج بصمة الإصبع وتخزينه. عند اكتمال عملية التسجيل، أو بعد انتهاء المهلة، تعود آلة الحالة HAL إلى حالة الخمول.
preEnroll() تنشئ هذه الطريقة رمزًا مميزًا فريدًا للإشارة إلى بدء عملية تسجيل بصمة الإصبع. توفّر رمزًا مميزًا للدالة enroll لضمان إجراء مصادقة مسبقة، مثلاً باستخدام كلمة مرور. لمنع التلاعب، يتم تغليف الرمز المميّز بعد تأكيد بيانات اعتماد الجهاز. يجب التحقّق من الرمز المميّز أثناء التسجيل للتأكّد من أنّه لا يزال صالحًا.
getAuthenticatorId() تعرض هذه الطريقة رمزًا مميزًا مرتبطًا بمجموعة بصمات الأصابع الحالية.
cancel() يلغي هذا الرمز عمليات التسجيل أو المصادقة المعلّقة. يتم إعادة آلة الحالة الخاصة بطبقة HAL إلى حالة عدم النشاط.
enumerate() طلب متزامن لتعداد جميع نماذج بصمات الأصابع المعروفة.
remove() يحذف هذا الإجراء نموذج بصمة إصبع.
setActiveGroup() تقصر هذه السمة عملية HAL على مجموعة من بصمات الأصابع التي تنتمي إلى مجموعة محدّدة، ويتم تحديدها من خلال معرّف المجموعة (GID).
authenticate() تتم مصادقة عملية مرتبطة ببصمة الإصبع (يتم تحديدها من خلال رقم تعريف العملية).
setNotify() تسجِّل هذه السمة دالة مستخدم تتلقّى إشعارات من طبقة HAL. إذا كانت آلة الحالة في طبقة تجريد الأجهزة (HAL) في حالة انشغال، سيتم حظر الدالة إلى أن تخرج طبقة تجريد الأجهزة من حالة الانشغال.
postEnroll() تنهي هذه الطريقة عملية التسجيل وتبطل التحدي الذي تم إنشاؤه preEnroll(). يجب استدعاء هذا الإجراء في نهاية جلسة تسجيل بصمات متعددة للإشارة إلى أنّه لا يمكن إضافة المزيد من الأصابع.

لمزيد من التفاصيل حول هذه الأذونات، يُرجى الرجوع إلى التعليقات في IBiometricsFingerprint.hal.