זיהוי ביומטרי הוא דרך נוחה יותר לאימות הזהות שלכם במכשיר, אבל פחות מאובטחת. לפי מודל האימות המדורג, האימות הראשי (כלומר, שיטות מבוססות-ידע כמו קוד אימות, דפוס וסיסמה) מספק את רמת האבטחה הגבוהה ביותר. נתונים ביומטריים נמצאים בשכבה המשנית של האימות, ומספקים איזון בין נוחות לאבטחה. ב-Android CDD מוגדרות שלוש רמות של חוזק ביומטרי: רמה 3 (לשעבר 'חזקה'), רמה 2 (לשעבר 'חלשה') ורמה 1 (לשעבר 'נוחות'). לכל סיווג יש קבוצה של תנאים מוקדמים, הרשאות ומגבלות – פרטים נוספים זמינים ב-CDD שלמעלה. כל שלוש הכיתות מורשות להתמזג עם מסך הנעילה, אבל רק מאמתים חזקים וחלשים מורשים להתמזג עם ממשקי ה-API של android.hardware.biometrics. בטבלה הזו מתוארים כל מאמתי הכניסה והפונקציונליות שהם תומכים בה.
מאמת | מסך הנעילה | שילוב של BiometricPrompt | מאגר מפתחות (מפתח מבוסס-זמן) | מאגר מפתחות (מפתח מבוסס-פעולה) |
---|---|---|---|---|
BIOMETRIC_STRONG (רמה 3) | כן | כן | כן | כן |
BIOMETRIC_WEAK (רמה 2) | כן | כן | לא | לא |
BIOMETRIC_CONVENIENCE (סיווג 1) |
כן | לא | לא | לא |
DEVICE_CREDENTIAL | כן | כן | כן | כן |
ה-framework של Android כולל תמיכה באימות ביומטרי באמצעות זיהוי פנים וטביעת אצבע. אפשר להתאים אישית את Android כך שתתמוך בשיטות ביומטריות אחרות (כמו זיהוי קשתית העין). עם זאת, השילוב של המידע הביומטרי יהיה תלוי באבטחה הביומטרית, ולא בממשק. פרטים נוספים על המפרטים של אבטחה ביומטרית זמינים במאמר מדידת האבטחה של ביטול הנעילה הביומטרי.
מקור
12 Android
- הוספת ממשק ה-API BiometricManager.Strings, שמספק מחרוזות מותאמות לאפליקציות שמשתמשות ב-BiometricPrompt לאימות. המחרוזות האלה נועדו להיות מותאמות למכשיר, ולספק מידע ספציפי יותר על סוגי האימות שבהם אפשר להשתמש.
- כולל תמיכה בחיישן טביעות אצבע שמתחת למסך (UDFPS).
Android 11
- הצגת הממשק BiometricManager.Authenticators, שמספק קבועים שמפתחים יכולים להשתמש בהם כדי לציין את סוגי האימות שאפליקציות שלהם מקבלות.
- הוספת פעולת הכוונה
ACTION_BIOMETRIC_ENROLL
, שמפתחים יכולים להשתמש בה כדי להפנות את המשתמש להרשמה של שיטת אימות שעומדת בדרישות של האפליקציות שלהם. - הוספת השיטה
AuthenticationResult#getAuthenticationType()
, שבאמצעותה מפתחים יכולים לבדוק אם המשתמש אומת באמצעות פרטי כניסה ביומטריים או פרטי כניסה של מכשיר. - תמיכה נוספת במפתחות auth-per-use בכיתה BiometricPrompt.
Android 10
- הצגת
ה
class
BiometricManager
שבאמצעותו מפתחים יכולים לבדוק את הזמינות של אימות ביומטרי. - כולל שילוב של אימות באמצעות טביעת אצבע וזיהוי פנים ל-
BiometricPrompt
Android 9
- כולל שילוב של טביעת אצבע רק עבור
BiometricPrompt
. - הוצאה משימוש של הכיתה FingerprintManager. אם האפליקציות המצורפות והאפליקציות של המערכת משתמשות בכיתה הזו, צריך לעדכן אותן כך שישתמשו ב-
BiometricPrompt
וב-BiometricManager
במקום זאת. - עדכנו את בדיקות המאמת של
FingerprintManager
CTS כדי לבדוק אתBiometricPrompt
באמצעותBiometricPromptBoundKeysTest
.
הטמעה
כדי להבטיח למשתמשים ולמפתחים חוויה ביומטרית חלקה, כדאי לשלב את סטאק הביומטריה עם ממשקי ה-API של BiometricPrompt
, BiometricManager
ו-ACTION_BIOMETRIC_ENROLL
. מכשירים עם חיישנים ביומטריים חייבים לעמוד בדרישות החוסן האלה.בנוסף, כל הטמעות חייבות לעבור את מודול ה-CTS של CtsBiometricsTestCases.
כדי לשלב את מקבץ הרכיבים הביומטריים עם ה-API ACTION_BIOMETRIC_ENROLL:
- משנים את BiometricEnrollActivity כדי להציג את תהליך ההרשמה. לתשומת ליבכם, תוכלו להציג את המידע הביומטרי רק אם הוא עומד בעוצמה הנדרשת. אם במכשיר יש תמיכה בכמה שיטות, הפעולה הזו אמורה להציג רשימה שהמשתמש יכול לבחור ממנה.

