Google is committed to advancing racial equity for Black communities. See how.
本頁面由 Cloud Translation API 翻譯而成。
Switch to English

運營商Wi-Fi

運營商Wi-Fi是Android 9及更高版本中提供的自動連接功能(使用加密的IMSI),可讓設備自動連接到運營商實施的Wi-Fi網絡。在體育場館或地下火車站等交通擁擠或小區覆蓋率最低的區域,運營商Wi-Fi可用於改善用戶的連接體驗並減輕流量。

具有運營商Wi-Fi功能的設備會自動連接到已配置的運營商Wi-Fi網絡(具有公鑰證書的網絡)。當用戶手動從運營商的Wi-Fi網絡斷開連接時,該網絡會被列入黑名單24小時(不自動連接)。用戶可以隨時手動連接到列入黑名單的網絡。

在已實現運營商Wi-Fi的運行Android 9或更高版本的設備上,默認情況下,通過運營商Wi-Fi的自動連接處於關閉狀態。當設備首次嘗試連接到運營商Wi-Fi網絡時,會向用戶發送通知。

實作

設備製造商和運營商必須執行以下操作才能實現運營商Wi-Fi。

製造商

對於運行Android 11及更高版本的設備,請使用Wi-Fi建議API為每個運營商添加Wi-Fi配置文件。

對於運行10或更低版本的設備,請通過在運營商配置管理器中為每個運營商配置carrier_wifi_string_array參數來添加Wi-Fi配置文件。

  • carrier_wifi_string_array :一個字符串數組,其中每個字符串條目都是Base64編碼的Wi-Fi SSID,並且EAP類型用逗號分隔,其中EAP類型是整數(請參閱可擴展身份驗證協議(EAP)註冊表)。例如,以下配置適用使用EAP-AKA的SOME_SSID_NAME和使用EAP-SIM的Some_Other_SSID

    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。例如,以下配置提供了特定的URL:

    config {
      key: "imsi_key_download_url_string"
      text_value: "https://www.some_company_name.com:5555/some_directory_name/"
    }
    
  • 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通過對標準EAP-SIMEAP-AKAEAP-AKA的身份驗證方法進行了一些修改來實現此目的。為連接啟用IMSI隱私保護後,永久用戶身份不會以無線方式直接傳輸。

永久身份加密

加密的永久身份的格式如下:

  • 永久標識的格式為<IMSI>@<NAI realm> 。 NAI領域格式為wlan.mnc XXX .mcc YYY .3gppnetwork.org ,其中XXX替換為SIM卡的移動網絡代碼(MNC),而YYY替換為移動國家/地區代碼(MCC)。
  • 永久身份使用運營商提供的RSA公鑰加密。公鑰包含在X.509證書中。
  • 加密方案為RSAES-OAEP,其中SHA-256作為加密哈希函數。每次使用該加密方案時,它都保證了唯一的密文,從而避免了另一個可跟踪的持久身份。
  • RSA密鑰長度為2048位。
  • 加密緩衝區為256字節。
  • 密文使用Base64編碼。
  • 輸出的加密的永久標識長度為344個字節。
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<IMSI>@<NAI Realm>))
密鑰標識符

密鑰標識符是運營商附加到證書的可選屬性值對,以允許服務器在身份驗證期間找到正確的私鑰。密鑰標識符的示例是CertificateSerialNumber=123456 。如果提供了密鑰標識符,則將其作為身份驗證過程的一部分以明文形式發送。

修改基於SIM的EAP身份驗證方法

在連接上啟用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流。

成功認證後,服務器可以提供快速重新認證身份或臨時身份(假名),這些身份將用於後續連接。如果服務器未提供臨時身份,則係統將在後續連接中發送加密的身份。

運營商證書的檢索,到期和吊銷

如果系統中未安裝證書,則係統將使用imsi_key_download_url_string運營商配置中提供的URL下載證書。僅當allow_metered_network_for_cert_download_bool運營商配置設置為true ,系統才使用蜂窩數據。否則,僅當有Wi-Fi連接可用時,系統才會下載證書。

證書到期由系統強制執行。系統將在證書到期日期前21天開始嘗試續訂證書,並使用相同的URL下載新證書。

在證書被吊銷或服務器無法解密加密的身份的情況下,服務器發送帶有AT_NOTIFICATION代碼General failure (16385)的EAP-Request/AKA-Notification消息以終止EAP交換。作為響應,系統刪除證書,並嘗試從同一URL下載新證書。

提供公鑰

向服務器(最好使用TLS上的HTTP)提供公共URL,該服務器承載運營商的證書,其中:

  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.
    

    以下是公共密鑰的示例。

    第0851章