Wi-Fi ของผู้ให้บริการคือฟีเจอร์การเชื่อมต่ออัตโนมัติ (ใช้ IMSI ที่เข้ารหัส) ที่พร้อมใช้งานใน Android 9 ขึ้นไป ซึ่งช่วยให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ที่ผู้ให้บริการติดตั้งใช้งานได้โดยอัตโนมัติ ในพื้นที่ที่มีการใช้งานหนาแน่นหรือมีสัญญาณโทรศัพท์น้อย เช่น สนามกีฬาหรือสถานีรถไฟใต้ดิน คุณสามารถใช้ Wi-Fi ของผู้ให้บริการเพื่อปรับปรุง ประสบการณ์การเชื่อมต่อของผู้ใช้และเพื่อลดการรับส่งข้อมูล
อุปกรณ์ที่มีฟีเจอร์ Wi-Fi ของผู้ให้บริการจะเชื่อมต่อกับ เครือข่าย Wi-Fi ของผู้ให้บริการที่กำหนดค่าไว้ (เครือข่ายที่มีใบรับรองคีย์สาธารณะ) โดยอัตโนมัติ เมื่อ ผู้ใช้ยกเลิกการเชื่อมต่อกับเครือข่าย Wi-Fi ของผู้ให้บริการด้วยตนเอง ระบบจะ ขึ้นบัญชีดำเครือข่ายดังกล่าวเป็นเวลา 24 ชั่วโมง (ไม่มีการเชื่อมต่ออัตโนมัติ) ผู้ใช้สามารถเชื่อมต่อกับเครือข่ายที่ถูกขึ้นบัญชีดำด้วยตนเองได้ทุกเมื่อ
การใช้งาน
ผู้ผลิตอุปกรณ์และผู้ให้บริการต้องดำเนินการต่อไปนี้เพื่อติดตั้งใช้งาน Wi-Fi ของผู้ให้บริการ
ผู้ผลิต
สำหรับอุปกรณ์ที่ใช้ Android 11 ขึ้นไป ให้ใช้ Wi-Fi suggestion API เพื่อเพิ่มโปรไฟล์ Wi-Fi สำหรับผู้ให้บริการแต่ละราย
สําหรับอุปกรณ์ที่ใช้ Android 10 หรือต่ำกว่า ให้เพิ่มโปรไฟล์ Wi-Fi โดย
กําหนดค่าพารามิเตอร์ carrier_wifi_string_array
สําหรับผู้ให้บริการแต่ละรายใน
เครื่องมือจัดการการกําหนดค่าของผู้ให้บริการ
carrier_wifi_string_array
: อาร์เรย์สตริงที่แต่ละรายการสตริงคือ SSID ของ Wi-Fi ที่เข้ารหัส Base64 และ ประเภท EAP ที่คั่นด้วยคอมมา โดยประเภท EAP เป็นจำนวนเต็ม (ดูรีจิสทรี Extensible Authentication Protocol (EAP)) เช่น การกำหนดค่าต่อไปนี้ใช้สำหรับ SOME_SSID_NAME โดยใช้ EAP-AKA และ Some_Other_SSID โดยใช้ EAP-SIMconfig { key: "carrier_wifi_string_array" text_array { item: "U09NRV9TU0lEX05BTUUK,23" item: "U29tZV9PdGhlcl9TU0lECg==,18" } }
ในเครื่องมือจัดการการกำหนดค่าของผู้ให้บริการ ให้กำหนดค่าพารามิเตอร์ต่อไปนี้สำหรับผู้ให้บริการแต่ละราย
imsi_key_availability_int
: ระบุว่าคีย์ที่ใช้สำหรับการเข้ารหัส IMSI พร้อมใช้งานสำหรับ WLAN (ตั้งค่าบิตที่ 1), EPDG (ตั้งค่าบิตที่ 0) หรือทั้ง 2 อย่าง (ตั้งค่าทั้งบิตที่ 0 และบิตที่ 1) ตัวอย่างเช่น การกำหนดค่าต่อไปนี้ระบุว่าการเข้ารหัส IMSI ใช้ได้กับ WLAN แต่ใช้กับ EPDG ไม่ได้config { key: "imsi_key_availability_int" int_value: 2 }
imsi_key_download_url_string
: URL ที่ใช้ดาวน์โหลด Proto ซึ่งมีคีย์สาธารณะของผู้ให้บริการที่ใช้สำหรับการ เข้ารหัส 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
: แฟล็กที่ระบุว่าจะอนุญาตให้ดาวน์โหลดคีย์สาธารณะของผู้ให้บริการผ่านเครือข่ายที่มีการวัดปริมาณการใช้งาน (เซลลูลาร์) หรือไม่ หากไม่ได้ตั้งค่าสถานะนี้ อุปกรณ์ใหม่ที่ไม่มีการเชื่อมต่อ Wi-Fi จะเชื่อมต่อเครือข่าย Wi-Fi ของผู้ให้บริการไม่ได้เนื่องจาก ระบบจะไม่อนุญาตให้ดาวน์โหลดคีย์config { key: "allow_metered_network_for_cert_download_bool" bool_value: true }
ผู้ให้บริการ
หากต้องการใช้ Wi-Fi ของผู้ให้บริการ ผู้ให้บริการต้องเปิดใช้การคุ้มครองความเป็นส่วนตัวของ IMSI และ ระบุคีย์สาธารณะ
การคุ้มครองความเป็นส่วนตัวของ IMSI
Android ปกป้องความลับของข้อมูลระบุตัวตนถาวร (IMSI) ของผู้ติดตาม โดยใช้วิทยาการเข้ารหัสคีย์สาธารณะ Android ใช้ข้อกำหนดของ Wireless Broadband Alliance (WBA) สำหรับการคุ้มครองความเป็นส่วนตัวของ IMSI สำหรับ Wi-Fi เมื่อเปิดใช้การคุ้มครองความเป็นส่วนตัวของ IMSI สำหรับการเชื่อมต่อ ระบบจะไม่ส่งข้อมูลประจำตัวของผู้สมัครใช้บริการถาวร แบบไม่เข้ารหัสทางอากาศ
การเข้ารหัสข้อมูลประจำตัวแบบถาวร
รูปแบบของข้อมูลระบุตัวตนถาวรที่เข้ารหัสมีดังนี้
- ข้อมูลประจำตัวถาวรอยู่ในรูปแบบ
<EAP-Method><IMSI>@<NAI realm>
- คำนำหน้า EAP-Method คืออ็อกเทตเดียวที่กำหนดวิธีการ EAP ที่ใช้สำหรับการตรวจสอบสิทธิ์
0
: EAP-AKA1
: EAP-SIM6
: EAP-AKA'
- รูปแบบของ NAI Realm คือ
wlan.mncXXX.mccYYY.3gppnetwork.org
โดยXXX
จะแทนที่ด้วยรหัสเครือข่ายมือถือ (MNC) ของซิมการ์ด และYYY
จะแทนที่ด้วยรหัสประเทศมือถือ (MCC) - ระบบจะเข้ารหัสข้อมูลประจำตัวถาวรโดยใช้คีย์สาธารณะ RSA ที่ผู้ให้บริการระบุ คีย์สาธารณะจะรวมอยู่ในใบรับรอง X.509
- รูปแบบการเข้ารหัสคือ RSAES-OAEP โดยใช้ SHA-256 เป็นฟังก์ชันแฮชที่เข้ารหัสลับ รูปแบบการเข้ารหัสนี้ รับประกันข้อความที่เข้ารหัสที่ไม่ซ้ำกันทุกครั้งที่ใช้รูปแบบนี้ จึงหลีกเลี่ยง ข้อมูลระบุตัวตนแบบถาวรอีกรายการหนึ่งที่ติดตามได้
- ความยาวคีย์ RSA คือ 2048 บิต
- บัฟเฟอร์การเข้ารหัสมีขนาด 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-AKA1
: EAP-SIM6
: 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-AKA1
: EAP-SIM6
: EAP-AKA'
คู่ค่าแอตทริบิวต์ตัวระบุคีย์เป็นตัวเลือกและจะไม่ต่อท้าย ท้ายข้อมูลระบุตัวตนถาวรที่เข้ารหัสหากไม่ได้ใช้งาน
ในขั้นตอนนี้ เซิร์ฟเวอร์จะค้นหาคีย์ส่วนตัวจากตัวระบุคีย์ (หากมี) ถอดรหัสข้อมูลประจำตัวที่เข้ารหัสโดยใช้คีย์ส่วนตัวของผู้ให้บริการ และดำเนินการโฟลว์ EAP ตามปกติ
เมื่อตรวจสอบสิทธิ์สำเร็จ เซิร์ฟเวอร์จะระบุตัวตนสำหรับการตรวจสอบสิทธิ์อีกครั้งอย่างรวดเร็วหรือตัวตนชั่วคราว (นามแฝง) ซึ่งใช้ในการเชื่อมต่อครั้งต่อๆ ไปได้ หากเซิร์ฟเวอร์ไม่ได้ระบุข้อมูลประจำตัวชั่วคราว ระบบจะส่งข้อมูลประจำตัวที่เข้ารหัสในการเชื่อมต่อครั้งถัดไป
การดึงข้อมูล การหมดอายุ และการเพิกถอนใบรับรองของผู้ให้บริการ
ในกรณีที่ไม่มีการติดตั้งใบรับรองในระบบ ระบบจะใช้
URL ที่ระบุในการกำหนดค่าผู้ให้บริการเพื่อ
ดาวน์โหลดใบรับรองโดยใช้เมธอด HTTP GETimsi_key_download_url_string
ระบบจะใช้อินเทอร์เน็ตมือถือ
ก็ต่อเมื่อมีการกำหนดค่า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 ที่โฮสต์ ใบรับรองของผู้ให้บริการ โดยมีรายละเอียดดังนี้
- คุณสามารถดึงคีย์สาธารณะและวันหมดอายุจากใบรับรองได้
ข้อมูลจากเซิร์ฟเวอร์อยู่ในรูปแบบ 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-----" } ] }