Back

Для пользователей Android и Linux, оценивающих открытые инструменты для eSIM, по всему миру.

Открытый LPA для eSIM

Любой спор о том, работает ли eSIM на de-Googled телефоне, на деле идёт об одном компоненте. Он называется local profile assistant, и понимание его превращает запутанный вопрос в проверяемый.

$25
  • LPA это системный компонент, который загружает и устанавливает профили eSIM
  • Универсального LPA в AOSP нет, поэтому его добавляют в каждую сборку отдельно
  • Android выбирает один LPA по разрешению и приоритету, объявленному в манифесте
  • OpenEUICC это открытый LPA для Android, привилегированная сборка достаёт до внутренних eSIM
  • Непривилегированный вариант достаёт только до съёмных чипов, разрешивших его сертификат
  • lpac, libeuicc, EasyLPAC, lpa-gtk и hermes закрывают десктоп, мобильный Linux и Chromium OS
криптоQR сразу

Чип в телефоне, который хранит профили eSIM, называется eUICC, и сам по себе он не делает ничего. Кто-то должен прочитать код активации, понять, на какой сервер провижининга он указывает, отработать протокол GSMA против этого сервера и записать полученный профиль в защищённое хранилище на чипе. Этот «кто-то» и есть local profile assistant, сокращённо LPA. В нём вся суть: чип стандартный, код стандартный, сервер стандартный, и единственная переменная это наличие LPA и его способность добраться до чипа.

Документация Android от Google описывает LPA как отдельное системное приложение, которое должно входить в образ сборки Android, и говорит, что производители устройств могут реализовать свой и подключить его к Android eUICC API. Прочитайте это внимательно, и вся ситуация с eSIM на de-Googled системах выводится отсюда. AOSP вам его не даёт. Кто-то должен положить его в сборку. Когда этого не сделал никто, у телефона есть исправное железо eSIM и нет способа им воспользоваться.

Как Android выбирает главный LPA

Публичный интерфейс, который вызывают приложения, это EuiccManager из пакета android.telephony.euicc. За ним тот, кто реализует работу с профилями, наследует EuiccService и объявляет этот сервис в своём манифесте. Дальше фреймворк спрашивает у менеджера пакетов приложения с разрешением WRITE_EMBEDDED_SUBSCRIPTIONS, объявляющие сервис для действия android.service.euicc.EuiccService, и выбирает то, у которого в манифесте объявлен наивысший приоритет. Рабочим LPA в один момент времени может быть только одно приложение.

Внутри этой схемы зашито жёсткое требование. Чтобы вообще вызывать соответствующие системные API, приложение LPA обязано быть системным и входить в системный образ. Это не столько заградительная политика Google, сколько следствие того, чем компонент занимается: он пишет в защищённый элемент, хранящий учётные данные оператора. Но отсюда же следует, что отсутствующий LPA нельзя добыть загрузкой чего-нибудь, и вот это самое частое заблуждение во всей теме.

Открытые реализации, которые действительно существуют

Их больше, чем принято думать, и ближе всего к канонической описи подходит руководство разработчика по eUICC и eSIM от Osmocom. На Android значимая реализация это OpenEUICC, который авторы описывают как полностью свободную и открытую реализацию local profile assistant для Android, поставляемую в двух вариантах. Привилегированный вариант нужно устанавливать как системное приложение, подписанное платформенным сертификатом и размещённое в системном разделе, и проект даёт сборщикам ROM файл со списком привилегированных приложений. Получив привилегии, он умеет управлять внутренними eSIM, внешними eSIM и чипами, доступными через считыватели USB CCID.

Второй вариант, EasyEUICC, ставится как обычное непривилегированное приложение, и его ограничения стоит понять, потому что их постоянно передают неверно. До eUICC, впаянного в ваш телефон, он добраться не может. Он получает доступ только к съёмным чипам eSIM, чьё поле ARA-M заранее выдаёт доступ его сертификату подписи, то есть производитель чипа должен был внести его в список разрешений. Вне Android есть lpac, библиотека на C с утилитой командной строки и с libeuicc в основе, есть EasyLPAC как настольный интерфейс, есть lpa-gtk для мобильного Linux и hermes, демон eSIM в Chromium OS. Часть из них кроссплатформенная. Ни одна не отменяет правила: на Android доступ к внутреннему чипу требует системных привилегий.

В каких сборках он есть и как это выяснить

Перечисление сборок это место, где ошибается большинство статей на эту тему, потому что ответ меняется от релиза к релизу и различается по устройствам даже внутри одного проекта. Надёжно сказать можно вот что. Стоковые сборки производителей на железе с поддержкой eSIM обычно включают LPA, часто проприетарный, от вендора или от Google. Усиленные системы на базе Android на том же железе нередко сохраняют его работоспособность, иногда за настройкой, выключенной по умолчанию. Сборки сообщества на базе LineageOS исторически были слабым местом: есть сообщения о том, что на официальных сборках пункт добавления eSIM отсутствует либо присутствует и совершенно не реагирует. Чтобы в ROM попал OpenEUICC, кто-то должен был это решить, и решение принимается на уровне сборки.

Поэтому не доверяйте списку, а проверяйте устройство. Работающий переход к добавлению eSIM, доводящий до сканера QR или до поля ручного ввода кода активации, это прямое свидетельство того, что какой-то LPA установлен и работает, независимо от того, какой именно и кто его написал. Отсутствие этого перехода или элемент, который ничего не делает при нажатии, это столь же прямое свидетельство обратного. Проверка бесплатна и всегда актуальнее любой страницы.

Почему это важно коммерчески и что мы можем обещать

