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

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

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

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

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

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

  • يجب عدم إمكانية الوصول إلى بيانات بصمات الأصابع الأولية أو المشتقات (على سبيل المثال ، القوالب) من خارج برنامج تشغيل المستشعر أو TEE. إذا كان الجهاز يدعم TEE ، فيجب أن يقتصر الوصول إلى الأجهزة على TEE وأن يكون محميًا بسياسة SELinux. يجب أن تكون قناة Serial Peripheral Interface (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 .