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:
- Määritä sovelman toiminnot
- Pyydä ja määritä AID sekä appletille että paketille, joka sisältää applet-luokan
- Suunnittele applettiohjelmien luokkarakenne
- 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 |
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 | ||
Ala | Arvo | Pituus |
EROON | 0xF2, 0x34, 0x12, 0x34, 0x56 | 5 tavua |
PIX | 0x10, 0x00, 0x00 | 3 tavua |
Apletin tuki | ||
Ala | Arvo | Pituus |
EROON | 0xF2, 0x34, 0x12, 0x34, 0x56 | 5 tavua |
PIX | 0x10, 0x00, 0x01 | 3 tavua |
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 | |
| JCRE on soittanut ilmoittamaan valitulle sovelmalle, että toinen (tai sama) sovelma valitaan. |
julkinen jaettava | JCRE on soittanut saadakseen jaettavan käyttöliittymäobjektin tältä palvelinsovellulta asiakassovelluksen pyynnön puolesta. |
julkinen staattinen mitätöinti | JCRE kutsuu tätä staattista menetelmää luomaan Appletti alaluokka. |
julkinen abstrakti mitätön |
JCRE on kutsunut käsittelemään saapuvan APDU-komennon. |
suojattu lopullinen mitätöinti |
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 | 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 |
JCRE soitti ilmoittamaan tälle sovelmalle, että se on valittu. |
suojattu lopullinen looginen luku |
Appletti käyttää tätä menetelmää
menetelmä erottaa
komento, joka valitsi tämän sovelman kaikista muista
APDU-komennot, jotka voivat liittyä tiedoston tai sisäisen sovelman tilan valintaan. |
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 otsikko | Valinnainen runko | |||||
CLA | INS | P1 | P2 | Lc | Tietokenttä | Le |
| ||||||
Vastaus APDU | ||||||
Valinnainen runko | Pakollinen perävaunu | |||||
Tietokenttä | SW1 | SW2 | ||||
|
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.