Programovanie

Ako napísať applet Java Card: Príručka pre vývojárov

Tento článok vás prevedie procesom vytvorenia jednoduchého appletu elektronickej peňaženky a poskytne pokyny na zostavenie appletu a vytvorenie jeho kódu. Ak potrebujete osvieženie základov technológie Java Card, pozrite si marec 1998 Vývojár Java stĺpec „Pochopenie karty Java Card 2.0“, ktorý poskytuje prehľad čipových kariet a popisuje architektúru systému, rozhrania API a behové prostredie technológie Java Card. Z dôvodu konzistencie tento článok používa rovnaký príklad appletu peňaženky, aký bol použitý v stĺpci z marca 1998. Aplet peňaženky, ktorý použijeme v tomto článku, bol však aktualizovaný, aby odrážal zmeny v rozhraniach API v Java Card 2.1. Zatiaľ čo predchádzajúci článok slúžil ako celkový úvod do technológie Java Card, tento článok sa zameriava na písanie appletov pre Java Card 2.1.

Základy Java Card

Na účely tohto článku sa týmto pojmom

Java karta

označuje čipovú kartu s technológiou Java Card. Technológia Java Card umožňuje vykonávanie appletov napísaných v jazyku Java na čipovej karte. Definuje a

Runtime prostredie Java Card

(JCRE) a poskytuje

triedy a metódy

pomôcť vývojárom vytvárať applety. Applety bežia v rámci JCRE. JCRE a API sú modelované podľa špecifikácie čipovej karty

ISO 7816

.

Keď je karta Java vložená do a zariadenie na prijatie karty (CAD), CAD vyberie applet na karte a odošle mu sériu príkazov na vykonanie. Každý applet je identifikovaný a vybraný podľa svojho identifikátor aplikácie (POMOC). Príkazy ako príkaz na výber sú formátované a prenášané vo forme údajové jednotky aplikačného protokolu (APDU). Applety odpovedajú na každý príkaz APDU znakom a stavové slovo (SW), ktorý označuje výsledok operácie. Applet môže voliteľne odpovedať na príkaz APDU ďalšími údajmi.

Vytvorte applet

Rovnako ako pri vývoji všetkých softvérových aplikácií, skôr ako si sadnete a napíšete applet Java Card, mali by ste najskôr prejsť a fáza návrhu. V tejto fáze definujete architektúru appletu.

Štyri kroky zahŕňajú fázu návrhu appletu:

  1. Zadajte funkcie appletu
  2. Vyžiadajte a priraďte AID k appletu aj k balíku obsahujúcemu triedu appletu
  3. Navrhnite štruktúru triedy appletových programov
  4. Definujte rozhranie medzi appletom a terminálovou aplikáciou

V nasledujúcich častiach použijeme príklad appletu peňaženky na podrobné preskúmanie každého z krokov procesu návrhu appletu.

Špecifikácia funkcií appletu

Náš príkladný applet peňaženky bude ukladať elektronické peniaze a podporovať funkcie kreditu, debetu a šeku.

Aby sa zabránilo neoprávnenému použitiu karty, obsahuje karta bezpečnostný algoritmus. Tento algoritmus vyžaduje, aby používateľ zadal PIN, teda maximálne osemmiestny reťazec. Používateľ karty zadá svoj PIN na klávesnici pripojenej k CAD. Bezpečnostný algoritmus spôsobí uzamknutie karty po troch neúspešných pokusoch o zadanie kódu PIN. PIN sa inicializuje podľa inštalačných parametrov pri inštalácii a vytvorení appletu.

Pred uskutočnením akejkoľvek kreditnej alebo debetnej transakcie je potrebné overiť PIN.

Pre jednoduchosť povedzme, že maximálny zostatok na karte je 2 767 a že žiadna kreditná alebo debetná transakcia nemôže prekročiť 27. Teda premenné jazyka Java typu krátky a bajt môže predstavovať zostatok v peňaženke a sumu každej transakcie.

