ספק Wi-Fi

ה-Wi-Fi של הספק הוא תכונת חיבור אוטומטי (באמצעות IMSI מוצפן) הזמינה באנדרואיד 9 ומעלה המאפשרת למכשירים להתחבר אוטומטית לרשתות Wi-Fi מיושמות על ידי הספק. באזורים של עומס גבוה או עם כיסוי סלולרי מינימלי כגון אצטדיון או תחנת רכבת תת קרקעית, ניתן להשתמש ב-Wi-Fi של הספק כדי לשפר את חווית הקישוריות של המשתמשים ולהוריד את התנועה.

מכשירים עם תכונת ה-Wi-Fi של הספק מתחברים אוטומטית לרשתות Wi-Fi של הספק המוגדרות (רשתות עם אישור מפתח ציבורי). כאשר משתמש מתנתק באופן ידני מרשת Wi-Fi של ספק, הרשת נמצאת ברשימה השחורה למשך 24 שעות (ללא חיבור אוטומטי). משתמשים יכולים להתחבר באופן ידני לרשתות ברשימה השחורה בכל עת.

במכשירים שבהם פועל אנדרואיד 9 ומעלה עם Wi-Fi של הספק מיושם, החיבור האוטומטי דרך ה-Wi-Fi של הספק כבוי כברירת מחדל. הודעה נשלחת למשתמש כאשר המכשיר מנסה להתחבר לרשת Wi-Fi של הספק בפעם הראשונה.

יישום

יצרני וספקי התקנים חייבים לבצע את הפעולות הבאות כדי ליישם Wi-Fi של ספק.

יצרנים

עבור מכשירים עם Android 11 ומעלה, השתמש ב- Wi-Fi suggestion API כדי להוסיף פרופילי Wi-Fi עבור כל ספק.

עבור מכשירים עם 10 ומטה, הוסף פרופילי Wi-Fi על ידי הגדרת הפרמטר carrier_wifi_string_array עבור כל ספק במנהל תצורת הספק .

  • carrier_wifi_string_array : מערך מחרוזות שבו כל כניסת מחרוזת היא SSID מקודד Wi-Fi וסוג EAP מופרדים בפסיק, כאשר סוג EAP הוא מספר שלם (עיין ב- Extensible Authentication Protocol (EAP) Registry ). לדוגמה, התצורה הבאה היא עבור SOME_SSID_NAME באמצעות EAP-AKA ו- Some_Other_SSID באמצעות EAP-SIM :

    config {
      key: "carrier_wifi_string_array"
      text_array {
        item: "U09NRV9TU0lEX05BTUUK,23"
        item: "U29tZV9PdGhlcl9TU0lECg==,18"
      }
    }
    

במנהל תצורת הספק , הגדר את הפרמטרים הבאים עבור כל ספק:

  • imsi_key_availability_int : מזהה אם המפתח המשמש להצפנת IMSI זמין עבור WLAN (ביט 1 מוגדר), EPDG (ביט 0 מוגדר), או שניהם (גם ביט 0 וגם ביט 1 מוגדרים). לדוגמה, התצורה הבאה מציינת שהצפנת IMSI זמינה עבור WLAN אך לא עבור EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : כתובת אתר שממנה מורידים את הפרוטו המכיל את המפתח הציבורי של הספק המשמש להצפנת IMSI. לדוגמה, התצורה הבאה מספקת כתובת URL ספציפית:

    config {
      key: "imsi_key_download_url_string"
      text_value: "https://www.some_company_name.com:5555/some_directory_name/some_filename.json"
    }
    
  • allow_metered_network_for_cert_download_bool : דגל המציין אם לאפשר הורדה של המפתח הציבורי של הספק דרך רשת מדודה (סלולרית). אם הדגל הזה לא מוגדר, מכשיר חדש ללא קישוריות Wi-Fi לא יוכל להתחבר לרשת ה-Wi-Fi של הספק מכיוון שהוא לא יורשה להוריד את המפתח.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

מובילים

כדי ליישם Wi-Fi של הספק, הספק חייב להפעיל הגנת פרטיות של IMSI ולספק מפתח ציבורי.

הגנת הפרטיות של IMSI

אנדרואיד מגינה על סודיות הזהות הקבועה של מנוי (IMSI) באמצעות הצפנת מפתח ציבורי. אנדרואיד מיישמת את מפרט Wireless Broadband Alliance (WBA) עבור הגנת הפרטיות של IMSI עבור Wi-Fi . כאשר הגנת הפרטיות של IMSI מופעלת עבור חיבור, זהות המנוי הקבוע לא מועברת בצורה ברורה באוויר.

הצפנת זהות קבועה

הפורמט של הזהות הקבועה המוצפנת הוא כדלקמן:

  • הזהות הקבועה היא בפורמט של <EAP-Method><IMSI>@<NAI realm> .
  • הקידומת EAP-Method היא אוקטטה אחת המגדירה את שיטת EAP המשמשת לאימות:
    • 0 : EAP-AKA
    • 1 : EAP-SIM
    • 6 : EAP-AKA'
  • פורמט התחום של NAI הוא wlan.mnc XXX .mcc YYY .3gppnetwork.org כאשר XXX מוחלף בקוד הרשת הסלולרית של כרטיס ה-SIM (MNC) ו- YYY מוחלף בקוד המדינה לנייד (MCC).
  • הזהות הקבועה מוצפנת באמצעות מפתח RSA ציבורי שסופק על ידי הספק. המפתח הציבורי כלול בתעודת X.509 .
  • סכימת ההצפנה היא RSAES-OAEP עם SHA-256 כפונקציית ה-hash ההצפנה. סכמת הצפנה זו מבטיחה טקסט צופן ייחודי בכל שימוש בסכימה, ובכך נמנעת מזהות מתמשכת נוספת שניתן לעקוב אחריה.
  • אורך מפתח RSA הוא 2048 סיביות.
  • מאגר ההצפנה הוא 256 בתים.
  • טקסט הצופן מקודד עם Base64 .
  • אורך הזהות הקבועה המוצפנת של הפלט הוא 344 בתים.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
