ผู้ให้บริการ 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 และสูงกว่าใช้ ข้อเสนอแนะ API Wi-Fi เพื่อเพิ่มโปรไฟล์ Wi-Fi สำหรับแต่ละผู้ให้บริการ

สำหรับอุปกรณ์ที่ใช้ 10 หรือต่ำกว่าเพิ่มโปรไฟล์ Wi-Fi โดยการกำหนดค่า carrier_wifi_string_array พารามิเตอร์สำหรับแต่ละผู้ให้บริการใน ผู้จัดการผู้ให้บริการกำหนดค่า

  • carrier_wifi_string_array : อาร์เรย์สตริงที่แต่ละรายการเป็นสตริงเข้ารหัส Base64 Wi-Fi SSID และ 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 : URL ที่โปรโตที่มีกุญแจสาธารณะของผู้ให้บริการที่ใช้สำหรับการเข้ารหัส IMSI ถูกดาวน์โหลด ตัวอย่างเช่น การกำหนดค่าต่อไปนี้ให้ 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 จะไม่สามารถเชื่อมต่อกับเครือข่าย Carrier Wi-Fi เนื่องจากจะไม่ได้รับอนุญาตให้ดาวน์โหลดคีย์

    config {
      key: "allow_metered_network_for_cert_download_bool"
      bool_value: true
    }
    

ผู้ให้บริการ

ในการใช้ Wi-Fi ของผู้ให้บริการ ผู้ให้บริการต้องเปิดใช้งานการป้องกันความเป็นส่วนตัว IMSI และจัดเตรียมคีย์สาธารณะ

IMSI การปกป้องความเป็นส่วนตัว

Android ปกป้องความลับของข้อมูลประจำตัวถาวรของผู้สมัครสมาชิก (IMSI) โดยใช้การเข้ารหัสคีย์สาธารณะ การดำเนินการหุ่นยนต์ Wireless Broadband Alliance (WBA) ข้อกำหนดสำหรับ คุ้มครองข้อมูลส่วนบุคคล IMSI สำหรับ Wi-Fi เมื่อเปิดใช้งานการป้องกันความเป็นส่วนตัว IMSI สำหรับการเชื่อมต่อ ข้อมูลประจำตัวสมาชิกถาวรจะไม่ถูกส่งผ่านทางอากาศ

การเข้ารหัสข้อมูลประจำตัวแบบถาวร

รูปแบบของข้อมูลประจำตัวถาวรที่เข้ารหัสมีดังนี้:

  • ตัวตนที่ถาวรอยู่ในรูปแบบของ <IMSI>@<NAI realm> รูปแบบ NAI ดินแดนเป็น wlan.mnc XXX .mcc YYY .3gppnetwork.org ที่ XXX จะถูกแทนที่ด้วยรหัสเครือข่ายโทรศัพท์มือถือซิมการ์ด (MNC) และ YYY จะถูกแทนที่ด้วยรหัสประเทศโทรศัพท์มือถือ (MCC)
  • ข้อมูลประจำตัวถาวรถูกเข้ารหัสโดยใช้กุญแจสาธารณะ RSA ที่ผู้ให้บริการจัดหาให้ คีย์สาธารณะถูกรวมในการ X.509 ใบรับรอง
  • รูปแบบการเข้ารหัสเป็น RSAES-พ กับ SHA-256 เป็นฟังก์ชันแฮชการเข้ารหัสลับ รูปแบบการเข้ารหัสนี้รับประกันข้อความรหัสที่ไม่ซ้ำกันทุกครั้งที่ใช้แบบแผน ดังนั้นจึงหลีกเลี่ยงข้อมูลประจำตัวแบบถาวรที่สามารถติดตามได้
  • ความยาวคีย์ RSA คือ 2048 บิต
  • บัฟเฟอร์การเข้ารหัสคือ 256 ไบต์
  • ข้อความตัวเลขถูกเข้ารหัสด้วย Base64
  • ความยาวข้อมูลประจำตัวถาวรที่เข้ารหัสเอาต์พุตคือ 344 ไบต์
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<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 การตั้งค่าผู้ให้บริการดาวน์โหลดใบรับรอง ระบบจะใช้ข้อมูลโทรศัพท์มือถือเท่านั้นถ้า allow_metered_network_for_cert_download_bool การตั้งค่าผู้ให้บริการมีการตั้งค่า true มิฉะนั้น ระบบจะดาวน์โหลดใบรับรองเมื่อมีการเชื่อมต่อ Wi-Fi เท่านั้น

ระบบบังคับใช้การหมดอายุของใบรับรอง ระบบเริ่มพยายามต่ออายุใบรับรอง 21 วันก่อนวันหมดอายุใบรับรอง และใช้ URL เดียวกันเพื่อดาวน์โหลดใบรับรองใหม่

ในกรณีที่มีใบรับรองถูกเพิกถอนหรือถ้าเซิร์ฟเวอร์ไม่สามารถถอดรหัสตัวตนที่เข้ารหัสเซิร์ฟเวอร์ส่ง EAP-Request/AKA-Notification ข้อความกับ AT_NOTIFICATION รหัส General failure (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-----"
    } ]
    }