Подпишите приложение с помощью сертификатов привилегий оператора связи UICC

Я читал по этой ссылке информацию о подписании приложения оператором привилегии.

Я знаю, как подписать приложение с помощью хранилища ключей для рабочих выпусков, но как мне добавить сертификаты UICC в свое приложение, чтобы оно получило привилегии оператора?

Моя главная цель — иметь возможность вызывать функции TelephonyManager, например:

iccOpenLogicalChannel
iccCloseLogicalChannel
iccTransmitApduLogicalChannel
iccTransmitApduBasicChannel

Это трассировка стека, которую я получаю при вызове одной из вышеуказанных функций:

E/AndroidRuntime: FATAL EXCEPTION: main
E/AndroidRuntime: Process: com.xxxx, PID: 2668
E/AndroidRuntime: java.lang.SecurityException: No modify permission or carrier privilege.
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1599)
E/AndroidRuntime:     at android.os.Parcel.readException(Parcel.java:1552)
E/AndroidRuntime:     at com.android.internal.telephony.ITelephony$Stub$Proxy.iccOpenLogicalChannel(ITelephony.java:2966)
E/AndroidRuntime:     at android.telephony.TelephonyManager.iccOpenLogicalChannel(TelephonyManager.java:2914)
E/AndroidRuntime:     at android.view.View.performClick(View.java:5198)
E/AndroidRuntime:     at android.view.View$PerformClick.run(View.java:21147)
E/AndroidRuntime:     at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime:     at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime:     at android.os.Looper.loop(Looper.java:148)
E/AndroidRuntime:     at android.app.ActivityThread.main(ActivityThread.java:5417)
E/AndroidRuntime:     at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
E/AndroidRuntime:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

Заранее спасибо!


person CompEng88    schedule 05.11.2015    source источник


Ответы (2)


Вопрос, который вы должны задать себе, на самом деле другой: Как мне получить сертификат для моего ключа подписи приложения в UICC? Когда он у вас есть, фактический процесс подписания ничем не отличается от любого другое хранилище ключей.

Итак, у вас будет хранилище ключей, содержащее вашу пару ключей подписи и сертификат для этого ключа. Сертификат может быть либо самозаверяющим сертификатом (обычно это относится к ключам подписи приложения Android), либо сертификатом, выданным вам владельцем карты UICC (оператор мобильной связи/оператор). В первом случае вам нужно будет убедить владельца UICC добавить этот самозаверяющий сертификат в список управления доступом (/приложение) на вашей UICC. Во втором случае носитель обычно включает корневой сертификат, соответствующий сертификату, выданному вам для UICC.

Затем вы можете использовать это хранилище ключей для подписи приложения (как обычно).

