شبكة Wi-Fi

Carrier 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 والإصدارات الأحدث، استخدم واجهة برمجة تطبيقات اقتراحات Wi-Fi لإضافة ملفات تعريف Wi-Fi لكل شركة اتصالات.

بالنسبة للأجهزة التي تعمل بالإصدار 10 أو أقل، قم بإضافة ملفات تعريف Wi-Fi عن طريق تكوين معلمة carrier_wifi_string_array لكل ناقل في مدير تكوين الناقل .

  • carrier_wifi_string_array : صفيف سلسلة حيث يكون كل إدخال سلسلة عبارة عن معرف SSID لشبكة Wi-Fi بتشفير Base64 ونوع EAP مفصول بفاصلة، حيث يكون نوع EAP عددًا صحيحًا (راجع سجل بروتوكول المصادقة القابل للتوسيع (EAP) ). على سبيل المثال، التكوين التالي خاص بـ 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 من الاتصال بشبكة Carrier 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 : إي أي بي سيم
    • 6 : EAP-AKA'
  • تنسيق مجال NAI هو wlan.mnc XXX .mcc YYY .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 المستخدم قبل بدء تبادل EAP.

  • 0 : EAP-AKA
  • 1 : إي أي بي سيم
  • 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 : إي أي بي سيم
  • 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-----"
    } ]
    }