מזהה מפתח

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

שינויים בשיטות אימות EAP מבוססות SIM

כאשר הגנת הפרטיות של IMSI מופעלת בחיבור, המערכת לא שולחת את הזהות הקבועה עם קבלת EAP-Request/Identity , אלא היא מגיבה בכניסה אנונימית:

SERVER: EAP-Request/Identity
UE: EAP-Response/Identity AT_IDENTITY=<prefix>|anonymous@<NAI Realm>

<prefix> הוא אופציונלי. אם תצורת הספק enable_eap_method_prefix_bool מוגדרת כ- true , התו הראשון של הזהות (לפני anonymous ) מודיע לשרת על סוג שיטת ה-EAP בשימוש לפני תחילת חילופי ה-EAP.

  • 0 : EAP-AKA
  • 1 : EAP-SIM
  • 6 : EAP-AKA'

אם תצורת הספק מוגדרת כ- false , קידומת זו אינה כלולה בהודעה.

בתגובה, השרת שולח הודעת EAP-Request/AKA-Identity והמערכת מגיבה בפורמט הבא:

SERVER: EAP-Request/AKA-Identity AT_ANY_ID_REQ
UE: EAP-Response/AKA-Identity AT_IDENTITY=<prefix>|<Encrypted Permanent Identity>|","|"<attribute>=<value>"

התו הראשון של הזהות מודיע לשרת אם נעשה שימוש בזהות מוצפנת, או את סוג שיטת ה-EAP המוגדרת:

  • \0 : זהות קבועה מוצפנת
  • 0 : EAP-AKA
  • 1 : EAP-SIM
  • 6 : EAP-AKA'

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

בשלב זה, השרת מאתר את המפתח הפרטי ממזהה המפתח (אם מסופק), מפענח את הזהות המוצפנת באמצעות המפתח הפרטי של הספק וממשיך בזרימת ה-EAP הרגילה.

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

שליפה, תפוגה וביטול של תעודת ספק

במקרה בו לא מותקן אישור במערכת, המערכת משתמשת בכתובת ה-URL שסופקה בתצורת הספק imsi_key_download_url_string כדי להוריד אישור בשיטת HTTP GET. המערכת משתמשת בנתונים סלולריים רק אם תצורת הספק allow_metered_network_for_cert_download_bool מוגדרת כ- true . אחרת, המערכת מורידה את האישור רק כאשר חיבור Wi-Fi זמין.

תפוגת האישור נאכפת על ידי המערכת. המערכת מתחילה לנסות לחדש אישורים 21 ימים לפני תאריך התפוגה של האישור, ומשתמשת באותה כתובת URL כדי להוריד את האישור החדש.

במקרה שהשרת אינו מסוגל לפענח את הזהות המוצפנת, השרת שולח הודעת EAP-Request/AKA-Notification עם קוד AT_NOTIFICATION General Failure (16384) כדי לסיים את חילופי EAP.

במקרה שבו האישור מבוטל או פג תוקפו, השרת שולח הודעת EAP-Request/AKA-Notification עם קוד AT_NOTIFICATION Certificate Replacement Required (16385) כדי לסיים את חילופי EAP. בתגובה, המערכת מיישמת היוריסטיקה פנימית כדי לקבוע אם להסיר את האישור ולנסות להוריד אישור חדש מאותה כתובת URL.

מתן המפתח הציבורי

ספק כתובת אתר ציבורית לשרת, רצוי באמצעות HTTP על TLS, המארח את האישור של הספק כאשר:

  1. ניתן לחלץ את המפתח הציבורי ואת התפוגה מהאישור.
  2. המידע מהשרת הוא בפורמט JSON באופן הבא:

    Property: key-identifier
    Type: String
    Encoding: UTF-8
    Description: Specifies an identifier that the carrier would like to attach to the certificate.
    Optional: Yes
    
    Property: certificate
    Property alternative name: public-key
    Type: String
    Encoding: Base64
    Description: The content of the carrier's X.509 certificate.
    Optional: No
    
    Property: key-type
    Type: String
    Encoding: UTF-8
    Description: Specifies the module that will use the key. The value for type must be either WLAN or EPDG.
    Optional: Yes. If the key-type property isn't included, then its value defaults to WLAN.
    

    להלן דוגמה למפתח ציבורי.

    {
    "carrier-keys" : [ {
      "key-identifier" : "CertificateSerialNumber=5xxe06d4",
      "public-key" : "-----BEGIN CERTIFICATE-----\r\nTIIDRTCCAi2gAwIBAgIEVR4G1DANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJVUzELMAkGA1UE\r\nCBMCTkExCzAJBgNVBAcTAk5BMQswCQYDVQQKEwJOQTELMAkGA1UECxMCTkExEDAOBgNVBAMTB1Rl\r\nc3RiT6N1/w==\r\n-----END CERTIFICATE-----"
    } ]
    }