הנחיות להטמעת HAL
כדי לוודא שהנתונים הביומטריים לא נחשפים ונמחקים כשמשתמשים מוסרים מהמכשיר, יש לפעול לפי ההנחיות הבאות ל-HAL ביומטרי:
- חשוב לוודא שלעולם לא תהיה גישה לנתונים ביומטריים גולמיים או נגזרים (כמו תבניות) מחוץ לסביבה המבודדת והמאובטחת (כמו TEE או Secure Element). כל הנתונים ששמורים צריכים להיות מוצפנים באמצעות מפתח ספציפי למכשיר שידוע רק ל-TEE (Trusted Execution Environment). אם החומרה תומכת בכך, כדאי להגביל את הגישה של החומרה לסביבה המבודדת והמאובטחת ולהגן עליה באמצעות מדיניות SELinux. צריך להגדיר את תעלת התקשורת (לדוגמה, SPI, I2C) כך שתהיה גישה אליה רק לסביבה המבודדת והמאובטחת, באמצעות מדיניות SELinux מפורשת בכל קובצי המכשיר.
- כדי למנוע פרצות אבטחה והתקפות אחרות, תהליך האיסוף, ההרשמה והזיהוי הביומטריים צריך להתבצע בסביבה המבודדת והמאובטחת. הדרישה הזו חלה רק על נתונים ביומטריים ברמה 3 (לשעבר 'חזק') וברמה 2 (לשעבר 'חלש').
- כדי להגן מפני התקפות שחזור, חותמים על תבניות ביומטריות באמצעות מפתח פרטי שספציפי למכשיר. ב-Advanced Encryption Standard (AES), צריך לחתום לפחות על תבנית עם הנתיב המוחלט של מערכת הקבצים, הקבוצה והמזהה הביומטרי, כך שקובצי התבנית לא יפעלו במכשיר אחר או אצל כל מי שאינו המשתמש שרשם אותם באותו מכשיר. לדוגמה, למנוע העתקה של נתונים ביומטריים ממשתמש אחר באותו מכשיר או ממכשיר אחר.
- אם אתם צריכים לאחסן נתונים מחוץ ל-TEE, תוכלו להשתמש בנתיב למערכת הקבצים שסופק על ידי
setActiveUser() HIDL method
או לספק דרך אחרת למחוק את כל נתוני התבנית של המשתמש כשהמשתמש יוסר. הסיבה לכך היא להגן על זליגת נתוני משתמשים. במכשירים שלא משתמשים בנתיב הזה צריך לנקות אחרי שהמשתמש הוסר. CDD מחייב לאחסן נתונים ביומטריים וקבצים נגזרים מוצפנים – במיוחד אם הם לא מאוחסנים ב-TEE. אם אי אפשר לעשות זאת בגלל דרישות האחסון של הסביבה המבודדת והמאובטחת, צריך להוסיף ווקים כדי להבטיח שהנתונים יוסרו כשהמשתמש יוסר או שהמכשיר יימחק. ראו LockSettingsService.removeBiometricsForUser()
התאמה אישית
אם המכשיר תומך בכמה נתונים ביומטריים, המשתמש אמור להיות מסוגל לציין ברירת מחדל בהגדרות. בהטמעה של BiometricPrompt
, צריך להעדיף את המידע הביומטרי מסוג Class 3 (לשעבר Strong) כברירת מחדל, אלא אם המשתמש מבטל את ההגדרה הזו באופן מפורש. במקרה כזה, צריך להציג הודעת אזהרה עם הסבר על הסיכונים שקשורים למידע הביומטרי (לדוגמה, תמונה שלכם עשויה לבטל את הנעילה של המכשיר).
מחרוזות אימות ספציפיות למכשיר
החל מגרסה 12 של Android, מחרוזות אימות לפי הקשר זמינות למפתחים דרך ממשק ה-API BiometricManager.Strings. אפשר להתאים אישית את ערכי המשאבים שמוחזרים על ידי ה-API הזה כדי להטמיע מחרוזות ספציפיות למכשיר. אם כן, חשוב לוודא שכל מחרוזות חדשות מתורגמות לכל האזורים הנתמכים במכשיר. בנוסף, חשוב לוודא שהמאפיינים הבאים נשמרים:
Method |
מטרת המחרוזת |
סוגי האימות שרוצים לכלול |
אם אפשר להשתמש גם במידע ביומטרי וגם בנעילת מסך |
---|---|---|---|
getButtonLabel() |
תווית ללחצן שמפעיל את BiometricPrompt |
סוגים רשומים בלבד (אם אפשר) שעומדים בדרישות של מאמת |
שימוש במחרוזת ביומטרית בלבד (למשל, 'שימוש בטביעת אצבע') |
getPromptMessage() |
הודעה שמוצגת ב-BiometricPrompt במהלך האימות |
סוגים רשומים בלבד (אם אפשר) שעומדים בדרישות של מאמת |
שימוש במחרוזת משולבת של מידע ביומטרי ונעילת מסך (למשל: "יש להשתמש בטביעת האצבע או בקוד האימות כדי להמשיך") |
getSettingName() |
שם ההגדרה שמפעילה את BiometricPrompt לאימות |
כל הסוגים שנותמכים במכשיר (גם אם הם לא רשומים) שעומדים בדרישות של מאמת |
שימוש במחרוזת משולבת של מידע ביומטרי ונעילת מסך (למשל, "שימוש בטביעת אצבע או בנעילת מסך") |
לדוגמה, נניח שיש מכשיר עם חיישן פנים מסוג 2 עם פנים רשומים, קוד אימות רשום וחיישן טביעות אצבע מסוג 3 בלי טביעות אצבע רשומות. בטבלה הבאה מפורטות מחרוזות לדוגמה לכל שילוב של מאמתים מותרים ושיטת BiometricManager.Strings שהופעל:
מאמתים מותרים |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
---|---|---|---|
שיטה ביומטרית ברמה 3 (BIOMETRIC_STRONG) |
'שימוש בטביעת אצבע' (רק טביעת אצבע עומדת בדרישות של מאמת) |
'משתמשים בטביעת האצבע כדי להמשיך' (רק טביעת אצבע עומדת בדרישות האימות) |
'שימוש בטביעת אצבע' (רק טביעת אצבע עומדת בדרישות של מאמת) |
ביומטריה מסוג 2 (BIOMETRIC_WEAK) |
'שימוש בפנים' (זיהוי הפנים וטביעת האצבע עומדים בדרישות, ומתועד רק זיהוי הפנים) |
'להמשיך באמצעות זיהוי הפנים' (התהליך עומד בדרישות לזיהוי הפנים והאצבע, אבל רק הפנים נרשם) |
'שימוש בזיהוי הפנים או בטביעת אצבע' (זיהוי הפנים וטביעת האצבע עומדים בדרישות, והמכשיר תומך בשניהם) |
נעילת מסך (DEVICE_CREDENTIAL) |
'שימוש בקוד אימות' (כל נעילת מסך עומדת בדרישות, קוד האימות רשום) |
'יש להזין את קוד האימות כדי להמשיך' (כל נעילת מסך עומדת בדרישות, קוד האימות רשום) |
'שימוש בנעילת מסך' (כל נעילת מסך עומדת בדרישות) |
נעילת מסך או שיטה ביומטרית ברמה 3 |
'שימוש בקוד אימות' (טביעת אצבע וכל מנעול מסך עומדים בדרישות, רק קוד האימות נרשם) |
'יש להזין את קוד האימות כדי להמשיך' (טביעת אצבע וכל אמצעי נעילה של המסך עומדים בדרישות, רק קוד האימות נרשם) |
'שימוש בטביעת אצבע או בנעילת מסך' (טביעת אצבע וכל נעילת מסך עומדות בדרישות) |
נעילה ביומטרית ברמה 2 או נעילת מסך |
'שימוש בפנים' (זיהוי הפנים, טביעת האצבע וכל נעילת מסך עומדים בדרישות. זיהוי הפנים נרשם ומחליף את קוד האימות) |
'יש להשתמש בזיהוי הפנים או בקוד האימות כדי להמשיך' (זיהוי הפנים, טביעת האצבע וכל שיטת ביטול נעילה עומדות בדרישות, והן רשומות) |
'שימוש במידע ביומטרי או בנעילת מסך' (זיהוי הפנים, טביעת האצבע וכל נעילת מסך עומדים בדרישות) |
אימות
ההטמעה הביומטרית צריכה לעבור את הבדיקות הבאות:
- CTS BiometricManager
- CTS BiometricPrompt (בדיקת תקינות, בדיקה מעמיקה מסתמכת על המאמת)
- קטע של בדיקת CtsVerifier Biometric: צריך לעבור בנפרד בכל אחת מהשיטות שהמכשיר תומך בהן
בנוסף, אם המכשיר תומך באימות ביומטרי עם AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0), הוא צריך לעבור את בדיקת ה-VTS הרלוונטית (fingerprint, face).