Wi-Fi của nhà mạng

Wi-Fi của nhà mạng là một tính năng tự động kết nối (sử dụng IMSI đã mã hoá) có trong Android 9 trở lên cho phép các thiết bị tự động kết nối với Wi-Fi do nhà mạng triển khai mạng. Ở những vùng tắc nghẽn cao hoặc vùng phủ sóng mạng di động tối thiểu như sân vận động hoặc ga tàu điện ngầm, có thể dùng Wi-Fi của nhà mạng để cải thiện của người dùng trải nghiệm kết nối Internet và giảm tải lưu lượng truy cập.

Các thiết bị có tính năng Wi-Fi của nhà mạng sẽ tự động kết nối vào mạng Wi-Fi của nhà mạng đã định cấu hình (mạng có chứng chỉ khoá công khai). Thời gian người dùng ngắt kết nối khỏi mạng Wi-Fi của nhà mạng theo cách thủ công, thì mạng bị liệt vào danh sách đen trong 24 giờ (không có chế độ tự động kết nối). Người dùng có thể kết nối theo cách thủ công với các mạng trong danh sách đen bất cứ lúc nào.

Trên các thiết bị chạy Android 9 trở lên có triển khai Wi-Fi của nhà mạng, kết nối tự động qua Wi-Fi của nhà mạng được tắt theo mặc định. Một thông báo được gửi cho người dùng khi thiết bị cố gắng kết nối với một mạng Wi-Fi của nhà mạng mạng lần đầu tiên.

Triển khai

Nhà sản xuất thiết bị và nhà mạng phải thực hiện những việc sau để triển khai nhà mạng Wi-Fi.

Nhà sản xuất

Đối với các thiết bị chạy Android 11 trở lên, hãy dùng API đề xuất Wi-Fi để thêm cấu hình Wi-Fi cho từng nhà mạng.

Đối với các thiết bị chạy phiên bản 10 trở xuống, hãy thêm cấu hình Wi-Fi bằng cách định cấu hình thông số carrier_wifi_string_array cho mỗi nhà mạng trong trình quản lý cấu hình của nhà mạng.

  • carrier_wifi_string_array: Một mảng chuỗi trong đó mỗi mục nhập chuỗi là một SSID Wi-Fi được mã hoá Base64 và loại EAP được phân tách bằng dấu phẩy, trong đó loại EAP là một số nguyên (tham khảo Sổ đăng ký Giao thức xác thực mở rộng (EAP)). Ví dụ: cấu hình sau đây dành cho Some_SSID_NAME đang sử dụng EAP-AKASome_Other_SSID dùng EAP-SIM:

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

Trong trình quản lý cấu hình của nhà mạng, định cấu hình các tham số sau cho từng mạng di động:

  • imsi_key_availability_int: Xác định xem khoá dùng để mã hoá IMSI có hoạt động trên mạng WLAN hay không (bit 1 được thiết lập), EPDG (bit 0 được thiết lập) hoặc cả hai (cả bit 0 và bit 1 đều được bộ). Ví dụ: cấu hình sau đây cho biết rằng IMSI có thể mã hoá với mạng WLAN nhưng không hỗ trợ EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string: URL mà từ đó proto chứa khoá công khai của nhà mạng được sử dụng Đã tải phương thức mã hoá IMSI xuống. Ví dụ: cấu hình sau cung cấp một URL cụ thể:

    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: Một cờ cho biết liệu cho phép tải khoá công khai của hãng vận chuyển xuống qua định mức mạng (di động). Nếu bạn không đặt cờ này thì một thiết bị mới không có Wi-Fi không thể kết nối với mạng Wi-Fi của nhà mạng vì thì sẽ không được phép tải khoá xuống.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

Nhà mạng

Để triển khai Wi-Fi của nhà mạng, nhà mạng phải bật tính năng bảo vệ quyền riêng tư của IMSI và cung cấp khoá công khai.

Tính năng bảo vệ quyền riêng tư của IMSI

Android bảo mật danh tính vĩnh viễn của người đăng ký (IMSI) bằng tiêu chuẩn mã hoá khoá công khai. Android triển khai Băng thông rộng không dây Thông số kỹ thuật của Liên minh (WBA) về Bảo vệ quyền riêng tư của ISI đối với Wi-Fi. Khi tính năng bảo vệ quyền riêng tư của IMSI được bật cho một kết nối, danh tính của người đăng ký sẽ không được truyền qua không dây.

Mã hoá danh tính vĩnh viễn

Định dạng của danh tính vĩnh viễn đã mã hoá như sau:

  • Thông tin nhận dạng vĩnh viễn có định dạng <EAP-Method><IMSI>@<NAI realm>.
  • Tiền tố phương pháp EAP là một octet duy nhất xác định phương thức EAP dùng để xác thực:
    • 0: EAP-AKA
    • 1: EAP-SIM
    • 6: EAP-AKA'
  • Định dạng vùng NAI là wlan.mncXXX.mccYYY.3gppnetwork.org trong đó XXX được thay thế bằng mã mạng di động của thẻ SIM (MNC) và YYY là được thay thế bằng mã di động quốc gia (MCC).
  • Danh tính vĩnh viễn được mã hoá bằng khoá công khai RSA do nhà mạng. Khoá công khai có trong một Chứng chỉ X.509.
  • Giao thức mã hoá là RSAES-OAEP với SHA-256 là hàm băm mật mã. Giao thức mã hoá này đảm bảo một văn bản mật mã duy nhất mỗi khi sử dụng lược đồ, do đó tránh được một thông tin nhận dạng lâu dài khác có thể theo dõi.
  • Độ dài khoá RSA là 2048 bit.
  • Vùng đệm mã hoá có kích thước 256 byte.
  • Văn bản mật mã được mã hoá bằng Base64.
  • Độ dài danh tính vĩnh viễn đã mã hoá đầu ra là 344 byte.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
