Wi-Fi của nhà cung cấp dịch vụ

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

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ới mạng Wi-Fi của nhà mạng đã định cấu hình (các mạng có chứng chỉ khóa chung). Khi 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, mạng đó sẽ bị đưa vào danh sách đen trong 24 giờ (không có kết nối tự động). Người dùng có thể kết nối thủ công với các mạng nằm 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 đã triển khai Wi-Fi của nhà mạng, kết nối tự động qua Wi-Fi của nhà mạng bị tắt theo mặc định. Thông báo sẽ được gửi tới người dùng khi thiết bị cố gắng kết nối với mạng Wi-Fi của nhà mạng lần đầu tiên.

Thực hiện

Nhà sản xuất thiết bị và nhà cung cấp dịch vụ phải thực hiện những việc sau để triển khai Wi-Fi của nhà cung cấp dịch vụ.

Nhà sản xuất của

Đối với các thiết bị chạy Android 11 trở lên, hãy sử dụng API gợi ý 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 tham số carrier_wifi_string_array cho từng nhà cung cấp dịch vụ trong trình quản lý cấu hình nhà cung cấp dịch vụ .

  • carrier_wifi_string_array : Một mảng chuỗi trong đó mỗi mục nhập chuỗi là SSID Wi-Fi được mã hóa Base64 và loại EAP được phân tách bằng dấu phẩy, trong đó loại EAP là 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 dành cho SOME_SSID_NAME sử dụng EAP-AKASome_Other_SSID sử 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 nhà cung cấp dịch vụ , hãy định cấu hình các tham số sau cho từng nhà cung cấp dịch vụ:

  • imsi_key_availability_int : Xác định xem khóa được sử dụng để mã hóa IMSI có sẵn cho WLAN hay không (bit 1 được đặt), EPDG (bit 0 được đặt) hoặc cả hai (cả bit 0 và bit 1 đều được đặt). Ví dụ: cấu hình sau cho biết rằng mã hóa IMSI có sẵn cho WLAN nhưng không có cho EPDG:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string : URL mà từ đó proto chứa khóa chung của nhà cung cấp dịch vụ được sử dụng để mã hóa IMSI được tải 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 : Cờ cho biết có cho phép tải xuống khóa chung của nhà mạng qua mạng có đồng hồ đo (di động) hay không. Nếu cờ này không được đặt, thiết bị mới không có kết nối Wi-Fi sẽ không thể kết nối với mạng Wi-Fi của nhà cung cấp dịch vụ vì thiết bị đó sẽ không được phép tải xuống khóa.

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

Hãng vận chuyển

Để triển khai Wi-Fi của nhà cung cấp dịch vụ, nhà cung cấp dịch vụ phải kích hoạt tính năng bảo vệ quyền riêng tư IMSI và cung cấp khóa chung.

Bảo vệ quyền riêng tư của IMSI

Android bảo vệ tính bảo mật của danh tính vĩnh viễn của người đăng ký (IMSI) bằng cách sử dụng mật mã khóa công khai. Android triển khai thông số kỹ thuật của Liên minh băng thông rộng không dây (WBA) để bảo vệ quyền riêng tư IMSI cho Wi-Fi . Khi tính năng bảo vệ quyền riêng tư IMSI được bật cho một kết nối, danh tính người đăng ký cố định sẽ không được truyền đi một cách rõ ràng qua mạng.

Mã hóa danh tính vĩnh viễn

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

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

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

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

Khi bảo vệ quyền riêng tư IMSI được bật trên một kết nối, hệ thống sẽ không gửi danh tính cố định khi nhận được EAP-Request/Identity , thay vào đó, hệ thống sẽ phản hồ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à tùy chọn. Nếu cấu hình sóng mang enable_eap_method_prefix_bool được đặt thành true thì ký tự đầu tiên của danh tính (trước anonymous ) sẽ thông báo cho máy chủ về loại phương thức EAP được sử dụng trước khi quá trình trao đổi EAP bắt đầu.

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

Nếu cấu hình nhà cung cấp dịch vụ được đặt thành false thì tiền tố này sẽ không có trong tin nhắn.

Để phản hồi, máy chủ sẽ gửi thông báo EAP-Request/AKA-Identity và hệ thống sẽ 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 thông báo cho máy chủ rằng danh tính được mã hóa được sử dụng hoặc loại phương thức EAP được định cấu hình:

  • \0 : Danh tính vĩnh viễn được mã hóa
  • 0 : EAP-AKA
  • 1 : EAP-SIM
  • 6 : EAP-AKA'

Cặp giá trị thuộc tính định danh khóa là tùy chọn và không được thêm vào cuối danh tính vĩnh viễn được mã hóa nếu không được sử dụng.

Tại thời điểm này, máy chủ định vị khóa riêng từ mã định danh khóa (nếu được cung cấp), giải mã danh tính được mã hóa bằng khóa riêng của nhà cung cấp dịch vụ và tiếp tục luồng EAP bình thường.

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

Thu hồi, hết hạn và thu hồi chứng chỉ nhà cung cấp dịch vụ

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 nhà cung cấp dịch vụ imsi_key_download_url_string để tải xuống chứng chỉ bằng phương thức HTTP GET. Hệ thống chỉ sử dụng dữ liệu di động nếu cấu hình nhà cung cấp dịch vụ allow_metered_network_for_cert_download_bool được đặt thành true . Nếu không, hệ thống chỉ tải xuống chứng chỉ khi có kết nối Wi-Fi.

Việc hết hạn chứng chỉ được thực thi bởi hệ thống. Hệ thống bắt đầu cố gắng 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 xuống chứng chỉ mới.

Trong trường hợp máy chủ không thể giải mã danh tính được mã hóa, máy chủ sẽ gửi tin nhắn EAP-Request/AKA-Notification với mã AT_NOTIFICATION General Failure (16384) để chấm dứt 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 tin nhắn EAP-Request/AKA-Notification với mã AT_NOTIFICATION Certificate Replacement Required (16385) để chấm dứt trao đổi EAP. Để phản hồi, hệ thống sẽ áp dụng phương pháp phỏng đoán nội bộ để xác định xem có nên xóa chứng chỉ và thử tải xuống chứng chỉ mới từ cùng một URL hay không.

Cung cấp khóa công khai

Cung cấp URL công khai cho máy chủ, tốt nhất là sử dụng HTTP qua TLS, lưu trữ chứng chỉ của nhà cung cấp dịch vụ trong đó:

  1. Khóa công khai và thời hạn có thể được trích xuất 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à một ví dụ về khóa công khai.

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