Отправка команд APDU на USIM / SIM-карту в android
Я уже работал со смарт-картами, и я знаком с командами APDU (которые определены в ISO / IEC 7816 и Глобальная Платформа спецификации).
теперь я хочу знать, есть ли способ отправить команду APDU на мою USIM/SIM-карту, которая вставлена в мой мобильный телефон? (Samsung A3 с Android версии 4.4.4 KitKat с установленной.)
Я уже искал в Google, и я нашел некоторые связанные темы и инструменты имени набор инструментов SIM Применение и искать Android. Но я не совсем понимаю, что это такое? Являются ли эти элементы двумя приложениями, которые я должен установить на свой мобильный телефон? или эти два инструмента, которые уже были установлены на USIM / SIM-карте и получают команды с мобильного телефона?
в чем разница между активные команды , команды APDU и AT команды?
должен ли я научиться android разрабатывать SIM карточные приложения или мне просто нужны спецификации Java-карт и стандарты ETSI?
спасибо заранее.
2 ответов
на вашей SIM-карте могут присутствовать два разных типа апплетов.
общие апплеты
общие апплеты, написанные на обычном JavaCard. Это тип апплета, к которому вы привыкли из мира обычных смарт-карт. У него есть process
метод и смарт-карта является пассивным субъектом в общении: ваше приложение отправляет команды APDU и ответы карты.
вы можете общаться с этими апплетами, используя специальный набор Android библиотеки под названием SEEK для Android. Взгляните на это учебник чтобы узнать, как создать такое приложение телефона.
начиная с уровня API 21 существует также способ связи с SIM с помощью Диспетчер Телефония. Тем не менее, есть одно огромное препятствие: ваше приложение нуждается MODIFY_PHONE_STATE
разрешение, которое может быть предоставлено только системным приложениям. Reqular, несистемное приложение не разрешено использовать его.
апплеты SIM Toolkit
A SIM-карта-это гораздо больше, чем просто обычная смарт-карта, и написание апплета для SIM-карты может быть намного сложнее, чем для общей смарт-карты, если вы хотите использовать все возможности SIM-карты. Я рекомендую вам прочитать этой статье - это чья-то дипломная работа, но это лучший обзор для новичка, я нашел по всему интернету. Я также рекомендую это видео с конференции DefConn.
роль загруженного апплета на SIM-карте все иначе: апплет больше не является пассивной сущностью. Телефон регулярно спрашивает ваш апплет: "есть ли что-то новое, что я могу для вас сделать?"и ваш апплет может ответить:" Да, отправьте это SMS, пожалуйста"или" скажите мне, Который час " и т. д. Кроме того, ваш апплет может стать слушателем некоторых событий: входящего звонка, получении SMS, интервал времени и т. д. Да, SIM-карта кажется пассивной с технической точки зрения, но ее роль на самом деле активная: это SIM-карта, которая отправляет команды к телефону.
эти команды называются "проактивными командами" или командами SIM Application Toolkit. Структура одинакова-CLA INS P1 P2 LC data LE; значение другое.
вы можете отправить их из своего апплета, используя классы в специальном пакете JavaCard под названием sim.toolkit
.
(SIM Application Toolkit-это стандарт, который определяет проактивные команды точно так же, как глобальная платформа определяет жизненный цикл апплета.)
пример апплета SIM Toolkit:
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 - вам нужно будет использовать библиотеку поиска. Ваш вопрос очень широк, пожалуйста, спросите меня о любых деталях, если хотите.
начиная с уровня API 22 (Android 5.1) есть еще один вариант под названием "привилегии перевозчика". Он позволяет несистемным приложениям отправлять APDUs на 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