* Aplikácia peňaženky v reálnom svete by vyžadovala oveľa sofistikovanejší bezpečnostný mechanizmus, ktorý zabráni neoprávnenému prístupu do peňaženky.

Špecifikácia AID

Väčšina aplikácií, ktoré poznáte, je pomenovaná a identifikovaná podľa názvu reťazca. V technológii Java Card je však každý applet identifikovaný a vybraný pomocou AID. Každému balíku Java je tiež priradený AID. Je to tak preto, lebo balík, ktorý je načítaný na karte, je prepojený s inými balíkmi, ktoré už boli na kartu vložené prostredníctvom ich AID. Táto konvencia pomenovania je v súlade so špecifikáciou čipovej karty definovanou v ISO 7816.

AID je sekvencia bajtov s dĺžkou medzi 5 a 16 bajtmi. Jeho formát je uvedený v tabuľke 1.

Identifikátor aplikácie (AID)

Národný registrovaný poskytovateľ aplikácií (RID)

Proprietárne rozšírenie identifikátora aplikácie (PIX)

5 bajtov

0 až 11 bajtov

Tabuľka 1. Formát AID

ISO kontroluje prideľovanie RID spoločnostiam, pričom každá spoločnosť získava od ISO svoj vlastný jedinečný RID. Spoločnosti riadia prideľovanie PIX pre AID.

Triedy Java appletu peňaženky sú definované v balíku Java. Fiktívne AID pre applet peňaženky a balík appletov sú definované tak, ako je to znázornené v tabuľke 2.

POMOC NA BALENIE
LúkaHodnotaDĺžka
RID0xF2, 0x34, 0x12, 0x34, 0x565 bajtov
PIX0x10, 0x00, 0x003 bajty
Applet AID
LúkaHodnotaDĺžka
RID0xF2, 0x34, 0x12, 0x34, 0x565 bajtov
PIX0x10, 0x00, 0x013 bajty
Tabuľka 2. Fiktívne POMOCI pre applet peňaženky a balík appletov

AID balíka a AID appletu majú rovnakú hodnotu RID; ich hodnoty PIX sa líšia na poslednom bite.

Definovanie štruktúry triedy a metód metód appletu

Trieda appletu Java Card musí siahať od javacard.framework.Applet trieda. Táto trieda je nadtriedou pre všetky applety umiestnené na karte Java Card. Definuje bežné metódy, ktoré musí applet podporovať, aby mohli počas svojej životnosti interagovať s JCRE.

V tabuľke 3 sú uvedené verejné a chránené metódy definované v triede javacard.framework.Applet:

Zhrnutie metódy

zrušiť výber ()

Vyvolané JCRE, aby informovalo aktuálne vybraný applet, že bude vybraný iný (alebo rovnaký) applet.
verejne zdieľateľné

getShareableInterfaceObject (AID klient AID, parameter bytu)

Vyvolá ju JCRE na získanie zdieľateľného objektu rozhrania z tohto serverového appletu v mene žiadosti z klientskeho appletu.
verejná statická neplatnosť

install (byte [] bArray, krátky bOffset, byte bLength)

JCRE nazýva túto statickú metódu na vytvorenie inštancie súboru Applet podtrieda.
verejná abstraktná neplatnosť

proces (APDU apdu)

Vyvolané JCRE na spracovanie prichádzajúceho príkazu APDU.

chránená konečná neplatnosť

Registrovať ()

Túto metódu používa applet na registráciu tejto inštancie appletu na JCRE a na priradenie predvoleného AID v súbore CAD inštancii appletu.

chránená konečná neplatnosť

register (bajt [] bArray, krátky bOffset, bajt bLength)

Túto metódu používa applet na registráciu tejto inštancie appletu na JCRE a na priradenie určeného AID v poli bArray na inštanciu appletu.
verejný boolean

vyberte ()

Vyvolané JCRE, aby informovalo tento applet o tom, že bol vybraný.

chránený záverečný boolean

selectionApplet ()

Túto metódu používa applet

proces ()

metóda na rozlíšenie

VYBERTE APDU

