Programiranje

Kako napisati programček Java Card: Vodnik za razvijalce

Ta članek vas popelje skozi postopek ustvarjanja preprostega programčka za elektronsko denarnico in ponuja navodila za izdelavo in izdelavo njegove kode. Če potrebujete osvežitev o osnovah tehnologije Java Card, si oglejte marec 1998 Razvijalec Java stolpec "Razumevanje Java Card 2.0", ki ponuja pregled pametnih kartic in opisuje sistemsko arhitekturo, API-je in izvajalno okolje tehnologije Java Card. Zaradi doslednosti ta članek uporablja isti primer programčka denarnice, kot je bil uporabljen v stolpcu marca 1998. Vendar je bil programček denarnice, ki ga bomo uporabili v tem članku, posodobljen, da odraža spremembe API-jev v Java Card 2.1. Poleg tega je prejšnji članek služil kot splošen uvod v tehnologijo Java Card, vendar se osredotoča na pisanje apletov za Java Card 2.1.

Osnove Java Card

Za namen tega članka izraz

Java Card

označuje pametno kartico s tehnologijo Java Card. Tehnologija Java Card omogoča izvajanje pametnih kartic, napisanih v jeziku Java. Določa a

Izvajalno okolje Java Card

(JCRE) in zagotavlja

razredi in metode

za pomoč razvijalcem pri ustvarjanju apletov. Apleti delujejo znotraj JCRE. JCRE in API-ji so oblikovani po specifikaciji pametne kartice

ISO 7816

.

Ko je kartica Java vstavljena v naprava za sprejem kartice (CAD), CAD izbere programček na kartici in ji pošlje vrsto ukazov za izvedbo. Vsak programček je identificiran in izbran s svojim identifikator aplikacije (POMOČ). Ukazi, kot je ukaz za izbiro, so formatirani in posredovani v obliki podatkovne enote protokola aplikacije (APDU). Apleti na vsak ukaz APDU odgovorijo z statusna beseda (SW), ki označuje rezultat operacije. Applet lahko po želji odgovori na ukaz APDU z drugimi podatki.

Arhitekt aplet

Kot pri vsakem razvoju programske aplikacije, preden sedite in napišete programček Java Card, morate najprej opraviti faza oblikovanja. V tej fazi definirate arhitekturo programčka.

Štirje koraki obsegajo fazo oblikovanja apletov:

  1. Določite funkcije programčka
  2. Zahtevajte in dodelite AID za programček in paket, ki vsebuje razred programčka
  3. Oblikujte strukturo razredov programov programčkov
  4. Določite vmesnik med programčkom in terminalsko aplikacijo

V naslednjih razdelkih bomo na primeru programčka denarnice podrobno preučili vsak od korakov v postopku oblikovanja programčka.

Določanje funkcij programčka

Naš primerni programček denarnice bo shranil elektronski denar in podpiral funkcije kredita, obremenitve in preverjanja stanja.

Za preprečevanje nepooblaščene uporabe kartice vsebuje varnostni algoritem. Ta algoritem zahteva, da uporabnik vnese PIN, največ osemmestni niz. Uporabnik kartice vtipka svojo kodo PIN na tipkovnico, priključeno na CAD. Varnostni algoritem povzroči, da se kartica zaklene po treh neuspešnih poskusih vnosa kode PIN. PIN se inicializira glede na namestitvene parametre, ko je programček nameščen in ustvarjen.

PIN je treba preveriti, preden je mogoče izvršiti katero koli kreditno ali bremensko transakcijo.

Za poenostavitev recimo, da je maksimalno stanje na kartici 2.767 in da nobena kreditna ali debetna transakcija ne sme presegati 27. Tako spremenljivke Java vrste kratek in bajt lahko predstavlja stanje denarnice in znesek posamezne transakcije.

* Dejanski programček za denarnico bi zahteval veliko bolj dovršen varnostni mehanizem, da bi preprečil nepooblaščen dostop do denarnice.

Določanje AID

Večina aplikacij, ki jih poznate, je poimenovana in označena z imenom niza. V tehnologiji Java Card pa je vsak programček identificiran in izbran s pomočjo AID. Prav tako je vsakemu paketu Java dodeljen AID. Razlog za to je, da je paket, ko je naložen na kartico, povezan z drugimi paketi, ki so bili že nameščeni na kartico prek njihovih AID-jev. Ta dogovor o poimenovanju je v skladu s specifikacijo pametne kartice, kot je opredeljena v ISO 7816.

AID je zaporedje bajtov med 5 in 16 bajti. Njegova oblika je prikazana v tabeli 1.

Identifikator aplikacije (AID)

Nacionalni registrirani ponudnik aplikacij (RID)

Lastniška razširitev identifikatorja aplikacije (PIX)

5 bajtov

0 do 11 bajtov

Tabela 1. Oblika AID

ISO nadzoruje dodeljevanje RID-jev podjetjem, pri čemer vsako podjetje od ISO-ja pridobi svoj edinstveni RID. Podjetja upravljajo dodelitev PIX-ov za AID.

