‫Wi-Fi شرکت مخابراتی

‫Wi-Fi شرکت مخابراتی ویژگی اتصال خودکار (بااستفاده از IMSI رمزگذاری‌شده) است که در Android 9 و نسخه‌های بالاتر دردسترس است و به دستگاه‌ها امکان می‌دهد به‌طور خودکار به شبکه‌های Wi-Fi پیاده‌سازی‌شده توسط شرکت مخابراتی متصل شوند. در مناطق پر ازدحام یا با پوشش سلولی حداقلی مانند استادیوم یا ایستگاه قطار زیرزمینی، Wi-Fi شرکت مخابراتی می‌تواند تجربه اتصال کاربران را بهبود بخشد و ترافیک را تخلیه کند.

دستگاه‌های دارای ویژگی Wi-Fi شرکت مخابراتی به‌طور خودکار به شبکه‌های Wi-Fi شرکت مخابراتی پیکربندی‌شده (شبکه‌های دارای گواهینامه کلید عمومی) متصل می‌شوند. وقتی کاربر به‌صورت دستی از شبکه Wi-Fi شرکت مخابراتی قطع می‌شود، شبکه به‌مدت ۲۴ ساعت در فهرست رد قرار می‌گیرد (اتصال خودکار برقرار نمی‌شود). کاربران می‌توانند هرزمان بخواهند به‌صورت دستی به شبکه‌های فهرست غیرمجاز متصل شوند.

پیاده‌سازی

تولیدکنندگان دستگاه و شرکت‌های مخابراتی باید اقدامات زیر را برای پیاده‌سازی Wi-Fi شرکت مخابراتی انجام دهند.

سازندگان

برای دستگاه‌های دارای Android 11 و نسخه‌های بالاتر، از میانای برنامه کاربردی پیشنهاد Wi-Fi برای افزودن نمایه‌های Wi-Fi برای هر شرکت مخابراتی استفاده کنید.

برای دستگاه‌هایی که Android 10 یا پایین‌تر را اجرا می‌کنند، با پیکربندی پارامتر carrier_wifi_string_array برای هر شرکت مخابراتی در مدیر پیکربندی شرکت مخابراتی، نمایه‌های Wi-Fi را اضافه کنید.

  • 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 (بیت ۱ تنظیم شده است)، EPDG (بیت ۰ تنظیم شده است)، یا هر دو (بیت ۰ و بیت ۱ تنظیم شده‌اند) دردسترس است یا نه. برای مثال، پیکربندی زیر نشان می‌دهد که رمزگذاری IMSI برای WLAN دردسترس است اما برای EPDG دردسترس نیست:

    config {
      key: "imsi_key_availability_int"
      int_value: 2
    }
    
  • imsi_key_download_url_string:

    نشانی وب که از آن پروتکل حاوی کلید عمومی شرکت مخابراتی استفاده‌شده برای رمزگذاری IMSI بارگیری می‌شود. برای مثال، پیکربندی زیر نشانی وب خاصی را ارائه می‌دهد:

    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 مشخصات «اتحادیه پهن‌باند بی‌سیم» (WBA) را برای محافظت از حریم خصوصی IMSI برای Wi-Fi پیاده‌سازی می‌کند. وقتی محافظت از حریم خصوصی IMSI برای اتصالی فعال باشد، هویت دائمی مشترک به‌صورت واضح ازطریق هوا منتقل نمی‌شود.

رمزگذاری دائمی هویت

