بصمة 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 وKeymaster تشفيرًا مدعومًا بالأجهزة لتخزين المفاتيح بشكل آمن في بيئة آمنة، مثل بيئة التنفيذ الموثوقة (TEE).
تدفق البيانات لمصادقة بصمات الأصابع
الشكل 1. تدفق البيانات عالي المستوى لمصادقة بصمات الأصابع

يجب أن يستخدم تطبيق HAL الخاص بالمورد بروتوكول الاتصال المطلوب بواسطة TEE. يجب عدم تمرير الصور الأولية وميزات بصمات الأصابع المعالجة إلى ذاكرة غير موثوق بها. يجب تخزين جميع هذه البيانات البيومترية في الأجهزة الآمنة مثل TEE. يجب ألا يكون التجذير قادرًا على تعريض البيانات البيومترية للخطر.

تقوم FingerprintService وبصمة fingerprintd بإجراء مكالمات من خلال Fingerprint HAL إلى المكتبة الخاصة بالبائع لتسجيل بصمات الأصابع وإجراء عمليات أخرى.

التفاعل مع بصمات الأصابع
الشكل 2. تفاعل برنامج بصمات الأصابع مع المكتبة الخاصة ببائع بصمات الأصابع

المبادئ التوجيهية للتنفيذ

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

  • لا يجوز مطلقًا الوصول إلى بيانات بصمة الإصبع الأولية أو مشتقاتها (على سبيل المثال، القوالب) من خارج برنامج تشغيل المستشعر أو TEE. إذا كان الجهاز يدعم TEE، فيجب أن يقتصر الوصول إلى الأجهزة على TEE ومحميًا بواسطة سياسة SELinux. يجب أن تكون قناة الواجهة الطرفية التسلسلية (SPI) متاحة فقط لـ TEE ويجب أن تكون هناك سياسة 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 في حالة انشغال، فسيتم حظر الوظيفة حتى يغادر HAL حالة الانشغال.
postEnroll() إنهاء عملية التسجيل وإبطال اختبار preEnroll() ‎ الذي تم إنشاؤه. يجب أن يتم استدعاؤه في نهاية جلسة تسجيل الأصابع المتعددة للإشارة إلى أنه لا يمكن إضافة المزيد من الأصابع.

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