Razredi Java v aplikaciji denarnice so določeni v paketu Java. Izmišljeni AID-ji za programček denarnice in paket aplikacij so opredeljeni, kot je prikazano v tabeli 2.

Pomoč za paket
PoljeVrednostDolžina
RID0xF2, 0x34, 0x12, 0x34, 0x565 bajtov
PIX0x10, 0x00, 0x003 bajti
Aplet AID
PoljeVrednostDolžina
RID0xF2, 0x34, 0x12, 0x34, 0x565 bajtov
PIX0x10, 0x00, 0x013 bajti
Tabela 2. Izmišljena pomoč za programček denarnice in paket aplikacij

Paket AID in programček AID imata enako vrednost RID; njihove vrednosti PIX se razlikujejo ob zadnjem bitu.

Določitev strukture razreda in funkcij funkcije programa

Razred programčka Java Card mora segati od javacard.framework.Applet razred. Ta razred je superrazred za vse programčke, ki prebivajo na javanski kartici. Opredeljuje pogoste metode, ki jih mora podpirati programček, da lahko med življenjem komunicira z JCRE.

V tabeli 3 so navedene javne in zaščitene metode, opredeljene v razredu javacard.framework.Applet:

Povzetek metode

prekliči izbiro ()

Pokliče JCRE, da obvesti trenutno izbrani programček, da bo izbran drug (ali isti) programček.
javno delljivo

getShareableInterfaceObject (AID odjemalca AID, bajtni parameter)

JCRE ga pokliče, da iz tega strežniškega programčka v imenu zahteve odjemalskega programčka pridobi deljiv vmesniški objekt.
javna statična praznina

namestitev (bajt [] bArray, kratek bOffset, bajt bLength)

JCRE pokliče to statično metodo, da ustvari primerek datoteke Applet podrazred.
javna abstraktna praznina

proces (APDU apdu)

Pokliče JCRE za obdelavo dohodnega ukaza APDU.

zaščitena končna praznina

register ()

Applet to metodo uporablja za registracijo tega primerka programčka z JCRE in primerku apleta dodeli privzeti AID v datoteki CAD.

zaščitena končna praznina

register (bajt [] bArray, kratek bOffset, bajt bLength)

Applet to metodo uporablja za registracijo tega primerka programčka z JCRE in za dodelitev določenega AID v matriki bArray na primerek programčka.
javna logična vrednost

izberite ()

Pokliče JCRE, da obvesti ta programček, da je izbran.

zaščitena končna logična vrednost

selectingApplet ()

To metodo uporablja programček

postopek ()

metoda za razlikovanje

IZBERITE APDU

ukaz, ki je izbral ta programček med vsemi ostalimi

IZBERITE APDU

Ukazi APDU, ki se lahko nanašajo na izbiro stanja datoteke ali notranjega programa.

Tabela 3. Javne in zaščitene metode, opredeljene v razredu javacard.framework.Applet

Razred javacard.framework.Applet zagotavlja okvir za izvajanje apletov. Metode, opredeljene v tem razredu, pokliče JCRE, ko JCRE prejme ukaze APDU iz CAD.

Ko je koda programčka pravilno naložena na javansko kartico in povezana z drugimi paketi na kartici, se življenje programčka začne, ko je primerek programčka ustvarjen in registriran v registrski tabeli JCRE. Applet mora izvajati statično metodo namestite () da ustvarite primerek programčka in ga registrirate v JCRE tako, da prikličete enega od obeh register () metode. The namestite ()metoda za parameter vzame bajtno matriko. Ta matrika vsebuje namestitvene parametre za inicializacijo ali personalizacijo primerka programčka.

Applet na kartici Java je v neaktivni fazi, dokler ni izrecno izbran. Ko JCRE prejme a IZBERI Ukaz APDU poišče v notranji tabeli programček, katerega AID se ujema z ukazom, določenim v ukazu. Če najdete ujemanje, JCRE pripravi nov programček, ki bo izbran. Ta postopek priprave je sestavljen iz dveh korakov: Prvič, če je prisoten trenutno izbrani programček, JCRE prekliče izbiro, tako da prikliče prekliči izbiro () metoda. Applet izvaja vsa čistilna ali knjigovodska dela v prekliči izbiro () metoda, preden preide v neaktivno fazo. Nato JCRE prikliče izberite () metoda za obveščanje novega programčka, da je izbran. Novi programček izvede potrebno inicializacijo, preden dejansko postane izbran. Applet se vrne prav do izberite () metoda, če je zdaj pripravljen za aktiviranje in obdelavo naslednjih ukazov APDU. V nasprotnem primeru se programček vrne napačno da zavrne sodelovanje in v tem primeru ne bo izbran noben programček. The javacard.framework.Applet razred ponuja privzeto izvedbo za izberite () in prekliči izbiro () metode. Podrazred Applet class lahko preglasi ti dve metodi, da definira vedenje programčka med izbiro in preklicem izbire.

