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: อาร์เรย์สตริงที่แต่ละรายการสตริงคือ SSID ของ Wi-Fi ที่เข้ารหัสแบบ Base64 และ ประเภท 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/some_filename.json"
    }
    
  • allow_metered_network_for_cert_download_bool: ธงที่ระบุว่า เพื่ออนุญาตการดาวน์โหลดคีย์สาธารณะของผู้ให้บริการผ่านการตรวจวัด (มือถือ) หากไม่ได้ตั้งค่า Flag นี้หมายถึงอุปกรณ์ใหม่ที่ไม่มี 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 สำหรับ Wi-Fi เมื่อเปิดใช้การคุ้มครองความเป็นส่วนตัวของ IMSI สำหรับการเชื่อมต่อ ข้อมูลประจำตัวของสมาชิกจะไม่ถูกส่งไปในที่โล่ง

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

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

  • โดยข้อมูลประจำตัวถาวรจะอยู่ในรูปแบบ <EAP-Method><IMSI>@<NAI realm>
  • คำนำหน้าเมธอด EAP คืออ็อกเท็ตเดี่ยวที่กำหนดเมธอด EAP ซึ่ง ที่ใช้สำหรับการตรวจสอบสิทธิ์ ได้แก่
    • 0: EAP-AKA
    • 1: ซิม EAP
    • 6: EAP-AKA
  • รูปแบบขอบเขต NAI คือ wlan.mncXXX.mccYYY.3gppnetwork.org ที่ XXX จะถูกแทนที่ด้วยรหัสเครือข่ายมือถือของซิมการ์ด (MNC) และ 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 ที่ใช้ซิม

เมื่อเปิดใช้การคุ้มครองความเป็นส่วนตัวของ 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
  • 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
  • 6: EAP-AKA

คู่คีย์ของค่าแอตทริบิวต์ตัวระบุคีย์เป็นคู่ที่ไม่บังคับและไม่มีส่วนต่อท้าย จุดสิ้นสุดของข้อมูลประจำตัวถาวรที่เข้ารหัสหากไม่มีการใช้งาน

ในจุดนี้ เซิร์ฟเวอร์จะค้นหาคีย์ส่วนตัวจากตัวระบุคีย์ (หาก ที่มีให้) ถอดรหัสข้อมูลประจำตัวที่เข้ารหัสโดยใช้คีย์ส่วนตัวของผู้ให้บริการ และ ดำเนินการตามขั้นตอนของ EAP ปกติต่อ

หลังจากตรวจสอบสิทธิ์เรียบร้อยแล้ว เซิร์ฟเวอร์จะสามารถระบุ ข้อมูลระบุตัวตนในการตรวจสอบสิทธิ์ซ้ำอย่างรวดเร็ว หรือข้อมูลประจำตัวชั่วคราว (นามแฝง) ซึ่งก็คือ ที่ใช้ในการเชื่อมต่อครั้งต่อๆ ไป หากไม่ได้ระบุข้อมูลประจำตัวชั่วคราวโดย ระบบจะส่งข้อมูลประจำตัวที่เข้ารหัสในการเชื่อมต่อครั้งต่อๆ ไป

การดึงข้อมูล การหมดอายุ และการเพิกถอนใบรับรองของผู้ให้บริการ

ในกรณีที่ไม่มีการติดตั้งใบรับรองไว้ในระบบ ระบบจะใช้ URL ที่ระบุในการกำหนดค่าผู้ให้บริการ imsi_key_download_url_string สำหรับ ดาวน์โหลดใบรับรองโดยใช้เมธอด HTTP GET ระบบจะใช้อินเทอร์เน็ตมือถือ เฉพาะในกรณีที่ผู้ให้บริการ 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-----"
    } ]
    }