טביעת אצבע HIDL

במכשירים עם חיישן טביעת אצבע, משתמשים יכולים לרשום טביעת אצבע אחת או יותר ולהשתמש בטביעת אצבע אלה כדי לפתוח את המכשיר ולבצע משימות אחרות. אנדרואיד משתמשת בשפת הגדרת ממשק החומרה של טביעת אצבע (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. אינטראקציה של דמון טביעות האצבע עם הספרייה הספציפית לספק טביעות האצבע

הנחיות יישום

הנחיות ה-HAL הבאות של טביעת אצבע נועדו להבטיח שנתוני טביעת אצבע לא יודלפו ויוסרו כאשר משתמש מוסר מהמכשיר:

  • אין לגשת לנתוני טביעות אצבע גולמיים או נגזרות (לדוגמה, תבניות) מחוץ למנהל ההתקן של החיישן או ה-TEE. אם החומרה תומכת ב-TEE, הגישה לחומרה חייבת להיות מוגבלת ל-TEE ומוגנת על ידי מדיניות SELinux. ערוץ ה-SPI (Serial Peripheral Interface) חייב להיות נגיש רק ל-TEE וחייבת להיות מדיניות SELinux מפורשת על כל קבצי המכשיר.
  • רכישת טביעות אצבע, הרשמה וזיהוי חייבים להתרחש בתוך ה-TEE.
  • רק את הצורה המוצפנת של נתוני טביעת האצבע ניתן לאחסן במערכת הקבצים, גם אם מערכת הקבצים עצמה מוצפנת.
  • תבניות טביעת אצבע חייבות להיות חתומות עם מפתח פרטי ספציפי למכשיר. עבור תקן הצפנה מתקדם (AES), לכל הפחות יש לחתום על תבנית עם נתיב מערכת הקבצים, הקבוצה ומזהה האצבע המוחלט, כך שקובצי תבנית אינם ניתנים להפעלה במכשיר אחר או עבור כל אדם אחר מלבד המשתמש שרשם אותם ב- אותו מכשיר. לדוגמה, העתקת נתוני טביעת אצבע ממשתמש אחר באותו מכשיר או ממכשיר אחר לא חייבת לפעול.
  • יישום חייב להשתמש בנתיב מערכת הקבצים המסופק על ידי setActiveGroup() או לספק דרך למחוק את כל נתוני תבניות המשתמש כאשר המשתמש מוסר. מומלץ מאוד שקובצי תבניות טביעת אצבע יאוחסנו כמוצפנים ויישמרו בנתיב המסופק. אם זה בלתי אפשרי עקב דרישות אחסון TEE, המיישם חייב להוסיף ווים כדי להבטיח הסרה של הנתונים כאשר המשתמש יוסר.

שיטות טביעת אצבע

ממשק טביעת אצבע 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 .

,

במכשירים עם חיישן טביעת אצבע, משתמשים יכולים לרשום טביעת אצבע אחת או יותר ולהשתמש בטביעת אצבע אלה כדי לפתוח את המכשיר ולבצע משימות אחרות. אנדרואיד משתמשת בשפת הגדרת ממשק החומרה של טביעת אצבע (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. אינטראקציה של דמון טביעות האצבע עם הספרייה הספציפית לספק טביעות האצבע

הנחיות יישום

הנחיות ה-HAL הבאות של טביעת אצבע נועדו להבטיח שנתוני טביעת אצבע לא יודלפו ויוסרו כאשר משתמש מוסר מהמכשיר:

  • אין לגשת לנתוני טביעות אצבע גולמיים או נגזרות (לדוגמה, תבניות) מחוץ למנהל ההתקן של החיישן או ה-TEE. אם החומרה תומכת ב-TEE, הגישה לחומרה חייבת להיות מוגבלת ל-TEE ומוגנת על ידי מדיניות SELinux. ערוץ ה-SPI (Serial Peripheral Interface) חייב להיות נגיש רק ל-TEE וחייבת להיות מדיניות SELinux מפורשת על כל קבצי המכשיר.
  • רכישת טביעות אצבע, הרשמה וזיהוי חייבים להתרחש בתוך ה-TEE.
  • רק את הצורה המוצפנת של נתוני טביעת האצבע ניתן לאחסן במערכת הקבצים, גם אם מערכת הקבצים עצמה מוצפנת.
  • תבניות טביעת אצבע חייבות להיות חתומות עם מפתח פרטי ספציפי למכשיר. עבור תקן הצפנה מתקדם (AES), לכל הפחות יש לחתום על תבנית עם נתיב מערכת הקבצים, הקבוצה ומזהה האצבע המוחלט, כך שקובצי תבנית אינם ניתנים להפעלה במכשיר אחר או עבור כל אדם אחר מלבד המשתמש שרשם אותם ב- אותו מכשיר. לדוגמה, העתקת נתוני טביעת אצבע ממשתמש אחר באותו מכשיר או ממכשיר אחר לא חייבת לפעול.
  • יישום חייב להשתמש בנתיב מערכת הקבצים המסופק על ידי setActiveGroup() או לספק דרך למחוק את כל נתוני תבניות המשתמש כאשר המשתמש מוסר. מומלץ מאוד שקובצי תבניות טביעת אצבע יאוחסנו כמוצפנים ויישמרו בנתיב המסופק. אם זה בלתי אפשרי עקב דרישות אחסון TEE, המיישם חייב להוסיף ווים כדי להבטיח הסרה של הנתונים כאשר המשתמש יוסר.

שיטות טביעת אצבע

ממשק טביעת אצבע 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 .