Wi-Fi של הספק

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

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

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

הטמעה

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

יצרנים

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

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

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

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

ב carrier config Manager, להגדיר את הפרמטרים הבאים לכל ספק:

  • 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: כתובת ה-URL שממנה ה-Proto שמכיל את המפתח הציבורי של הספק משמש לביצוע מתבצעת הורדה של הצפנת 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

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

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

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

  • הזהות הקבועה היא בפורמט <EAP-Method><IMSI>@<NAI realm>.
  • קידומת שיטת EAP היא אוקטט יחיד שמגדיר את שיטת EAP משמש לאימות:
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA
  • הפורמט של תחום NAI הוא wlan.mncXXX.mccYYY.3gppnetwork.org איפה הערך XXX מוחלף בקוד הרשת הסלולרית (MNC) של כרטיס ה-SIM, והערך YYY הוא הוחלף בקוד המדינה של הנייד (MCC).
  • הזהות הקבועה מוצפנת באמצעות מפתח ציבורי מסוג RSA שסופק על ידי הספק. המפתח הציבורי כלול אישור X.509.
  • סכימת ההצפנה היא RSAES-OAEP עם SHA-256 כפונקציית הגיבוב הקריפטוגרפי. סכימת ההצפנה הזו מבטיח טקסט מוצפן ייחודי בכל פעם שמשתמשים בסכימה, וכך נמנעים עוד זהות קבועה שאפשר לעקוב אחריה.
  • האורך של מפתח ה-RSA הוא 2,048 ביט.
  • נפח האחסון הזמני של ההצפנה הוא 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 של HTTP. המערכת משתמשת בחבילת הגלישה רק אם הספק 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.

עליך לספק את המפתח הציבורי

מספקים כתובת 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-----"
    } ]
    }