זיהוי ביומטרי הוא דרך נוחה יותר לאימות הזהות במכשיר, אבל יכול להיות שהיא פחות מאובטחת. במודל האימות הרב-שכבתי, האימות הראשי (כלומר, שיטות שמבוססות על גורם ידע כמו קוד אימות, תבנית וסיסמה) מספק את רמת האבטחה הגבוהה ביותר. הנתונים הביומטריים נמצאים ברמה המשנית של האימות, ומציעים איזון בין נוחות לאבטחה. במסמך Android CDD מוגדרות שלוש רמות של חוזק ביומטרי: רמה 3 (לשעבר חזקה), רמה 2 (לשעבר חלשה) ורמה 1 (לשעבר נוחה). לכל מחלקה יש קבוצה של דרישות מוקדמות, הרשאות ומגבלות. פרטים נוספים מופיעים במסמך ה-CDD שלמעלה. כל שלוש המחלקות יכולות להשתלב עם מסך הנעילה, אבל רק אמצעי אימות חזקים וחלשים יכולים להשתלב עם ממשקי ה-API של android.hardware.biometrics. בטבלה הזו מתואר כל אמצעי אימות והפונקציונליות שהוא תומך בה.
| מאמת החשבונות | מסך הנעילה | שילוב של BiometricPrompt | מאגר מפתחות (מפתח מבוסס-זמן) | מאגר מפתחות (מפתח מבוסס-פעולה) |
|---|---|---|---|---|
| BIOMETRIC_STRONG (רמה 3) | כן | כן | כן | כן |
| BIOMETRIC_WEAK (Class 2) | כן | כן | לא | לא |
| BIOMETRIC_CONVENIENCE (Class 1) |
כן | לא | לא | לא |
| DEVICE_CREDENTIAL | כן | כן | כן | כן |
ה-framework של Android כולל תמיכה באימות ביומטרי של טביעות אצבע וזיהוי פנים. אפשר להתאים אישית את Android כדי לתמוך בשיטות ביומטריות אחרות (כמו סריקת קשתית העין). עם זאת, השילוב הביומטרי יהיה תלוי באבטחה הביומטרית, ולא בשיטה. פרטים נוספים על מפרטי אבטחה ביומטריים זמינים במאמר מדידת אבטחת פתיחת נעילה ביומטרית.
מקור
12 Android
- הגרסה הזו כוללת את ה-API BiometricManager.Strings, שמספק מחרוזות מותאמות לשפה המקומית לאפליקציות שמשתמשות ב-BiometricPrompt לאימות. המחרוזות האלה מיועדות לזיהוי המכשיר ולספק מידע ספציפי יותר לגבי סוגי האימות שאפשר להשתמש בהם.
- כולל תמיכה בחיישן טביעות אצבע מתחת למסך (UDFPS).
Android 11
- הוספנו את הממשק BiometricManager.Authenticators, שמספק קבועים שמפתחים יכולים להשתמש בהם כדי לציין את סוגי האימות שהאפליקציות שלהם מקבלות.
- נוסף
ACTION_BIOMETRIC_ENROLLintent action, שמפתחים יכולים להשתמש בו כדי להפנות את המשתמש להרשמה לשיטת אימות שעומדת בדרישות של האפליקציות שלהם. - הוספה של
AuthenticationResult#getAuthenticationType()method, שמפתחים יכולים להשתמש בה כדי לבדוק אם המשתמש עבר אימות באמצעות פרטי כניסה ביומטריים או פרטי כניסה למכשיר. - מספק תמיכה נוספת במפתחות auth-per-use בכיתה BiometricPrompt.
Android 10
- הוספנו את המחלקה
BiometricManagerclass שמפתחים יכולים להשתמש בה כדי לבדוק אם יש אימות ביומטרי. - כולל שילוב של אימות באמצעות טביעת אצבע וזיהוי פנים עבור
BiometricPrompt
Android 9
- כולל שילוב של טביעת אצבע רק עבור
BiometricPrompt. - הוצאה משימוש של המחלקה FingerprintManager. אם האפליקציות המצורפות והאפליקציות של המערכת משתמשות במחלקה הזו, צריך לעדכן אותן כדי שישתמשו במקום זאת ב-
BiometricPromptוב-BiometricManager. - עדכנו את הבדיקות של מאמת ה-CTS
FingerprintManagerכדי לבדוק אתBiometricPromptבאמצעותBiometricPromptBoundKeysTest.
הטמעה
כדי להבטיח למשתמשים ולמפתחים חוויה ביומטרית חלקה, צריך לשלב את המערכת הביומטרית עם ממשקי BiometricPrompt, BiometricManager ו-ACTION_BIOMETRIC_ENROLL API. מכשירים עם חיישנים ביומטריים צריכים לעמוד בדרישות האבטחה האלה.בנוסף, כל ההטמעות צריכות לעבור את מודול CtsBiometricsTestCases של CTS.
כדי לשלב את מחסנית המידע הביומטרי עם ACTION_BIOMETRIC_ENROLL API:
- משנים את BiometricEnrollActivity כדי להציג את תהליך ההרשמה. שימו לב: אפשר להשתמש בנתונים הביומטריים רק אם הם עומדים בדרישות לגבי רמת החוזק. אם המכשיר תומך ביותר משיטה אחת, הפעולה הזו אמורה להציג רשימה שהמשתמש יכול לבחור מתוכה.
הנחיות להטמעת HAL
כדי לוודא שהנתונים הביומטריים לא ידלפו ויוסרו כשמשתמש מוסר ממכשיר, צריך לפעול לפי ההנחיות הבאות לגבי HAL ביומטרי:
- חשוב לוודא שאין גישה לנתונים ביומטריים גולמיים או לנגזרות שלהם (כמו תבניות) מחוץ לסביבה המבודדת המאובטחת (כמו TEE או Secure Element). כל הנתונים המאוחסנים צריכים להיות מוצפנים באמצעות מפתח ספציפי למכשיר, שרק סביבת המחשוב האמינה (TEE) מכירה. אם החומרה תומכת בכך, צריך להגביל את גישת החומרה לסביבה המבודדת המאובטחת ולהגן עליה באמצעות מדיניות SELinux. ערוץ התקשורת (לדוגמה, SPI, I2C) צריך להיות נגיש רק לסביבה המבודדת המאובטחת, עם מדיניות SELinux מפורשת בכל קובצי המכשיר.
- תהליך ההקלטה, ההרשמה והזיהוי של נתונים ביומטריים צריך להתרחש בתוך הסביבה המאובטחת והמבודדת כדי למנוע פרצות אבטחה ומתקפות אחרות. הדרישה הזו חלה רק על נתונים ביומטריים ברמה 3 (לשעבר 'חזקה') וברמה 2 (לשעבר 'חלשה').
- כדי להגן מפני מתקפות שידור חוזר, צריך לחתום על תבניות ביומטריות באמצעות מפתח פרטי שייחודי למכשיר. במקרה של Advanced Encryption Standard (AES), צריך לחתום על תבנית לפחות באמצעות הנתיב המוחלט של מערכת הקבצים, הקבוצה והמזהה הביומטרי, כך שקבצים של תבניות לא יוכלו לפעול במכשיר אחר או בשביל מישהו אחר מלבד המשתמש שרשם אותם באותו מכשיר. לדוגמה, למנוע העתקה של נתונים ביומטריים ממשתמש אחר באותו מכשיר או ממכשיר אחר.
- אם אתם צריכים לאחסן נתונים מחוץ ל-TEE, אתם צריכים להשתמש בנתיב של מערכת הקבצים שסופק על ידי הפונקציה
setActiveUser() HIDL methodאו לספק דרך אחרת למחיקה של כל נתוני התבניות של המשתמש כשהמשתמש מוסר. הסיבה לכך היא הגנה מפני דליפת נתוני משתמשים. במכשירים שלא משתמשים בנתיב הזה, חובה לבצע ניקוי אחרי הסרת המשתמש. מסמך CDD מחייב לאחסן נתונים ביומטריים וקבצים נגזרים בצורה מוצפנת – במיוחד אם הם לא נמצאים ב-TEE. אם זה לא אפשרי בגלל דרישות האחסון של הסביבה המבודדת המאובטחת, צריך להוסיף הוקים (hooks) כדי להבטיח שהנתונים יוסרו כשהמשתמש יוסר או כשהמכשיר יאופס. See LockSettingsService.removeBiometricsForUser()
התאמה אישית
אם המכשיר תומך בכמה נתונים ביומטריים, המשתמש צריך להיות מסוגל לציין ברירת מחדל בהגדרות. בהטמעה של BiometricPrompt, צריך להגדיר את האמצעי הביומטרי Class 3 (לשעבר Strong) כאמצעי ברירת המחדל, אלא אם המשתמש מבטל את ההגדרה הזו באופן מפורש. במקרה כזה, צריך להציג הודעת אזהרה שמסבירה את הסיכונים שקשורים לאמצעי הביומטרי (לדוגמה, יכול להיות שאפשר יהיה לבטל את הנעילה של המכשיר באמצעות תמונה שלכם).
מחרוזות אימות ספציפיות למכשיר
החל מ-Android 12, מחרוזות אימות הקשריות זמינות למפתחים דרך BiometricManager.Strings API. אפשר להתאים אישית את ערכי המשאבים שמוחזרים על ידי ה-API הזה כדי להטמיע מחרוזות ספציפיות למכשיר. אם כן, צריך לוודא שכל המחרוזות החדשות מתורגמות לכל הלוקאלים שהמכשיר תומך בהם. בנוסף, חשוב לוודא שהמאפיינים הבאים נשמרים:
Method |
String purpose |
סוגי האימות שרוצים לכלול |
אם אפשר להשתמש במידע ביומטרי ובנעילת מסך |
|---|---|---|---|
getButtonLabel() |
תווית לכפתור שמפעיל את BiometricPrompt |
רק סוגים רשומים (אם אפשר) שעומדים בדרישות של אמצעי האימות |
מחרוזת biometric-only (למשל, Use fingerprint) |
getPromptMessage() |
ההודעה שמוצגת ב-BiometricPrompt במהלך האימות |
רק סוגים רשומים (אם אפשר) שעומדים בדרישות של אמצעי האימות |
צריך להשתמש במחרוזת משולבת של מידע ביומטרי ושיטה לביטול הנעילה (לדוגמה: "צריך להשתמש בטביעת האצבע או בקוד האימות כדי להמשיך") |
getSettingName() |
שם ההגדרה שמאפשרת את BiometricPrompt לאימות |
כל הסוגים הנתמכים על ידי המכשיר (גם אם לא רשומים) שעומדים בדרישות של אמצעי האימות |
משתמשים במחרוזת משולבת של מידע ביומטרי ונעילת מסך (לדוגמה, "שימוש בטביעת אצבע או בנעילת מסך") |
לדוגמה, נניח שיש מכשיר עם חיישן פנים מסוג 2 עם פנים רשומות, קוד אימות רשום וחיישן טביעות אצבע מסוג 3 ללא טביעות אצבע רשומות. בטבלה שבהמשך מוצגים מחרוזות לדוגמה לכל שילוב של אמצעי אימות מותרים ושיטת BiometricManager.Strings שהופעלה:
אמצעי אימות מותרים |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
|---|---|---|---|
ביומטריה ברמה 3 (BIOMETRIC_STRONG) |
"Use fingerprint" (Only fingerprint satisfies authenticator requirements) |
"Use your fingerprint to continue" (Only fingerprint satisfies authenticator requirements) |
"Use fingerprint" (Only fingerprint satisfies authenticator requirements) |
Class 2 biometric (BIOMETRIC_WEAK) |
"Use face" (Face and fingerprint satisfy requirements; only face is enrolled) |
"צריך להשתמש בפנים כדי להמשיך" (הפנים והטביעת האצבע עומדים בדרישות; רק הפנים רשומות) |
"Use face or fingerprint" (Face and fingerprint satisfy requirements; device supports both) |
נעילת מסך (DEVICE_CREDENTIAL) |
"Use PIN" (Any screen lock satisfies requirements; PIN is enrolled) |
"Enter your PIN to continue" (Any screen lock satisfies requirements; PIN is enrolled) |
'שימוש בנעילת מסך' (כל נעילת מסך עומדת בדרישות) |
שיטה ביומטרית ברמה 3 או נעילת מסך |
"Use PIN" (Fingerprint and any screen lock satisfy requirements; only PIN is enrolled) |
"עליך להזין את קוד האימות כדי להמשיך" (טביעת אצבע וכל אמצעי נעילה אחר של המסך עומדים בדרישות; רק קוד האימות רשום) |
"Use fingerprint or screen lock" (Fingerprint and any screen lock satisfy requirements) |
שיטה ביומטרית ברמה 2 או נעילת מסך |
"Use face" (Face, fingerprint, and any screen lock satisfy requirements; face is enrolled and supersedes PIN) |
"Use your face or PIN to continue" (Face, fingerprint, and any screen lock satisfy requirements; face and PIN are enrolled) |
"Use biometrics or screen lock" (Face, fingerprint, and any screen lock satisfy requirements) |
אימות
ההטמעה הביומטרית צריכה לעבור את הבדיקות הבאות:
- CTS BiometricManager
- CTS BiometricPrompt (sanity, in-depth testing relies on verifier)
- הקטע CtsVerifier Biometric Test: צריך לעבור בנפרד עם כל שיטת אימות שהמכשיר תומך בה
בנוסף, אם המכשיר תומך בנתונים ביומטריים שיש להם AOSP HIDL ([email protected], [email protected], face1.0), המכשיר צריך לעבור את בדיקת ה-VTS הרלוונטית (fingerprint, face).