Ohjelmointi

Java Card -sovelluksen kirjoittaminen: Kehittäjän opas

Tämä artikkeli opastaa yksinkertaisen sähköisen lompakon sovelman luomisessa ja antaa ohjeita sovelman rakentamiseen ja sen koodin rakentamiseen. Jos tarvitset päivityksen Java Card -tekniikan perusteista, katso maaliskuu 1998 Java-kehittäjä sarake "Understanding Java Card 2.0", joka tarjoaa yleiskuvan älykorteista ja kuvaa järjestelmän arkkitehtuurin, API: t ja Java Card -tekniikan ajonaikaisen ympäristön. Johdonmukaisuuden vuoksi tässä artikkelissa käytetään samaa lompakkosovellusesimerkkiä, jota käytettiin maaliskuun 1998 sarakkeessa. Tässä artikkelissa käytettävä lompakkosovellus on kuitenkin päivitetty vastaamaan Java-kortin 2.1 sovellusliittymien muutoksia. Lisäksi, vaikka edellinen artikkeli toimi yleisenä johdantona Java Card -tekniikkaan, tässä artikkelissa keskitytään Java-sovelluksen 2.1 sovellusten kirjoittamiseen.

Java-kortin perusteet

Tässä artikkelissa termi

Java-kortti

tarkoittaa Java-korttiteknologiaa tukevaa älykorttia. Java Card -tekniikka mahdollistaa Java-kielellä kirjoitettujen sovelmien suorittamisen älykortille. Se määrittelee a

Java-kortin ajonaikainen ympäristö

(JCRE) ja tarjoaa

luokat ja menetelmät

auttaa kehittäjiä luomaan sovelmia. Appletit toimivat JCRE: ssä. JCRE ja sovellusliittymät mallinnetaan älykorttimäärityksen mukaan

ISO 7816

.

Kun Java-kortti asetetaan a kortin hyväksymislaite (CAD), CAD valitsee sovelman kortille ja lähettää sille joukon komentoja suoritettavaksi. Jokainen sovelma tunnistaa ja valitsee sen sovelluksen tunniste (APU). Komennot, kuten valintakomento, alustetaan ja lähetetään muodossa sovellusprotokollan datayksiköt (APDU: t). Appletit vastaavat kuhunkin APDU-komentoon a tilasana (SW), joka ilmaisee toimenpiteen tuloksen. Appletti voi vaihtoehtoisesti vastata APDU-komentoon muilla tiedoilla.

Suunnittele sovelma

Kuten minkä tahansa ohjelmistosovelluksen kehittämisen kohdalla, sinun tulee ensin käydä läpi a suunnitteluvaihe. Tässä vaiheessa määrität sovelman arkkitehtuurin.

Neljä vaihetta käsittää sovelman suunnitteluvaiheen:

  1. Määritä sovelman toiminnot
  2. Pyydä ja määritä AID sekä appletille että paketille, joka sisältää applet-luokan
  3. Suunnittele applettiohjelmien luokkarakenne
  4. Määritä sovelma appletin ja päätelaitteen välillä

Seuraavissa osissa käytämme lompakkosovelluksen esimerkkiä tarkastellaksemme yksityiskohtaisesti kaikkia sovelman suunnitteluprosessin vaiheita.

Määritä sovelman toiminnot

Esimerkkilompakkosovelluksemme tallentaa sähköistä rahaa ja tukee luotto-, veloitus- ja sekkitilitoimintoja.

Kortin luvattoman käytön estämiseksi se sisältää suojausalgoritmin. Tämä algoritmi vaatii käyttäjää syöttämään PIN-koodin, enintään kahdeksan merkkijonon. Kortin käyttäjä kirjoittaa PIN-koodinsa näppäimistöön, joka on kytketty CAD: ään. Suojausalgoritmi saa kortin lukittumaan kolmen epäonnistuneen PIN-koodin syöttämisen jälkeen. PIN-koodi alustetaan asennusparametrien mukaan, kun sovelma asennetaan ja luodaan.

PIN-koodi on vahvistettava, ennen kuin luotto- tai veloitustapahtuma voidaan suorittaa.

Oletetaan yksinkertaisuuden vuoksi, että kortin enimmäissaldo on 2767 ja että mikään luotto- tai veloitustapahtuma ei voi ylittää 27. Näin ollen tyypin Java-muuttujat lyhyt ja tavu voi edustaa lompakon saldoa ja kunkin tapahtuman määrää.

