تتيح ميزة "شبكة Wi-Fi التابعة لمشغّل شبكة الجوّال" (التي تستخدم رقم IMSI مشفّرًا) المتوفّرة في نظام التشغيل Android 9 والإصدارات الأحدث للأجهزة الاتصال تلقائيًا بشبكات Wi-Fi التي يوفّرها مشغّل شبكة الجوّال. في المناطق التي تشهد ازدحامًا كبيرًا أو التي لا تتوفّر فيها تغطية شبكة الجوّال إلا بشكل محدود، مثل الملاعب أو محطات القطار تحت الأرض، يمكن استخدام شبكة Wi-Fi التابعة لمشغّل شبكة الجوّال لتحسين تجربة الاتصال لدى المستخدمين وتخفيف الازدحام.
تتصل الأجهزة التي تتضمّن ميزة Wi-Fi لمشغّل شبكة الجوّال تلقائيًا بشبكات Wi-Fi التي تم ضبطها لمشغّل شبكة الجوّال (الشبكات التي تتضمّن شهادة مفتاح عام). عندما يقطع المستخدم الاتصال يدويًا بشبكة Wi-Fi تابعة لمشغّل شبكة جوّال، يتم إدراج الشبكة في القائمة السوداء لمدة 24 ساعة (لا يتم الاتصال تلقائيًا). يمكن للمستخدمين الاتصال يدويًا بالشبكات المدرَجة في القائمة السوداء في أي وقت.
التنفيذ
على الشركات المصنّعة للأجهزة ومشغّلي شبكات الجوّال اتّخاذ الإجراءات التالية لتفعيل ميزة "شبكة Wi-Fi من مشغّل شبكة الجوّال".
الشركات المصنّعة
بالنسبة إلى الأجهزة التي تعمل بالإصدار 11 من نظام التشغيل Android والإصدارات الأحدث، استخدِم واجهة برمجة التطبيقات لاقتراحات شبكة 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 الذي يتم تنزيل ملف 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 هي ثمانية بتات فردية تحدّد طريقة EAP المستخدَمة للمصادقة:
-
0
: EAP-AKA -
1
: EAP-SIM -
6
: EAP-AKA'
-
- يكون تنسيق نطاق NAI هو
wlan.mncXXX.mccYYY.3gppnetwork.org
حيث يتم استبدالXXX
برمز شبكة الجوّال (MNC) الخاص بشريحة SIM، ويتم استبدال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) المستخدَمة قبل بدء عملية تبادل بيانات المصادقة القابلة للتوسيع.
-
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
(16385) لإنهاء عملية تبادل بيانات EAP.Certificate Replacement Required
ورداً على ذلك، يطبّق النظام إرشادات داخلية لتحديد ما إذا كان سيُزيل الشهادة ويحاول تنزيل شهادة جديدة من عنوان 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-----" } ] }