Функция автоматического подключения к сетям Wi-Fi (используя зашифрованный IMSI), доступная в Android 9 и более поздних версиях, позволяет устройствам автоматически подключаться к сетям Wi-Fi, предоставляемым операторами связи. В местах с высокой загруженностью или минимальным покрытием сотовой связи, таких как стадион или станция метро, функция автоматического подключения к сетям Wi-Fi может улучшить качество связи и разгрузить сеть.
Устройства с функцией Wi-Fi от оператора автоматически подключаются к настроенным сетям Wi-Fi оператора (сетям с сертификатом открытого ключа). Когда пользователь вручную отключается от сети Wi-Fi оператора, эта сеть блокируется на 24 часа (автоматическое подключение не происходит). Пользователи могут вручную подключаться к заблокированным сетям в любое время.
Выполнение
Производители устройств и операторы связи должны выполнить следующие действия для внедрения операторского Wi-Fi.
Производители
Для устройств под управлением Android 11 и выше используйте API подсказок Wi-Fi , чтобы добавить профили Wi-Fi для каждого оператора связи.
Для устройств под управлением Android 10 или более ранних версий добавьте профили Wi-Fi, настроив параметр carrier_wifi_string_array для каждого оператора в менеджере конфигурации оператора .
carrier_wifi_string_array:Массив строк, где каждая строковая запись представляет собой закодированный в Base64 идентификатор Wi-Fi SSID и тип 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-подключения не сможет подключиться к сети 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.mnc<var>XXX</var>.mcc<var>YYY</var>.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 carrier установлен в 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.
После успешной аутентификации сервер может предоставить идентификатор для быстрой повторной аутентификации или временный идентификатор (псевдоним), который используется в последующих соединениях. Если сервер не предоставляет временные идентификаторы, система отправляет зашифрованный идентификатор в последующем соединении.
Получение, истечение срока действия и аннулирование сертификата перевозчика
Если в системе не установлен сертификат, она использует 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 over 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-----" } ] }