Sulla scheda SIM possono essere presenti due diversi tipi di applet.
applet comuni
applet comuni scritti in JavaCard pianura. Questo è il tipo di applet a cui sei abituato dal mondo delle comuni smart card. Ha il metodo process
e la smart card è il soggetto passivo nella comunicazione: la tua app invia comandi APDU e le risposte della carta.
È possibile comunicare con queste applet utilizzando un set speciale di librerie Android chiamato SEEK per Android. Dai un'occhiata a questo tutorial per imparare come creare un'applicazione del genere.
A partire dal livello API 21 esiste anche un modo per comunicare con la SIM utilizzando Telephony Manager. Tuttavia, c'è un enorme ostacolo: la tua app necessita dell'autorizzazione MODIFY_PHONE_STATE
, che può essere concessa solo alle app di sistema. Un'app reqular, non di sistema, non è autorizzata a usarlo.
SIM Toolkit applet
carta
Una SIM è molto più di una semplice smart card comune e la scrittura di un applet per una scheda SIM può essere molto più complicato di una smart card comune se si desidera utilizzare tutte le le possibilità offerte dalla carta SIM. Vi consiglio di leggere this paper - è una tesi di laurea di qualcuno, ma è la migliore panoramica per un principiante che ho trovato su Internet. Raccomando anche this video from the DefConn conference.
Il ruolo dell'applet caricata sulla scheda SIM è diverso: l'applet non è più un'entità passiva. Il telefono chiede regolarmente all'applet: "C'è qualcosa di nuovo che posso fare per te?" e l'applet può rispondere: "Sì, invia questo SMS, per favore" o "Dimmi che ora è" ecc. Inoltre, l'applet può diventare un ascoltatore di alcuni eventi: chiamata in arrivo, SMS ricevuti, intervallo di tempo trascorso ecc.Sì, la SIM card sembra essere passiva dal punto di vista tecnico, ma il suo ruolo è infatti attivo: è la carta SIM che invia comandi al telefono.
Questi comandi sono denominati "comandi proattivi" o comandi di SIM Application Toolkit. La struttura è la stessa - CLA INS P1 P2 LC data LE; il significato è diverso.
È possibile inviarli dall'applet utilizzando le classi in uno speciale pacchetto JavaCard denominato sim.toolkit
.
(SIM Application Toolkit è uno standard che specifica i comandi proattivi nello stesso modo piattaforma globale specifica ciclo di vita del applet.)
Esempio di SIM applet 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;
}
}
}
Sì, si dovrebbe imparare Android: ne avrai bisogno per utilizzare la libreria SEEK. La tua domanda è molto ampia, ti prego di chiedermi qualsiasi dettaglio, se vuoi.
Grazie caro vojta. ** 1 - ** Quindi, _SEEK per Android_ è una libreria che uso per scrivere applet per il mio set mobile (e non per SIM/USIM) per comunicare con le applet su USIM/SIM, giusto? ** 2 - ** Hai idea di cosa sia _SIM Toolkit Applicatin_ (aka STK)? – Jean
I comandi Proactive sono simili ai normali comandi APDU? Voglio dire che hanno un'intestazione obbligatoria di 4 byte contenente CLA, INS, P1 e P2? o sono totalmente diversi? – Jean
Nella sezione 1 hai sottolineato che le comuni smart card sono un ruolo passivo nella comunicazione. giusto. ma questo significa che le USIM/schede SIM possono avere un ruolo attivo nella comunicazione con il telefono o che aspettano sempre i comandi e non possono avviare una comunicazione? hai detto che il telefono chiede regolarmente all'applet "C'è qualcosa di nuovo che posso fare per te?" (** la stessa applicazione scritta usando SEEK per la libreria di Android? **) e l'applet della SIM risponde ad essa. quindi la SIM è ancora passiva. non è? – Jean