מידע ביומטרי

זיהוי ביומטרי הוא דרך נוחה יותר לאימות הזהות במכשיר, אבל יכול להיות שהיא פחות מאובטחת. במודל האימות הרב-שכבתי, האימות הראשי (כלומר, שיטות שמבוססות על גורם ידע כמו קוד אימות, תבנית וסיסמה) מספק את רמת האבטחה הגבוהה ביותר. הנתונים הביומטריים נמצאים ברמה המשנית של האימות, ומציעים איזון בין נוחות לאבטחה. במסמך Android CDD מוגדרות שלוש רמות של חוזק ביומטרי: רמה 3 (לשעבר 'חזק'), רמה 2 (לשעבר 'חלש') ורמה 1 (לשעבר 'נוח'). לכל מחלקה יש קבוצה של דרישות מוקדמות, הרשאות ומגבלות. פרטים נוספים מופיעים במסמך ה-CDD שלמעלה. כל שלוש המחלקות יכולות להשתלב עם מסך הנעילה, אבל רק אמצעי אימות חזקים וחלשים יכולים להשתלב עם ממשקי ה-API של android.hardware.biometrics. בטבלה הזו מתואר כל אמצעי אימות והפונקציונליות שהוא תומך בה.

מאמת החשבונות מסך הנעילה שילוב של BiometricPrompt מאגר מפתחות (מפתח מבוסס-זמן) מאגר מפתחות (מפתח מבוסס-פעולה)
BIOMETRIC_STRONG (Class 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_ENROLL intent action, שמפתחים יכולים להשתמש בו כדי להפנות את המשתמש להרשמה לשיטת אימות שעומדת בדרישות של האפליקציות שלהם.
  • הוספה של AuthenticationResult#getAuthenticationType() method, שמפתחים יכולים להשתמש בה כדי לבדוק אם המשתמש עבר אימות באמצעות פרטי כניסה ביומטריים או פרטי כניסה למכשיר.
  • מספקת תמיכה נוספת במפתחות auth-per-use בכיתה BiometricPrompt.

‫Android 10

  • הגרסה הזו כוללת את BiometricManager class שבעזרתו מפתחים יכולים לבדוק אם יש אימות ביומטרי.
  • כולל שילוב של אימות באמצעות טביעת אצבע וזיהוי פנים ל-BiometricPrompt

Android 9

  • כולל שילוב של טביעת אצבע רק עבור BiometricPrompt.
  • הוצאה משימוש של המחלקה FingerprintManager. אם אפליקציות שצורפו למכשיר ואפליקציות מערכת משתמשות במחלקה הזו, צריך לעדכן אותן כדי שישתמשו במקום זאת ב-BiometricPrompt וב-BiometricManager.
  • עדכנו את הבדיקות של מאמת ה-CTS‏ FingerprintManager כדי לבדוק את BiometricPrompt באמצעות BiometricPromptBoundKeysTest.

הטמעה

כדי להבטיח שמשתמשים ומפתחים ייהנו מחוויה ביומטרית חלקה, צריך לשלב את מחסנית הביומטריה עם ממשקי BiometricPrompt,‏ BiometricManager ו-ACTION_BIOMETRIC_ENROLL API. מכשירים עם חיישנים ביומטריים צריכים לעמוד בדרישות האבטחה האלה.בנוסף, כל ההטמעות צריכות לעבור את המודול CtsBiometricsTestCases CTS.

כדי לשלב את מחסנית המידע הביומטרי עם ACTION_BIOMETRIC_ENROLL API:

  1. משנים את BiometricEnrollActivity כדי להציג את תהליך ההרשמה. שימו לב: אפשר להשתמש בנתונים הביומטריים רק אם הם עומדים בדרישות של רמת החוזק הנדרשת. אם המכשיר תומך ביותר משיטה אחת, הפעולה הזו אמורה להציג רשימה שהמשתמש יכול לבחור מתוכה.
ארכיטקטורה של BiometricPrompt
איור 1. ארכיטקטורה של BiometricPrompt

הנחיות להטמעה של 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 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 (‏fingerprint@2.1, ‏fingerprint@2.2, ‏face1.0), הוא צריך לעבור את בדיקת ה-VTS הרלוונטית (fingerprint, ‏face)