قالب هویت دائمی رمزگذاری‌شده به این صورت است:

  • هویت دائمی در قالب <EAP-Method><IMSI>@<NAI realm> است.
  • پیشوند «روش EAP» یک اکتت تکی است که روش EAP مورداستفاده برای اصالت‌سنجی را تعریف می‌کند:
    • ‫0: EAP-AKA
    • ‫1: EAP-SIM
    • 6: EAP-AKA'
  • قالب قلمرو NAI wlan.mnc<var>XXX</var>.mcc<var>YYY</var>.3gppnetwork.org است که در آن XXX با کد شبکه تلفن همراه (MNC) سیم‌کارت و YYY با کد کشور تلفن همراه (MCC) جایگزین می‌شود.
  • هویت دائمی بااستفاده از کلید عمومی RSA ارائه‌شده توسط شرکت مخابراتی رمزگذاری می‌شود. کلید عمومی در گواهینامه X.509 قرار دارد.
  • طرح رمزگذاری RSAES-OAEP با SHA-256 به‌عنوان تابع درهم‌سازی رمزنگاری است. این طرح رمزگذاری هر بار که استفاده می‌شود، نوشتار رمزی یکتایی را تضمین می‌کند و از این طریق از ایجاد هویت ماندگار دیگری که قابل ردیابی باشد جلوگیری می‌کند.
  • طول کلید RSA‏ ۲۰۴۸ بیت است.
  • بافر رمزگذاری ۲۵۶ بایت است.
  • نوشتار رمز با Base64 کدبندی می‌شود.
  • طول هویت دائمی رمزگذاری‌شده برونداد ۳۴۴ بایت است.
Encrypted Permanent Identity = Base64(RSAES-OAEP-SHA-256(<EAP-Method><IMSI>@<NAI Realm>))
شناسه کلید

شناسه کلید یک جفت مقدار مشخصه اختیاری است که شرکت مخابراتی به گواهی پیوست می‌کند تا به سرور اجازه دهد کلید خصوصی مناسب را درطول اصالت‌سنجی پیدا کند. نمونه‌ای از شناسه کلید CertificateSerialNumber=123456 است. اگر شناسه کلید ارائه شده باشد، به‌عنوان بخشی از فرایند اصالت‌سنجی به‌صورت واضح ارسال می‌شود.

اصلاحات روش‌های اصالت‌سنجی «پروتکل اصالت‌سنجی توسعه‌پذیر» مبتنی بر سیم‌کارت

وقتی محافظت از حریم خصوصی 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-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 را ادامه می‌دهد.

پس‌از اصالت‌سنجی موفق، سرور می‌تواند هویت اصالت‌سنجی مجدد سریع یا هویت موقت (نام مستعار) ارائه دهد که در اتصالات بعدی استفاده می‌شود. اگر سرور هویت موقتی ارائه نکند، سیستم هویت رمزگذاری‌شده را در اتصال بعدی ارسال می‌کند.

بازیابی، انقضا، و لغو گواهی شرکت مخابراتی

اگر گواهینامه‌ای در سیستم نصب نشده باشد، سیستم از نشانی وب ارائه‌شده در پیکربندی شرکت مخابراتی imsi_key_download_url_string برای بارگیری گواهینامه بااستفاده از روش HTTP GET استفاده می‌کند. سیستم فقط درصورتی از داده شبکه تلفن همراه استفاده می‌کند که پیکربندی شرکت مخابراتی allow_metered_network_for_cert_download_bool روی true تنظیم شده باشد. درغیراین‌صورت، سیستم گواهینامه را فقط زمانی که اتصال Wi-Fi دردسترس باشد بارگیری می‌کند.

انقضای گواهینامه توسط سیستم اعمال می‌شود. سیستم ۲۱ روز قبل‌از تاریخ انقضای گواهینامه، تلاش برای تمدید گواهینامه‌ها را آغاز می‌کند و از همان نشانی وب برای بارگیری گواهینامه جدید استفاده می‌کند.

اگر سرور نتواند هویت رمزگذاری‌شده را رمزگشایی کند، سرور پیام EAP-Request/AKA-Notification با کد AT_NOTIFICATION General Failure (۱۶۳۸۴) ارسال می‌کند تا تبادل EAP را خاتمه دهد.

اگر گواهی لغو یا منقضی شده باشد، سرور پیام EAP-Request/AKA-Notification را با کد AT_NOTIFICATION Certificate Replacement Required (16385) ارسال می‌کند تا تبادل EAP را خاتمه دهد. در پاسخ، سیستم از اکتشافات داخلی استفاده می‌کند تا تعیین کند که آیا گواهی را بردارد و تلاش کند گواهی جدیدی را از همان نشانی وب بارگیری کند یا نه.

کلید عمومی را ارائه دهید

نشانی وب عمومی سروری را ارائه دهید که ترجیحاً از HTTP over 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-----"
    } ]
    }