person Michael Roland    schedule 07.11.2015
comment
Я понял это на самом деле. Ссылка, которую я разместил в Google, недостаточно хорошо объясняет это. На самом деле они хотят, чтобы вы использовали свое собственное хранилище ключей и добавили правило доступа для sha этого хранилища ключей на смарт-карту через OTA. (или, как вы сказали, другой способ тоже должен работать) - person CompEng88; 09.11.2015
comment
Я хотел бы найти сертификат, используемый в смоделированной UICC, в AVDManager, чтобы подписать им мое приложение, а затем получить доступ к API CarrierConfiguration, чтобы поиграть с настройками VoLTE. Где я могу найти сертификат? Спасибо ! - person Alex; 30.08.2016
comment
Привет, Алекс, я тоже работаю над тем же требованием, у тебя есть какое-нибудь решение? - person Yerram Naveen; 02.11.2016
comment
Как получить сертификат для моего ключа подписи приложения в UICC? - person Benny; 15.08.2017
comment
@ CompEng88 CompEng88 У меня есть аналогичное требование, как вам удалось сделать ваше приложение приложением с привилегиями оператора. Также вы, кажется, упоминаете, что ссылка на Google плохо объясняет. Пожалуйста, поделитесь своими выводами - person DJphy; 29.01.2020
comment
@DJphy: Вот руководство, как сделать приложение приложением с привилегиями оператора github.com/herlesupreeth/CoIMS_Wiki - person Skyprenet; 05.02.2020
comment
@Skyprenet Спасибо за ссылку, надеюсь, шаги сработают, и это единственный способ? Я кажется заметил, правила доступа можно обновлять и по воздуху (OTA)!? - person DJphy; 06.02.2020
comment
@DJphy Для обновления правил доступа на SIM-карте вам понадобятся ключи KIC, KID и KIK. Эти ключи доступны только в том случае, если у вас есть программируемая версия SIM-карты (SIM-карта оператора, которую вы покупаете в магазинах, бесполезна, поскольку оператор не будет делиться этими ключами, о которых я упоминал ранее). Если бы вы могли подробно рассказать мне о типе вашей SIM-карты, я мог бы предложить обходной путь на его основе. - person Skyprenet; 06.02.2020
comment
@Skyprenet эй, спасибо за запись. Я разработчик для оператора. Мы являемся поставщиками услуг. Итак, как лучше всего добавить правила доступа к SIM-карте. Я новичок в этом. Краткое объяснение будет очень полезно - person DJphy; 08.02.2020
comment
@DJphy Если вы являетесь разработчиком для оператора, убедитесь, что у вас есть следующие ключи безопасности (KIC, KID и KIK), поскольку они необходимы для обновления правила доступа, каким бы методом вы ни пользовались. Дополнительную информацию о них можно найти в следующих spec< /а>. Получив эти ключи, вы можете установить апплет ARA-M на SIM-карту (если его еще нет). Этот апплет позаботится об аутентификации приложений Android на вашем телефоне на основе правила доступа, хранящегося в апплете ARA-M. - person Skyprenet; 10.02.2020
comment
@DJphy Продолжение здесь. Правила доступа в апплете ARA-M — это не что иное, как хеш-значение SHA-1 ключа подписи, с помощью которого вы подписываете приложение Android. Если на вашей SIM-карте уже установлен ARA-M, просто добавьте хеш-значение приложения, используя следующий инструмент, использующий ключи безопасности KIC и KID. ОС Android проверяет этот апплет и сверяет хеш-значение приложения, которое хочет иметь привилегии оператора, если оно совпадает, то приложению предоставляются привилегии оператора, иначе нет. - person Skyprenet; 10.02.2020
comment
@Skyprenet большое спасибо за направляющие линии. Позвольте мне попробовать это, и я вернусь, если не смогу продолжить. Если все пойдет хорошо, я опубликую это как ответ (полную информацию), чтобы другие могли извлечь пользу. Да здравствует Скайпренет - person DJphy; 10.02.2020
comment
@DJphy тебе это удалось? - person Rafael Padovani; 10.03.2020
comment
@RafaelPadovani Никогда не было возможности попробовать из-за отсутствия инструментов, информации в организации. Я больше не работаю в этой организации, так что, думаю, на данный момент это конец истории приложений Carrier. Но комментарии Skyprenet кажутся многообещающими, попробуйте. - person DJphy; 11.03.2020

Принятый ответ на самом деле не совсем правильный. В SIM-карте нет понятия корневого сертификата или подобных вещей.

Все правила доступа (APK и APPLET) хранятся в ARA-M или ARA-D. И ARA-M, и ARA-D являются просто отдельными АППЛЕТами только в соответствии с глобальной спецификацией.

В правиле доступа сохраняются подпись APK и APPLET AID, чтобы получить грант CarrierPriilege().

Подпись APK означает, что это SHA1 (20B) фактической подписи APK. Независимо от того, как получена подпись APK (самоподписанный или сертификат CA), SHA1 всегда будет другим. Следовательно, вся разрешенная подпись (SHA) должна быть отправлена ​​соответствующему ARA-M. Теперь, чтобы получить доступ к ARA-M, вам нужны боковые ключи канала (ENC, KEK, MAC), чтобы вручную отправить APDU или ссылку OTA, если это настоящая действующая SIM-карта.

Кстати, внутри SIM нет понятия корневого сертификата оператора мобильной связи. SIM все еще находится в десятилетии назад, за исключением теории GP и их SCP.

person Chandan Maity    schedule 27.01.2021