príkaz, ktorý vybral tento applet zo všetkých ostatných

VYBERTE APDU

Príkazy APDU, ktoré sa môžu týkať výberu stavu súboru alebo interného appletu.

Tabuľka 3. Verejné a chránené metódy definované v triede javacard.framework.Applet

Trieda javacard.framework.Applet poskytuje rámec pre vykonávanie appletu. Metódy definované v tejto triede volá JCRE, keď JCRE prijíma príkazy APDU z CAD.

Po správnom zavedení kódu appletu na kartu Java Card a jeho prepojení s ostatnými balíkmi na karte začne život appletu, keď sa vytvorí inštancia appletu a zaregistruje sa v tabuľke registrov JCRE. Applet musí implementovať statickú metódu Inštalácia() vytvoriť inštanciu appletu a zaregistrovať inštanciu v JCRE vyvolaním jednej z týchto dvoch možností Registrovať() metódy. The Inštalácia()metóda berie ako parameter bajtové pole. Toto pole obsahuje inštalačné parametre na inicializáciu alebo prispôsobenie inštancie appletu.

Applet na karte Java Card je v neaktívnom štádiu, kým nie je výslovne vybraný. Keď JCRE dostane a VYBERTE Príkaz APDU vyhľadáva vo svojej internej tabuľke applet, ktorého AID sa zhoduje s identifikátorom AID uvedeným v príkaze. Ak sa nájde zhoda, JCRE pripraví nový applet na výber. Tento proces prípravy pozostáva z dvoch krokov: Najprv, ak je prítomný aktuálne vybraný applet, JCRE ho zruší vyvolaním zrušiť výber () metóda. Applet vykonáva akékoľvek upratovacie alebo účtovné práce v zrušiť výber () pred prechodom do neaktívnej fázy. Potom JCRE vyvolá vyberte () spôsob informovania nového appletu, že bol vybraný. Nový applet vykoná potrebnú inicializáciu skôr, ako bude skutočne vybraný. Applet sa vráti pravda do vyberte () metóda je teraz pripravená stať sa aktívnym a spracovať ďalšie príkazy APDU. V opačnom prípade sa applet vráti nepravdivé odmietne svoju účasť, a ak áno, nebude vybraný žiadny applet. The javacard.framework.Applet trieda poskytuje predvolenú implementáciu pre oba vyberte () a zrušiť výber () metódy. Podtrieda Applet trieda môže tieto dve metódy prepísať, aby definovala správanie appletu počas výberu a zrušenia výberu.

Akonáhle je vybraný applet, JCRE preposiela všetky nasledujúce príkazy APDU (vrátane VYBERTE príkaz) na applet proces () metóda. V proces () metódou, applet interpretuje každý príkaz APDU a vykonáva úlohu uvedenú v príkaze. Pre každý príkaz APDU reaguje applet na CAD zaslaním odpovede APDU, ktorá informuje CAD o výsledku spracovania príkazu APDU. The proces () metóda v triede javacard.framework.Applet je abstraktná metóda: podtrieda Applet trieda musí túto metódu prepísať, aby mohla implementovať funkcie appletu.

Tento dialóg príkazov a odpovedí pokračuje, kým nevyberiete nový applet alebo kartu nevyberiete z CAD. Ak zrušíte výber, applet sa stane neaktívnym, až kým ho nevyberiete nabudúce.

The getShareableInterfaceObject metóda je určená na komunikáciu medzi aplikáciami. Je vyvolaná klientským appletom na vyžiadanie zdieľateľného objektu rozhrania z serverového appletu. Predvolená implementácia tejto metódy vráti hodnotu null. Bohužiaľ, podrobná diskusia o zdieľaní objektov a komunikácii medzi aplikáciami by bola nad rámec tohto článku.

Keďže VYBERTE Príkaz APDU sa tiež pošle do proces () metóda, selectionApplet () metódu používajú applety proces () metóda na rozlíšenie VYBERTE Príkaz APDU vyberajúci tento applet zo všetkých ostatných VYBERTE Príkazy APDU, ktoré sa môžu týkať výberu stavu súboru alebo interného appletu.