Любая eSIM, которую вам продают, включая нашу, на этом уровне один и тот же объект: код активации GSMA, указывающий на сервер провижининга. Не бывает eSIM, совместимой с большим числом LPA, чем другая, и продавец, заявляющий особую совместимость с de-Googled системами, описывает то, чего в спецификации нет. Продавцы различаются другим, а именно честностью насчёт границы. Наша граница такая: профиль наш, LPA ваш.

Конкретно мы продаём настоящую мобильную линию оператора +44 в виде eSIM QR, не VoIP и не номер из общего пула, с безлимитными входящими SMS и звонками по всему миру через роуминг и без мобильных данных вообще. Цена $25 один раз, первые шесть месяцев включены, дальше $15 каждые шесть месяцев, автопродления нет, потому что карта у нас не хранится. Данные для поездок это отдельный продукт: от $1.99, более 190 стран, только интернет. Оплата только криптовалютой, двенадцать способов, без KYC, без аккаунта и без почты, а заказ находится по коду из 8 символов в формате AB12-CDEF. QR британского номера одноразовый и повторно не выпускается, поэтому проверка ниже это не формальность. И о потолке прямо: отсутствие KYC при покупке убирает бумажную часть, но не IMEI вашего устройства, не ваш IP-адрес и не записи оператора о работающей линии.

Как выяснить, что есть в вашей сборке

  1. 1

    Сначала подтвердите железо. Найдите EID, 32-значный идентификатор, принадлежащий eUICC, в Settings, Network and internet, SIMs на записи eSIM либо набрав *#06# и прочитав номера рядом с IMEI. Если у вас настроен adb, команда adb shell pm list features на устройстве с чипом должна показать android.hardware.telephony.euicc.

  2. 2

    Найдите точку входа. В Settings, Network and internet, SIMs пункт загрузки SIM, добавления eSIM или кнопка с плюсом рядом с записями SIM говорят о том, что сборка показывает установщик eSIM.

  3. 3

    Убедитесь, что он живой. Запустите этот процесс и дойдите до сканера QR или до поля ручного ввода кода активации. Выход на этот экран означает, что LPA установлен и отвечает. Элемент, который есть, но при нажатии ничего не делает, означает, что экран существует, а рабочего assistant за ним нет, и это известная картина.

  4. 4

    Если хотите узнать, какой именно LPA у вас, посмотрите в системных приложениях пакет profile assistant. На сборке с открытой реализацией он виден как системное приложение, а не как то, что вы установили сами, и документация самого проекта расскажет о его возможностях лучше любых догадок.

  5. 5

    Если LPA нет, оцените исправление трезво. Привилегированный открытый assistant должен быть встроен в ROM, подписан платформенным сертификатом и внесён в список привилегированных приложений, то есть это работа сборщика ROM, а не пользовательская установка. Непривилегированный вариант достаёт только до съёмных чипов eSIM, внёсших его сертификат в свой список разрешений, и никогда до внутреннего eUICC.

  6. 6

    Покупка имеет смысл только тогда, когда процесс работает. Наш номер +44 устанавливается через тот же экран как обычный код активации, и при сомнениях спросите нас до оплаты, потому что этот QR одноразовый и повторно не выпускается.

Вопросы и ответы

Что такое LPA в eSIM?

Это local profile assistant, программа, которая превращает код активации в установленный профиль. Она разбирает код, обращается к указанному в нём серверу провижининга, отрабатывает протокол GSMA и записывает профиль на чип eUICC. Без неё чип недостижим, каким бы хорошим он ни был, и именно с этим на деле сталкиваются люди, у которых eSIM не ставится на кастомной сборке.

Есть ли открытый LPA для Android?

Да. OpenEUICC описывает себя как полностью свободную и открытую реализацию local profile assistant для Android и выходит в двух вариантах. Привилегированный нужно устанавливать как системное приложение, подписанное платформенным сертификатом и размещённое в системном разделе, и после этого он умеет управлять внутренними и внешними eSIM. Непривилегированный вариант работает как обычное приложение, но получить доступ к eSIM, встроенной в телефон, не может.

Почему нельзя просто установить LPA из магазина приложений?

Потому что доступ к eUICC требует системных привилегий. Android требует, чтобы LPA был системным приложением в составе системного образа, прежде чем он сможет вызывать нужные API, а непривилегированный открытый вариант по замыслу ограничен съёмными чипами, которые явно внесли его сертификат подписи в список разрешений. Это ограничение прикрывает защищённый элемент с учётными данными оператора, поэтому ослаблять его вряд ли будут.

Существуют ли открытые LPA вне Android?

Их несколько. Библиотека lpac написана на C и идёт с утилитой командной строки, в её основе лежит libeuicc, а поверх есть настольные интерфейсы вроде EasyLPAC, GTK-клиент lpa-gtk для мобильных устройств на Linux и hermes, демон eSIM в Chromium OS. Руководство разработчика по eUICC и eSIM от Osmocom ведёт список известных реализаций для разных платформ, и это лучшая отправная точка, если нужно актуальное состояние.

Зависит ли покупаемая eSIM от того, каким LPA я пользуюсь?

Нет. Любая eSIM это стандартный код активации GSMA, указывающий на сервер провижининга, и ни один продавец не может сделать профиль более или менее совместимым с конкретным assistant. Если продавец заявляет особую совместимость с de-Googled системами, он описывает то, чего в спецификации нет. Сказать мы можем следующее: наши профили выдаются как обычные коды активации без списка одобренных устройств, а сможет ли ваша сборка его загрузить, решает ваша сборка.

Другие темы

Открытый LPA для eSIM

Любой спор о том, работает ли eSIM на de-Googled телефоне, на деле идёт об одном компоненте. Он называется local profile assistant, и понимание его превращает запутанный вопрос в проверяемый.

Купить UK eSIM - $25