* Todellinen lompakko-sovelma vaatii paljon kehittyneemmän suojausmekanismin luvaton pääsyn estämiseksi lompakkoon.

AID: ien määrittäminen

Suurin osa tutuista sovelluksista on nimetty ja tunnistettu merkkijononimellä. Java Card -tekniikassa jokainen sovelma kuitenkin tunnistetaan ja valitaan AID: n avulla. Jokaiselle Java-paketille annetaan myös AID. Tämä johtuu siitä, että paketti, kun se on ladattu kortille, linkitetään muihin paketteihin, jotka on jo asetettu kortille AID-laitteidensa kautta. Tämä nimeämistapa on standardin ISO 7816 mukaisen älykorttimäärityksen mukainen.

AID on 5 - 16 tavun pituinen tavusarja. Sen muoto on esitetty taulukossa 1.

Sovellustunniste (AID)

Kansallinen rekisteröityjen sovellusten tarjoaja (RID)

Oma sovellustunnisteen laajennus (PIX)

5 tavua

0–11 tavua

Taulukko 1. AID-muoto

ISO valvoo RID-tunnusten jakamista yrityksille, jolloin kukin yritys hankkii oman yksilöllisen RID-tunnuksensa ISO: lta. Yritykset hallinnoivat PIX-tiedostojen määritystä AID-laitteille.

Lompakon sovelman Java-luokat määritellään Java-paketissa. Lompakon pienoisohjelman ja sovelmapaketin kuvitteelliset tuet on määritelty taulukon 2 mukaisesti.

Paketin tuki
AlaArvoPituus
EROON0xF2, 0x34, 0x12, 0x34, 0x565 tavua
PIX0x10, 0x00, 0x003 tavua
Apletin tuki
AlaArvoPituus
EROON0xF2, 0x34, 0x12, 0x34, 0x565 tavua
PIX0x10, 0x00, 0x013 tavua
Taulukko 2. Fiktiiviset tuet lompakon sovelmalle ja sovelmapaketille

Paketti AID: llä ja sovelman AID: llä on sama RID-arvo; niiden PIX-arvot eroavat viimeisessä bitissä.

Apletin luokan rakenteen ja metoditoimintojen määrittäminen

Java Card -sovellusluokan on ulotuttava javacard.framework.Applet luokassa. Tämä luokka on kaikkien Java-kortilla olevien sovelmien superluokka. Se määrittelee yleiset menetelmät, joita appletin on tuettava voidakseen olla vuorovaikutuksessa JCRE: n kanssa sen elinkaaren aikana.

Taulukossa 3 luetellaan luokassa määritellyt julkiset ja suojatut menetelmät javacard.framework.Applet:

Menetelmän yhteenveto

poista valinta ()

JCRE on soittanut ilmoittamaan valitulle sovelmalle, että toinen (tai sama) sovelma valitaan.
julkinen jaettava

getShareableInterfaceObject (AID-asiakkaan AID, tavuparametri)

JCRE on soittanut saadakseen jaettavan käyttöliittymäobjektin tältä palvelinsovellulta asiakassovelluksen pyynnön puolesta.
julkinen staattinen mitätöinti

asenna (tavu [] bArray, lyhyt bOffset, tavu bLength)

JCRE kutsuu tätä staattista menetelmää luomaan Appletti alaluokka.
julkinen abstrakti mitätön

prosessi (APDU apdu)

JCRE on kutsunut käsittelemään saapuvan APDU-komennon.

suojattu lopullinen mitätöinti

rekisteröidy ()

Sovellus käyttää tätä tapaa rekisteröidäkseen tämän sovelman ilmentymän JCRE: hen ja määrittäessään oletus-AID: n CAD-tiedostossa sovelmalle.

suojattu lopullinen mitätöinti

rekisteröi (tavu [] bArray, lyhyt bOffset, tavu bPituus)

Sovellus käyttää tätä tapaa rekisteröidäkseen tämän sovelman ilmentymän JCRE: hen ja määrittääkseen määritetyn AID-taulukon bArray appletti-ilmentymään.
julkinen totuusarvo

valitse ()

JCRE soitti ilmoittamaan tälle sovelmalle, että se on valittu.

suojattu lopullinen looginen luku