Definovanie rozhrania medzi appletom a jeho terminálovou aplikáciou

Applet bežiaci na čipovej karte komunikuje s terminálovou aplikáciou na CAD pomocou dátových jednotiek aplikačného protokolu. Rozhranie medzi appletom a jeho terminálovou aplikáciou je v podstate sada príkazov APDU, ktoré sú dohodnuté a podporované appletom aj terminálovou aplikáciou.

Primér APDU

Táto časť poskytuje súhrn príkazov APDU, ktoré vám pomôžu definovať príkazy APDU pre applet peňaženky. (Podrobnosti o protokole APDU sú špecifikované v ISO 7816.)

Príkazy APDU sú vždy sady párov. Každý pár obsahuje a príkaz APDU, ktorý určuje príkaz, a odpoveď APDU, ktorý pošle späť výsledok vykonania príkazu. Vo svete kariet sú inteligentné karty reaktívny komunikátori - to znamená, že nikdy iniciujú komunikáciu, reagujú iba na APDU z vonkajšieho sveta. Terminálová aplikácia pošle príkaz APDU cez CAD. JCRE prijme príkaz a buď vyberie nový applet, alebo predá príkaz aktuálne vybranému appletu. Aktuálne vybraný applet spracuje príkaz a vráti APDU odpovede terminálovej aplikácii. Príkazové APDU a odpoveďové APDU sa vymieňajú striedavo medzi kartou a CAD.

Tabuľka 4 popisuje formáty APDU príkazov a odpovedí.

Velenie APDU

Povinná hlavičkaNepovinné telo
CLAINSP1P2LcDátové poleLe
  • CLA (1 bajt): Trieda inštrukcie --- označuje štruktúru a formát pre kategóriu APDU príkazov a odpovedí
  • INS (1 bajt): Kód inštrukcie: určuje inštrukciu príkazu
  • P1 (1 bajt) a P2 (1 bajt): Parametre inštrukcie - ďalej poskytujú kvalifikáciu inštrukcie
  • Lc (1 bajt): Počet bajtov prítomných v dátovom poli príkazu
  • Dátové pole (bajty rovnajúce sa hodnote Lc): Postupnosť bajtov v dátovom poli príkazu
  • Le (1 bajt): Maximum očakávaných bajtov v dátovom poli odpovede na príkaz

Odpoveď APDU

Nepovinné teloPovinná upútavka
Dátové poleSW1SW2
  • Dátové pole (premenná dĺžka): Postupnosť bajtov prijatých v dátovom poli odpovede
  • SW1 (1 bajt) a SW2 (1 bajt): Stavové slová - označujú stav spracovania na karte
Tabuľka 4. Formáty APDU príkazov a odpovedí

Definovanie príkazov APDU

Applet Java Card by mal podporovať sadu príkazov APDU, ktorá obsahuje a VYBERTE Príkaz APDU a jeden alebo viac procesných príkazov APDU.

  • The VYBERTE príkaz dá JCRE výber appletu na karte.
  • Sada procesných príkazov definuje príkazy, ktoré applet podporuje. Tieto sú definované v súlade s funkciami appletu.

Technológia Java Card špecifikuje kódovanie VYBERTE Príkaz APDU. Vývojári appletov môžu slobodne definovať kódovanie svojich procesných príkazov. Príkazy procesu však musia vyhovovať štruktúre načrtnutej vyššie.

Štrukturálne VYBERTE príkazové a procesné príkazy sú páry APDU príkazov a odpovedí.

Pre každý príkaz APDU by mal applet najskôr dekódovať hodnotu každého poľa v príkaze. Ak sú zahrnuté voliteľné údajové polia, applet by mal určiť aj ich formát a štruktúru. Pomocou týchto definícií applet vie, ako interpretovať každý príkaz a čítať údaje. Potom môže vykonať úlohu určenú príkazom.

$config[zx-auto] not found$config[zx-overlay] not found