2015-05-19 6 views
8

я уже работал со смарт-картами, и я знаком с командами APDU (которые определены в ISO/IEC 7816 и Глобальной платформы спецификации).Отправить APDU команды USIM/SIM-карты в андроида

Теперь я хочу знать, есть ли способ отправить команду APDU на мою USIM/SIM-карту, которая вставлена ​​на мой мобильный телефон? (Samsung A3 с установленной Android v4.4.4 KitKat.)

Я уже искал в Google, и я нашел некоторые родственные темы и инструментов, названные SIM Toolkit Применения и Ищите Android. Но я действительно не понимаю, что это такое? Являются ли эти элементы двумя приложениями, которые я должен установить на свой мобильный телефон? или эти два инструмента, которые были установлены на USIM/SIM-карте уже и получают команды с мобильного телефона?

В чем разница между Proactive команды, APDU команды и AT команды?

Должен ли я изучать Android для разработки приложений для SIM-карт или мне нужны спецификации Java-карты и стандарты ETSI?

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

ответ

11

На вашей SIM-карте могут быть два разных типа апплетов.

Общие апплеты

Общие апплеты, написанные на простом JavaCard. Это тип апплета, из которого вы привыкли в мире обычных смарт-карт. У него есть метод process, а смарт-карта - это пассивный объект в сообщении: ваше приложение отправляет команды APDU и ответы на карточку.

Вы можете общаться с этими апплетами, используя специальный набор Android-библиотек под названием SEEK для Android. Посмотрите на это tutorial, чтобы узнать, как создать такое приложение для телефона.

Начиная с уровня API 21, существует также способ связи с SIM-картой с использованием Telephony Manager. Однако есть одно огромное препятствие: вашему приложению требуется разрешение MODIFY_PHONE_STATE, которое может предоставляться только системным приложениям. Повторное, не-системное приложение не может использовать его.

SIM Toolkit апплеты

SIM-карта намного больше, чем просто общий смарт-карты и писать апплет для SIM-карты может быть гораздо более сложным, чем для общего смарт-карты, если вы хотите использовать все возможности, предлагаемые SIM-картой. Я рекомендую вам прочитать this paper - это чей-то диплом бакалавра, но это лучший обзор для новичка, которого я нашел по всему Интернету. Я также рекомендую this video from the DefConn conference.

Роль апплета, загруженного на SIM-карту, отличается: апплет больше не является пассивным объектом. Телефон регулярно спрашивает ваш апплет: «Есть ли что-нибудь новое, что я могу сделать для вас?» и ваш апплет может ответить: «Да, отправьте это SMS-сообщение» или «Скажите, в какое время это» и т. д. Кроме того, ваш апплет может стать слушателем некоторых событий: входящего вызова, полученных SMS-сообщений, истекшего интервала времени и т. д.Да, SIM-карта кажется пассивной с технической точки зрения, но ее роль фактически активна: SIM-карта отправляет команды на телефон.

Эти команды называются «проактивными командами» или командами SIM Application Toolkit. Структура такая же - CLA INS P1 P2 LC данные LE; смысл другой.

Вы можете отправить их из своего апплета, используя классы в специальном пакете JavaCard, который называется sim.toolkit.

(SIM Application Toolkit является стандартом, который определяет активные команды таким же образом, Global Platform определяет жизненный цикл апплета.)

Пример апплета Инструментарий SIM:

import sim.toolkit.ToolkitInterface; 
import sim.toolkit.ToolkitRegistry; 
... 
import javacard.framework.ISOException; 

public class STKTest extends Applet implements ToolkitInterface { 

public static void install(byte[] bArray, short bOffset, byte bLength) { 
    // GP-compliant JavaCard applet registration 
    new STKTest().register(bArray, (short) (bOffset + 1), bArray[bOffset]); 
} 
//this method handles standard APDU commands 
public void process(APDU apdu) { 
    // Good practice: Return 9000 on SELECT 
    if (selectingApplet()) { 
     return; 
    } 

    apdu.setIncomingAndReceive(); 
    final byte[] buf = apdu.getBuffer(); 
    switch (buf[ISO7816.OFFSET_INS]) { 
    case (byte) 0x00: 
     //do something 
     break; 
    } 
} 
//this method handles the SIM Toolkit commands 
public void processToolkit(byte event) throws ToolkitException { 
    switch (event) { 

    case ToolkitConstants.EVENT_TIMER_EXPIRATION: 
     //do something 
     break; 
    } 
} 

} 

Да, вы должны научиться Android - вам понадобится использовать библиотеку SEEK. Ваш вопрос очень широк, пожалуйста, спросите меня о каких-либо деталях, если хотите.

+0

Спасибо, дорогой vojta. ** 1 - ** Итак, _SEEK для Android_ - это библиотека, которую я использую для написания апплета для моего мобильного набора (а не для SIM/USIM) для связи с апплетами на USIM/SIM, верно? ** 2 - ** Вы знаете, что такое _SIM Toolkit Applicatin_ (aka STK)? – Jean

+0

Проактивные команды похожи на обычные команды APDU? Я имею в виду, что у них есть 4-байтовый обязательный заголовок, содержащий CLA, INS, P1 и P2? или они совершенно разные? – Jean

+0

В разделе 1 вы подчеркнули, что общие смарт-карты являются пассивной ролью в сообщении. это верно. но означает ли это, что карты USIM/SIM могут играть активную роль в общении с телефоном или они также ждут команд всегда, и они не могут начать общение? вы сказали, что телефон регулярно спрашивает апплет: «Есть ли что-нибудь новое, что я могу сделать для вас?» (** то же приложение, которое написано с помощью SEEK для библиотеки Android? **), и апплет на SIM-карте отвечает на него. поэтому SIM еще пассивен. не так ли? – Jean

4

Начиная с уровня API на уровне 22 (Android 5.1) есть еще один вариант, называемый «Привилегии перевозчика». Это позволяет несистемным приложениям отправлять APDU на SIM-карту с помощью Android TelephonyManager. См.: https://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges()

Например, приложения сотовой сети (MNO), распространяемые в Google Play, могут использовать это. Но снова это не для всех. В этом случае вам должен быть предоставлен доступ к SIM-карте. Правила доступа на SIM-карте управляются MNO, которые его выпустили. См. Также: http://source.android.com/devices/tech/config/uicc.html