Ko je izbran programček, JCRE posreduje vse nadaljnje ukaze APDU (vključno z IZBERI ukaz) na programček postopek () metoda. V postopek () , program razlaga vsak ukaz APDU in izvede nalogo, določeno z ukazom. Za vsak ukaz APDU se programček odzove na CAD tako, da pošlje nazaj odziv APDU, ki CAD obvesti o rezultatu obdelave ukaza APDU. The postopek () metoda pri pouku javacard.framework.Applet je abstraktna metoda: podrazred Applet class mora preglasiti to metodo za izvajanje funkcij programčka.

Ta dialog z ukazi in odzivi se nadaljuje, dokler ni izbran nov programček ali kartica odstranjena iz CAD-a. Ko je programček preklican, postane neaktiven do naslednjega izbiranja.

The getShareableInterfaceObject metoda je namenjena interaktivni interakciji. Odjemalski programček ga prikliče, da od strežniškega programčka zahteva deljivi vmesniški objekt. Privzeta izvedba te metode vrne nič. Na žalost podrobna razprava o skupni rabi predmetov in interaktivni komunikaciji ne bi bila v obsegu tega članka.

Ker je IZBERI Ukaz APDU se posreduje tudi na postopek () metoda, selectingApplet () metodo uporabljajo apleti postopek () metoda za razlikovanje IZBERI Ukaz APDU, ki izbere ta programček med vsemi ostalimi IZBERI Ukazi APDU, ki se lahko nanašajo na izbiro stanja datoteke ali notranjega programa.

Določitev vmesnika med programčkom in njegovo terminalsko aplikacijo

Applet, ki se izvaja na pametni kartici, komunicira s terminalsko aplikacijo na CAD z uporabo podatkovnih enot protokola aplikacije. V bistvu je vmesnik med programčkom in njegovo terminalsko aplikacijo nabor ukazov APDU, za katere so dogovorjeni in jih podpirata tako programček kot tudi terminalska aplikacija.

Primer APDU

Ta razdelek vsebuje povzetek ukazov APDU, s katerimi boste lažje začeli definirati ukaze APDU za programček denarnice. (Podrobnosti protokola APDU so določene v ISO 7816.)

Ukazi APDU so vedno nabori parov. Vsak par vsebuje ukaz APDU, ki določa ukaz in odziv APDU, ki vrne rezultat izvrševanja ukaza. V svetu kartic pametne kartice obstajajo reaktivni komunikatorji - to pomeni, da nikoli ne sprožijo komunikacije, ampak se odzivajo samo na APDU-je iz zunanjega sveta. Terminalna aplikacija pošlje ukaz APDU prek CAD. JCRE prejme ukaz in izbere nov programček ali posreduje ukaz trenutno izbranemu programčku. Trenutno izbrani programček obdela ukaz in vrne odzivni APDU terminalski aplikaciji. Ukazni APDU in odzivni APDU se izmenjujejo med kartico in CAD.

Tabela 4 opisuje formate APDU za ukaze in odzive.

Ukaz APDU

Obvezna glavaNeobvezno telo
CLAINSP1P2LcPodatkovno poljeLe
  • CLA (1 bajt): Razred navodil --- označuje strukturo in format kategorije ukaznih in odzivnih APDU-jev
  • INS (1 bajt): Koda navodila: določa navodila ukaza
  • P1 (1 bajt) in P2 (1 bajt): Parametri navodil - nadalje zagotavljajo kvalifikacije za navodilo
  • Lc (1 bajt): Število bajtov v podatkovnem polju ukaza
  • Podatkovno polje (bajti enaki vrednosti Lc): zaporedje bajtov v podatkovnem polju ukaza
  • Le (1 bajt): Največ bajtov, pričakovanih v podatkovnem polju odziva na ukaz

Odziv APDU

Neobvezno teloObvezna prikolica
Podatkovno poljeSW1SW2
  • Podatkovno polje (spremenljiva dolžina): zaporedje bajtov, prejetih v podatkovnem polju odziva
  • SW1 (1 bajt) in SW2 (1 bajt): Statusni besedi - označujeta stanje obdelave na kartici
Tabela 4. Formati APDU za ukaze in odzive

Določanje ukazov APDU

Applet Java Card bi moral podpirati nabor ukazov APDU, ki vsebuje IZBERI Ukaz APDU in en ali več procesnih ukazov APDU.

  • The IZBERI ukaz JCRE naroči, da izbere programček na kartici.
  • Nabor procesnih ukazov določa ukaze, ki jih podpira programček. Ti so definirani v skladu s funkcijami programa.

Tehnologija Java Card določa kodiranje IZBERI Ukaz APDU. Razvijalci programov lahko prosto določijo kodiranje svojih procesnih ukazov. Ukazi procesa pa morajo biti v skladu z zgoraj opisano strukturo.

Strukturno je IZBERI ukazi ukaza in procesa so pari APDU-jev za ukaze in odzive.

Za vsak ukaz APDU mora programček najprej dekodirati vrednost vsakega polja v ukazu. Če so vključena neobvezna podatkovna polja, mora programček določiti tudi njihov format in strukturo. Z uporabo teh definicij programček zna razlagati vsak ukaz in brati podatke. Nato lahko izvrši nalogo, določeno z ukazom.

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