2015-05-19 13 views
8

byłem już pracował z kart inteligentnych i znam komendy APDU (które są zdefiniowane w ISO/IEC 7816 i Globalnej Platformie przeznaczeniem).wysyłania komend APDU do karty USIM/SIM w android

Teraz chcę wiedzieć, czy jest jakiś sposób wysłania polecenia APDU do mojej karty USIM/SIM, która jest włożona do mojego telefonu komórkowego? (Samsung A3 z zainstalowany Android v4.4.4 KitKat).

już wyszukiwane w Google i znalazłem kilka podobnych tematów i narzędzia o nazwie SIM AT i Szukajcie dla Androida. Ale tak naprawdę nie rozumiem, co to jest? Czy są to dwie aplikacje, które muszę zainstalować na moim telefonie komórkowym? czy te dwa narzędzia zostały już zainstalowane na karcie USIM/SIM i odbierają polecenia z telefonu komórkowego?

Jaka jest różnica między Proactive poleceń, poleceń APDU i poleceń AT?

Czy powinienem nauczyć się Androida tworzyć aplikacje kart SIM, czy potrzebuję tylko specyfikacji karty Java i standardów ETSI?

Z góry dziękuję.

Odpowiedz

11

Na karcie SIM mogą znajdować się dwa różne typy apletów.

Wspólne aplety

Wspólne aplety napisane prostym JavaCard. Jest to typ apletu, do którego przywykłeś ze świata popularnych kart inteligentnych. Ma on metodę process, a karta inteligentna jest pasywnym tematem w komunikacji: Twoja aplikacja wysyła polecenia APDU i odpowiedzi karty.

Możesz komunikować się z tymi apletami za pomocą specjalnego zestawu bibliotek Androida o nazwie SEEK dla Androida. Zapoznaj się z tym tutorial, aby dowiedzieć się, jak utworzyć taką aplikację telefoniczną.

Począwszy od poziomu interfejsu API 21, istnieje również sposób komunikacji z kartą SIM przy użyciu Telephony Manager. Istnieje jednak jedna ogromna przeszkoda: Twoja aplikacja wymaga uprawnień, które można przyznać tylko aplikacjom systemowym. Raczej niesystemowa aplikacja nie może z niego korzystać.

SIM Toolkit Aplety

karta

SIM jest znacznie więcej niż tylko wspólne karty inteligentnej i pisania apletu na karcie SIM może być dużo bardziej skomplikowane niż dla wspólnej karty inteligentnej, jeżeli chcesz korzystać ze wszystkich możliwości oferowane przez kartę SIM. Polecam przeczytać this paper - to czyjś tytuł licencjata, ale jest to najlepszy przegląd dla początkującego, którego znalazłem w Internecie. Polecam również this video from the DefConn conference.

Rola apletu załadowanego na karcie SIM jest inna: aplet nie jest już obiektem pasywnym. Telefon regularnie prosi o aplet: "Czy mogę coś dla ciebie zrobić?" a Twój aplet może odpowiedzieć: "Tak, wyślij tę wiadomość SMS" lub "Powiedz mi, która jest godzina" itd. Co więcej, Twój aplet może stać się słuchaczem niektórych zdarzeń: połączenia przychodzącego, odebranych wiadomości SMS, upływającego czasu itp.Tak, karta SIM wydaje się pasywna z technicznego punktu widzenia, ale jej rola jest w rzeczywistości aktywna: to karta SIM wysyła polecenia do telefonu.

Te polecenia nazywają się "proaktywnymi poleceniami" lub poleceniami pakietu SIM Application Toolkit. Struktura jest taka sama - dane CLA INS P1 P2 LC LE; znaczenie jest inne.

Możesz wysyłać je z apletu za pomocą klas w specjalnym pakiecie JavaCard o nazwie sim.toolkit.

(SIM Application Toolkit jest standardem, który określa proaktywnych poleceń w taki sam sposób globalna platforma określa cykl apletu.)

Przykład SIM Toolkit apletu:

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; 
    } 
} 

} 

Tak, należy nauczyć Android - będziesz go potrzebować do korzystania z biblioteki SEEK. Twoje pytanie jest bardzo szerokie, proszę pytać mnie o wszelkie szczegóły, jeśli chcesz.

+0

Dzięki droga Vojta. ** 1 - ** Więc _EEK dla Androida_ to biblioteka, której używam do pisania apletu dla mojego zestawu mobilnego (a nie dla SIM/USIM) do komunikacji z apletami na USIM/SIM, prawda? ** 2 - ** Czy masz pojęcie, co to jest _SIM Toolkit Applicatin_ (aka STK)? – Jean

+0

Czy polecenia proaktywne są podobne do zwykłych poleceń APDU? Mam na myśli, czy mają 4-bajtowy nagłówek obowiązkowy zawierający CLA, INS, P1 i P2? lub są całkowicie różne? – Jean

+0

W sekcji 1 podkreśliłeś, że wspólne karty inteligentne są pasywną rolą w komunikacji. Zgadza się. ale czy to oznacza, że ​​karty USIM/SIM mogą pełnić aktywną rolę w komunikacji z telefonem, czy też zawsze czekają na polecenia i nie mogą rozpocząć komunikacji? powiedziałeś, że telefon prosi aplet regularnie: "Czy jest coś nowego, co mogę dla ciebie zrobić?" (** ta sama aplikacja, która jest napisana przy użyciu SEEK dla biblioteki Android? **) i aplet na SIM odpowiada na to. więc karta SIM jest jeszcze pasywna. Czyż nie? – Jean

4

Począwszy od poziomu API 22 (Android 5.1) jest inna opcja o nazwie "Uprawnienia operatora". Pozwala aplikacjom niesystemowym na wysyłanie APDU do karty SIM za pomocą Android TelephonyManager. Zobacz: https://developer.android.com/reference/android/telephony/TelephonyManager.html#hasCarrierPrivileges()

Na przykład aplikacje mobilnego operatora sieci (MNO) dystrybuowane w Google Play mogą z niego korzystać. Ale znowu nie jest otwarty dla wszystkich. W takim przypadku musisz mieć dostęp do karty SIM. Reguły dostępu na karcie SIM są zarządzane przez operatora MNO, który je wydał. Zobacz także: http://source.android.com/devices/tech/config/uicc.html

Powiązane problemy