אימות פנים HIDL

סקירה כללית

אימות פנים מאפשר למשתמשים לבטל את נעילת המכשיר שלהם פשוט על ידי התבוננות בחזית המכשיר שלהם. אנדרואיד 10 מוסיפה תמיכה בערימת אימות פנים חדשה שיכולה לעבד באופן מאובטח מסגרות מצלמה, תוך שמירה על אבטחה ופרטיות במהלך אימות פנים בחומרה נתמכת. אנדרואיד 10 מספקת גם דרך קלה להטמעות תואמות אבטחה כדי לאפשר אינטגרציה של יישומים עבור עסקאות, כגון בנקאות מקוונת או שירותים אחרים.

מחסנית אימות הפנים של אנדרואיד היא יישום חדש באנדרואיד 10. המימוש החדש מציג את ממשקי IBiometricsFace.hal , IBiometricsFaceClientCallback.hal ו- types.hal .

ארכיטקטורה

ה-API של BiometricPrompt כולל את כל האימות הביומטרי כולל פנים, אצבע וקשתית העין. Face HAL מקיים אינטראקציה עם הרכיבים הבאים.

מחסנית ביומטרית
איור 1. מחסנית ביומטרית

FaceManager

FaceManager הוא ממשק פרטי ששומר על קשר עם FaceService . הוא משמש את Keyguard כדי לגשת לאימות פנים עם ממשק משתמש מותאם אישית. לאפליקציות אין גישה ל-FaceManager ועליהן להשתמש BiometricPrompt במקום זאת.

FaceService

זהו יישום המסגרת שמנהל את הגישה לחומרת אימות הפנים. הוא מכיל מכונות מצב הרשמה ואימות בסיסיות, כמו גם עוזרים שונים אחרים (לדוגמה, ספירה). בגלל חששות יציבות ואבטחה, קוד ספק אינו מורשה לפעול בתהליך זה. כל קוד הספק נגיש דרך ממשק Face 1.0 HIDL .

מתמודד

זהו קובץ הפעלה לינוקס המיישם את ממשק Face 1.0 HIDL המשמש את FaceService . הוא רושם את עצמו כ-IBiometricsFace@1.0 כדי ש- FaceService יוכל למצוא אותו.

יישום

פנים HIDL

כדי ליישם את Face HIDL, עליך ליישם את כל השיטות של IBiometricsFace.hal בספרייה ספציפית לספק.

הודעות שגיאה

הודעות שגיאה נשלחות באמצעות התקשרות חוזרת ומחזירות את מכונת המצב למצב סרק לאחר שליחתן. לרוב ההודעות יש מחרוזת מתאימה הפונה למשתמש כדי ליידע את המשתמש על השגיאה, אך לא לכל השגיאות יש מחרוזת הפונה למשתמש. למידע נוסף על הודעות שגיאה, ראה types.hal . כל הודעות השגיאה מייצגות מצב מסוף, כלומר המסגרת מניחה שה-HAL חוזר למצב סרק לאחר שליחת הודעת שגיאה.

הודעות רכישה

הודעות רכישה מועברות במהלך הרשמה או אימות ונועדו להנחות את המשתמש לקראת הרשמה או אימות מוצלחים. לכל סידור יש הודעה משויכת מהקובץ FaceAuthenticationManager.java . ניתן להוסיף הודעות ספציפיות לספק כל עוד מסופקות מחרוזות העזרה המתאימות. הודעות רכישה אינן מצבים סופניים כשלעצמם; ה-HAL צפוי לשלוח כמה שיותר מהם כדי להשלים את ההרשמה או האימות הנוכחיים. אם הודעת רכישה מביאה למצב מסוף שבו לא ניתן להתקדם, אזי ה-HAL צריך לעקוב אחר הודעות הרכישה עם הודעת שגיאה, למשל, כאשר התמונה כהה מדי ונשארת כהה מדי כדי להתקדם. במקרה זה, סביר לשלוח UNABLE_TO_PROCESS לאחר שבוצעו מספר ניסיונות אך לא ניתן להתקדם.

חוּמרָה

