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 لكل مشغّل شبكة جوّال.
بالنسبة إلى الأجهزة التي تعمل بنظام التشغيل 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
: علامة تشير إلى ما إذا كان ينبغي السماح بتنزيل المفتاح العام لمشغّل شبكة الجوّال عبر شبكة (خلوية) بمقياس استهلاك في حال عدم ضبط هذا الإعداد، لن يتمكّن جهاز جديد لا يتضمّن اتصالاً بشبكة 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-AKA -
1
: EAP-SIM 6
: EAP-AKA'
-
- تنسيق نطاق NAI هو
wlan.mncXXX.mccYYY.3gppnetwork.org
حيث يتم استبدالXXX
برمز شبكة الجوّال لشريحة SIM (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 المستندة إلى شريحة 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 المستخدَمة قبل بدء مبادلة true
.
-
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
لتحميل شهادة باستخدام طريقة 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)، يستضيف شهادة مشغّل شبكة الجوّال على النحو التالي:
- يمكن استخراج المفتاح العام وتاريخ انتهاء الصلاحية من الشهادة.
تكون المعلومات الواردة من الخادم بتنسيق 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-----" } ] }