valitsemalla Sovellus ()

Appletti käyttää tätä menetelmää

prosessi()

menetelmä erottaa

Valitse APDU

komento, joka valitsi tämän sovelman kaikista muista

Valitse APDU

APDU-komennot, jotka voivat liittyä tiedoston tai sisäisen sovelman tilan valintaan.

Taulukko 3. Julkiset ja suojatut menetelmät, jotka on määritelty luokassa javacard.framework.Applet

Luokka javacard.framework.Applet tarjoaa kehyksen sovelmien suorittamiselle. Tässä luokassa määriteltyjä menetelmiä JCRE kutsuu, kun JCRE vastaanottaa APDU-komentoja CAD: lta.

Kun sovelmakoodi on ladattu oikein Java-kortille ja yhdistetty muihin kortin paketteihin, sovelman elämä alkaa, kun sovelmajoukko luodaan ja rekisteröidään JCRE: n rekisteritaulukkoon. Sovelman on toteutettava staattinen menetelmä Asentaa() luoda appletti-ilmentymä ja rekisteröidä ilmentymä JCRE: ssä kutsumalla yksi kahdesta rekisteröidy () menetelmiä. Asentaa()method ottaa tavutaulukon parametrina. Tämä taulukko sisältää asennusparametrit appletin ilmentymän alustamiseksi tai mukauttamiseksi.

Java-kortin sovelma on passiivisessa vaiheessa, kunnes se on nimenomaisesti valittu. Kun JCRE vastaanottaa a VALITSE APDU-komento etsii sisäisestä taulukosta sovelman, jonka AID vastaa komennossa määritettyä. Jos vastaavuus löytyy, JCRE valmistelee uuden sovelman valittavaksi. Tämä valmisteluprosessi koostuu kahdesta vaiheesta: Ensinnäkin, jos tällä hetkellä valittu sovelma on läsnä, JCRE poistaa sen valinnan käynnistämällä poista valinta () menetelmä. Appletti suorittaa kaikki siivous- tai kirjanpitotyöt poista valinta () ennen kuin se menee passiiviseen vaiheeseen. Sitten JCRE käyttää valitse () tapa ilmoittaa uudelle sovelmalle, että se on valittu. Uusi sovelma suorittaa tarvittavat alustukset, ennen kuin se todella valitaan. Appletti palaa totta että valitse () menetelmä, jos se on nyt valmis aktivoitumaan ja käsittelemään seuraavia APDU-komentoja. Muussa tapauksessa sovelma palaa väärä kieltäytyä osallistumisestaan, ja jos niin, applettia ei valita. javacard.framework.Applet luokka tarjoaa oletustoteutuksen molemmille valitse () ja poista valinta () menetelmiä. Alaluokka Appletti luokka voi ohittaa nämä kaksi tapaa määritellä sovelman käyttäytyminen valinnan ja valinnan poistamisen aikana.

Kun sovelma on valittu, JCRE välittää kaikki seuraavat APDU-komennot (mukaan lukien VALITSE komento) sovelmiin prosessi() menetelmä. vuonna prosessi() menetelmällä appletti tulkitsee jokaisen APDU-komennon ja suorittaa komennolla määritetyn tehtävän. Jokaisen APDU-komennon osalta sovelma vastaa CAD: lle lähettämällä takaisin vastauksen APDU, joka ilmoittaa CAD: lle komennon APDU käsittelyn tuloksen. prosessi() menetelmä luokassa javacard.framework.Applet on abstrakti menetelmä: Appletti luokan täytyy ohittaa tämä menetelmä sovelman toimintojen toteuttamiseksi.

Tämä komento-vastaus-vuoropuhelu jatkuu, kunnes uusi sovelma valitaan tai kortti poistetaan CAD: stä. Kun valinta poistetaan, sovelma muuttuu passiiviseksi seuraavaan valintaan asti.

getShareableInterfaceObject menetelmä on tarkoitettu interapplet-viestintään. Asiakassovellus pyytää sitä jakamaan käyttöliittymäobjektin palvelinsovelluksesta. Tämän menetelmän oletusarvoinen toteutus palauttaa nollan. Valitettavasti yksityiskohtainen keskustelu objektien jakamisesta ja interapplet-viestinnästä olisi tämän artikkelin ulkopuolella.