כדי שמכשירים יעמדו בדרישות הביומטריות החזקות עבור אנדרואיד 10, עליהם להיות בעלי חומרה מאובטחת כדי להבטיח את שלמות נתוני הפנים ואת השוואת האימות האולטימטיבית. מסמך הגדרת התאימות ל-Android (CDD) מתאר את רמת האבטחה הנדרשת ואת שיעור קבלת הזיוף המקובל (SAR) הנדרש. נדרשת סביבת ביצוע מהימנה (TEE) לעיבוד וזיהוי מאובטחים. בנוסף, נדרשת חומרת מצלמה מאובטחת כדי למנוע התקפות הזרקה על אימות פנים. לדוגמה, דפי הזיכרון המשויכים לנתוני תמונה יכולים להיות מורשים ומסומנים לקריאה בלבד כך שרק חומרת המצלמה יכולה לעדכן אותם. באופן אידיאלי, לאף תהליך לא צריך להיות גישה מלבד TEE והחומרה.

מכיוון שחומרת אימות פנים משתנה במידה ניכרת, יש צורך לפתח מנהלי התקנים ספציפיים לחומרה כדי לאפשר אימות פנים, בהתאם לארכיטקטורת ההתקן הספציפית. ככזה, אין יישום ייחוס עבור faced .

שיטות

השיטות הבאות כולן אסינכרוניות וחייבות לחזור מיד למסגרת. אי ביצוע זה גורם למערכת איטית ולאיפוס פוטנציאלי של Watchdog. מומלץ לקיים תור הודעות עם שרשורים מרובים כדי למנוע חסימת המתקשר. כל בקשות GET צריכות לשמור מידע במטמון במידת האפשר כך שהמתקשר נחסם לפרק זמן מינימלי.

שיטה תיאור
setCallback() נקרא על ידי FaceService כדי להחזיר את כל ההודעות לעצמה.
setActiveUser() מגדיר את המשתמש הפעיל, שכל פעולות ה-HAL הבאות מיושמות. האימות הוא תמיד עבור משתמש זה עד ששיטה זו תיקרא שוב.
revokeChallenge() מסיים את העסקה המאובטחת על ידי ביטול תוקף האתגר שנוצר על ידי generateChallenge() .
enroll() רושם פנים של משתמש.
cancel() מבטל את הפעולה הנוכחית (לדוגמה, הרשמה, אימות, הסרה או ספירה) וחוזר faced סרק.
enumerate() מונה את כל תבניות הפנים המשויכות למשתמש הפעיל.
remove() מסיר תבנית פנים או את כל תבניות הפנים המשויכות למשתמש הפעיל.
authenticate() מאמת את המשתמש הפעיל.
userActivity() יש להשתמש בשיטה זו רק כאשר ה-HAL נמצא במצב אימות או המתנה. שימוש בשיטה זו כאשר ה-HAL אינו באחד מהמצבים הללו מחזיר את OPERATION_NOT_SUPPORTED . קריאה לשיטה זו בזמן שה-HAL כבר מאמת עשויה להאריך את משך הזמן שהמערכת מחפשת פנים.
resetLockout() כאשר יותר מדי פרצופים נדחים, יש צורך faced כדי להיכנס למצב נעילה ( LOCKOUT או LOCKOUT_PERMANENT ). כאשר זה קורה, הוא נדרש לשלוח את הזמן הנותר למסגרת כדי שתוכל להציג אותו עבור המשתמש. כמו ב- setFeature() , שיטה זו דורשת אסימון אימות חומרה פעיל (HAT) כדי לאפס בצורה מאובטחת את המצב הפנימי. מאפס את הנעילה רק עבור המשתמש הנוכחי.

שלוש השיטות הנותרות כולן סינכרוניות ואמורות לחסום לפרק הזמן המינימלי כדי למנוע עצירת המסגרת.

שיטה תיאור
generateChallenge() יוצר אסימון אקראי ייחודי ומאובטח מבחינה קריפטוגרפית המשמש לציון תחילתה של עסקה מאובטחת.
setFeature() מפעיל או משבית תכונה עבור המשתמש הנוכחי. מטעמי אבטחה, זה מצריך HAT מבדיקת הסיכה/תבנית/סיסמה של המשתמש מול האתגר שלמעלה
getFeature() מאחזר את מצב ההפעלה הנוכחי של התכונה, כפי שהוכתב על ידי ברירת המחדל או קריאה ל- setFeature() לעיל. אם מזהה הפנים לא חוקי, היישום חייב להחזיר ILLEGAL_ARGUMENT
getAuthenticatorId() מחזירה מזהה המשויך לקבוצת הפנים הנוכחית. מזהה זה חייב להשתנות בכל פעם שמתווסף פנים

דיאגרמת המדינה

המסגרת מצפה faced לעקוב אחר תרשים המדינה להלן.

דיאגרמת המדינה
איור 2. זרימת מצב אימות פנים