Giá trị nhận dạng khoá

Mã nhận dạng khoá là một cặp giá trị thuộc tính không bắt buộc mà nhà mạng đính kèm vào một chứng chỉ để cho phép máy chủ định vị khoá riêng tư thích hợp trong khoảng thời gian xác thực. Ví dụ về giá trị nhận dạng khoá là CertificateSerialNumber=123456. Nếu bạn cung cấp giá trị nhận dạng khoá, thì mã đó sẽ được gửi rõ ràng như một phần của quá trình xác thực.

Sửa đổi phương thức xác thực EAP dựa trên SIM

Khi tính năng bảo vệ quyền riêng tư của IMSI được bật trên một kết nối, hệ thống sẽ không gửi danh tính vĩnh viễn khi nhận được EAP-Request/Identity, thay vào đó trả lời bằng thông tin đăng nhập ẩn danh:

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

<prefix> là không bắt buộc. Nếu nhà mạng enable_eap_method_prefix_bool cấu hình được đặt thành true, ký tự đầu tiên của danh tính (trước anonymous) thông báo cho máy chủ về loại phương thức EAP được sử dụng trước Quá trình trao đổi EAP bắt đầu.

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

Nếu bạn đặt cấu hình của nhà mạng thành false, thì tiền tố này sẽ không được đưa vào nội dung.

Để phản hồi, máy chủ gửi thông báo EAP-Request/AKA-Identity và hệ thống phản hồi theo định dạng sau:

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

Ký tự đầu tiên của danh tính sẽ thông báo cho máy chủ rằng mã danh tính được sử dụng hoặc loại phương pháp EAP được định cấu hình:

  • \0: Thông tin nhận dạng vĩnh viễn đã mã hoá
  • 0: EAP-AKA
  • 1: EAP-SIM
  • 6: EAP-AKA'

Bạn không bắt buộc phải thêm cặp giá trị thuộc tính mã nhận dạng khoá và không được thêm vào kết thúc danh tính vĩnh viễn đã mã hoá nếu không được sử dụng.

Tại thời điểm này, máy chủ sẽ định vị khoá riêng tư từ giá trị nhận dạng khoá (nếu đã cung cấp), giải mã danh tính được mã hoá bằng khoá riêng tư của nhà mạng và tiếp tục quy trình EAP thông thường.

Sau khi xác thực thành công, máy chủ có thể cung cấp nhanh chóng xác thực lại danh tính hoặc một danh tính tạm thời (pseudonym), tức là được sử dụng trong các kết nối tiếp theo. Nếu không có danh tính tạm thời nào được cung cấp bởi máy chủ, hệ thống sẽ gửi nhận dạng đã mã hoá trong kết nối tiếp theo.

Truy xuất, hết hạn và thu hồi chứng chỉ của nhà mạng

Trong trường hợp không có chứng chỉ nào được cài đặt trong hệ thống, hệ thống sẽ sử dụng URL được cung cấp trong cấu hình mạng di động imsi_key_download_url_string để hãy tải chứng chỉ xuống bằng phương thức HTTP GET. Hệ thống sử dụng dữ liệu di động chỉ khi nhà mạng allow_metered_network_for_cert_download_bool cấu hình được đặt thành true. Nếu không, hệ thống sẽ tải chứng chỉ xuống chỉ khi có kết nối Wi-Fi.

Hệ thống sẽ thực thi thời hạn chứng chỉ. Hệ thống bắt đầu tìm cách để gia hạn chứng chỉ 21 ngày trước ngày hết hạn chứng chỉ và sử dụng cùng một URL để tải chứng chỉ mới xuống.

Trong trường hợp máy chủ không thể giải mã danh tính được mã hoá, máy chủ gửi một tin nhắn EAP-Request/AKA-Notification có mã AT_NOTIFICATION General Failure (16384) để chấm dứt nền tảng trao đổi EAP.

Trong trường hợp chứng chỉ bị thu hồi hoặc hết hạn, máy chủ sẽ gửi một Tin nhắn EAP-Request/AKA-Notification chứa mã AT_NOTIFICATION Certificate Replacement Required (16385) để chấm dứt nền tảng trao đổi EAP. Để phản hồi, hệ thống sẽ áp dụng các phương pháp phỏng đoán nội bộ để xác định xem hãy xoá chứng chỉ này rồi thử tải một chứng chỉ mới xuống từ chứng chỉ đó URL.

Cung cấp khoá công khai

Cung cấp một URL công khai cho máy chủ, tốt nhất là sử dụng HTTP qua TLS, nơi lưu trữ chứng chỉ của hãng vận chuyển trong đó:

  1. Có thể trích xuất khoá công khai và thời hạn từ chứng chỉ.
  2. Thông tin từ máy chủ có định dạng JSON như sau:

    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.
    

    Sau đây là ví dụ về khoá công khai.

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