Koska VALITSE APDU-komento välitetään myös prosessi() menetelmä valitsemalla Sovellus () applettien käyttämä menetelmä prosessi() menetelmä erottaa VALITSE APDU-komento, joka valitsee tämän sovelman kaikista muista VALITSE APDU-komennot, jotka voivat liittyä tiedoston tai sisäisen sovelman tilan valintaan.

Määritetään rajapinta sovelman ja sen päätelaitteen välillä

Älykortissa toimiva sovelma kommunikoi CAD: n päätelaitteen kanssa sovellusprotokollatietoyksiköiden avulla. Pohjimmiltaan sovelman ja sen päätelaitteen välinen rajapinta on joukko APDU-komentoja, joista sekä sovelma että päätelaite sopivat ja tukevat.

APDU-aluke

Tässä osassa on yhteenveto APDU-komennoista, jotta pääset aloittamaan APDU-komentojen määrittelyn lompakon sovelmalle. (APDU-protokollan yksityiskohdat on määritelty standardissa ISO 7816.)

APDU-komennot ovat aina parisarjoja. Jokainen pari sisältää a komento APDU, joka määrittää komennon ja a vaste APDU, joka lähettää takaisin komennon suoritustuloksen. Korttimaailmassa älykortit ovat reaktiivinen kommunikaattorit - toisin sanoen he eivät koskaan aloita viestintää, he vastaavat vain ulkomaailman APDU: ille. Päätösovellus lähettää komennon APDU CAD: n kautta. JCRE vastaanottaa komennon ja joko valitsee uuden sovelman tai välittää komennon valitulle sovelmalle. Tällä hetkellä valittu sovelma käsittelee komennon ja palauttaa vastauksen APDU päätelaitteelle. Komento- ja vastaus-APDU: t vaihdetaan vuorotellen kortin ja CAD: n välillä.

Taulukko 4 kuvaa komentojen ja vastausten APDU-muodot.

Komento APDU

Pakollinen otsikkoValinnainen runko
CLAINSP1P2LcTietokenttäLe
  • CLA (1 tavu): Käskyluokka --- ilmaisee komento- ja vastaus-APDU-luokkien rakenteen ja muodon
  • INS (1 tavu): Käskykoodi: määrittää komennon käskyn
  • P1 (1 tavu) ja P2 (1 tavu): Ohjeparametrit - antavat edelleen pätevyyden opetukselle
  • Lc (1 tavu): Komennon tietokentässä olevien tavujen määrä
  • Datakenttä (tavuja, jotka ovat yhtä suuret kuin Lc): Tavujen sarja komennon tietokentässä
  • Le (1 tavu): Komennon vastauksen tietokentässä odotettavissa oleva tavujen enimmäismäärä

Vastaus APDU

Valinnainen runkoPakollinen perävaunu
TietokenttäSW1SW2
  • Datakenttä (vaihteleva pituus): Tavujen sarja, joka on vastaanotettu vastauksen tietokenttään
  • SW1 (1 tavu) ja SW2 (1 tavu): Tilasanat - tarkoittavat kortin käsittelytilaa
Taulukko 4. Komento- ja vaste-APDU-muodot

APDU-komentojen määrittäminen

Java-korttisovelman tulisi tukea APDU-komentoja, jotka käsittävät a VALITSE APDU-komento ja yksi tai useampi prosessin APDU-komento.

  • VALITSE -komento kehottaa JCRE: tä valitsemaan sovelman kortilta.
  • Prosessikomennot määrittävät komennot, joita appletti tukee. Ne määritetään sovelman toimintojen mukaisesti.

Java-korttitekniikka määrittelee VALITSE APDU-komento. Applet-kehittäjät voivat vapaasti määrittää prosessikomentojensa koodauksen. Prosessikomentojen on kuitenkin oltava yllä esitetyn rakenteen mukaisia.

Rakenteellisesti VALITSE komento- ja prosessikomennot ovat komento- ja vastaus-APDU-pareja.

Jokaisen APDU-komennon osalta sovelman tulisi ensin purkaa komennon kunkin kentän arvo. Jos valinnaiset tietokentät sisältyvät, sovelman tulisi myös määrittää niiden muoto ja rakenne. Näiden määritelmien avulla sovelma osaa tulkita jokaisen komennon ja lukea tiedot. Sitten se voi suorittaa komennolla määritetyn tehtävän.

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