Ohjelmointi

Java Card 2.0: n ymmärtäminen

Tämä artikkeli alkaa yleiskatsauksella älykorteista ja lyhyellä katsauksella älykorttistandardiin ISO 7816. Ottaen huomioon edellisen älykorttien taustan Java-kehittäjä sarakkeissa, tämä erä alkaa vastauksella kysymykseen "Mikä on Java-kortti?" ja yleiskatsaus Java-korttijärjestelmän arkkitehtuurista. Seuraavaksi keskitymme moniin Java-korttiin liittyviin kysymyksiin, mukaan lukien Java-kortin elinkaari; Java Card 2.0 -kielialaryhmä ja API-kirjastoluokat; ja Java-kortin suojaus. Sitten keskustelemme Java-kortin ajonaikaisesta ympäristöstä ja näytämme kuinka Java-kortti toimii. Lopetamme valaisevan esimerkin: Sähköinen lompakkosovellus, joka on kirjoitettu vain Java-kortille.

Tästä eteenpäin kaikki viittaukset Java-korttiin viittaavat implisiittisesti Java Card 2.0: een.

Mikä on älykortti?

Luottokortin koon mukainen älykortti tallentaa ja käsittelee tietoja rungon muoviseen alustaan ​​piiin upotettujen elektronisten piirien kautta. Älykortteja on kahta perustyyppiä: An älykäs älykortti sisältää mikroprosessorin ja tarjoaa luku-, kirjoitus- ja laskutoiminnon, kuten pieni mikrotietokone. A muistikortti, toisaalta, ei ole mikroprosessoria ja se on tarkoitettu vain tietojen tallentamiseen. Muistikortti käyttää suojauslogiikkaa ohjaamaan muistin käyttöä.

Kaikki älykortit sisältävät kolmen tyyppistä muistia: pysyvä, muutettavissa oleva muisti; pysyvä muuttuva muisti; ja pysyvä muunneltava muisti. ROM, EEPROM ja RAM ovat eniten käytetty muisti kolmelle vastaavalle tyypille nykyisissä älykorteissa. Pysyvää muistia kutsutaan myös pysyväksi muistiksi. Käytämme termejä jatkuva ja haihtumaton tässä artikkelissa.

Kansainvälisen standardointijärjestön määrittelemä ISO 7816 -standardin osa 1-7 sisältää joukon standardeja, jotka kattavat älykorttien eri näkökohdat. ISO 7816 koostuu:

  • Fyysiset ominaisuudet (osa 1)

  • Koskettimien mitat ja sijainti (osa 2)

  • Elektroniset signaalit ja lähetysprotokollat ​​(osa 3)

  • Toimialojen väliset vaihdon komennot (osa 4)

  • Sovellustunnisteet (osa 5)

  • Toimialakohtaiset tietoelementit (osa 6)

  • Toimialojen väliset komennot SCQL: lle (osa 7)

Seuraava kaavio kuvaa älykortin fyysisiä ominaisuuksia, jotka on määritelty ISO 7816: n osassa 1.

Lisätietoja ISO 7816- ja älykorteista on kohdassa "Älykortit: aluke".

Tavallisesti älykortti ei sisällä virtalähdettä, näyttöä tai näppäimistöä. Se on vuorovaikutuksessa ulkomaailman kanssa käyttämällä sarjaliikenneliitäntää kahdeksan yhteyspisteen kautta. Koskettimien mitat ja sijainti on käsitelty ISO 7816: n osassa 2. Tämä kaavio näyttää älykortin kontaktit.

Älykortti asetetaan kortin hyväksyntälaitteeseen (Card Acceptance Device, CAD), joka voi muodostaa yhteyden toiseen tietokoneeseen. Muita kortin hyväksymislaitteessa käytettyjä termejä ovat terminaali, lukijaja IFD (liitäntälaite). Ne kaikki tarjoavat samat perustoiminnot, nimittäin kortin virran saannin ja tiedonsiirtoyhteyden muodostamisen.

Kun kaksi tietokonetta ovat yhteydessä toisiinsa, he vaihtavat datapaketteja, jotka on rakennettu protokollien joukon mukaan. Vastaavasti älykortit puhuvat ulkomaailmalle käyttämällä omia tietopakettejaan, joita kutsutaan APDU (Sovellusprotokollan tietoyksiköt). APDU sisältää joko komennon tai vastausviestin. Korttimaailmassa käytetään isäntä-orja-mallia, jolloin älykortilla on aina passiivinen rooli. Toisin sanoen älykortti odottaa aina komentoa APDU päätelaitteelta. Sitten se suorittaa APDU: ssa määritellyn toiminnan ja vastaa päätelaitteelle vastauksen APDU: lla. Komento-APDU: t ja vastaus-APDU: t vaihdetaan vaihtoehtoisesti kortin ja päätelaitteen välillä.

Seuraavat taulukot havainnollistavat vastaavasti komentojen ja vastausten APDU-muotoja. APDU-rakenne on kuvattu standardin ISO 7816 osassa 4.

Komento APDU
Pakollinen otsikkoEhdollinen elin
CLAINSP1P2LcTietokenttäLe

Otsikko koodaa valitun komennon. Se koostuu neljästä kentästä: luokka (CLA), käsky (INS) ja parametrit 1 ja 2 (P1 ja P2). Jokainen kenttä sisältää yhden tavun:

  • CLA: luokan tavu. Monissa älykorteissa tätä tavua käytetään sovelluksen tunnistamiseen.

  • INS: Ohitustavu. Tämä tavu ilmaisee käskykoodin.

  • P1-P2: Parametritavut. Nämä antavat APDU-komennolle lisäkelpoisuuden.

Lc merkitsee tavujen määrää komennon APDU tietokentässä; Le tarkoittaa enimmäistavua tavuja, joita odotetaan seuraavan vasteen APDU: n tietokentässä.

Vastaus APDU
Ehdollinen elinPakollinen perävaunu
TietokenttäSW1SW2

Tilatavut SW1 ja SW2 tarkoittavat APDU-komennon käsittelytilaa kortissa.

Mikä on Java-kortti?

Java-kortti on älykortti, joka pystyy suorittamaan Java-ohjelmia. Java Card 2.0 -määritys julkaistiin osoitteessa //www.javasoft.com/javacard. Se sisältää yksityiskohtaista tietoa Java-kortin virtuaalikoneen ja sovellusohjelmointirajapinnan (API) rakentamisesta älykorteille. Järjestelmän vähimmäisvaatimus on 16 kilotavua vain luku -muistia (ROM), 8 kilotavua EEPROM-muistia ja 256 tavua RAM-muistia.

Java-kortin järjestelmäarkkitehtuuri on esitetty seuraavassa kuvassa.

Kuten kuvasta näkyy, Java Card VM on rakennettu tietyn integroidun piirin (IC) ja natiivin käyttöjärjestelmän toteutuksen päälle. JVM-kerros piilottaa valmistajan omistaman tekniikan yhteisellä kieli- ja järjestelmäliittymällä. Java-korttikehys määrittelee joukon sovellusohjelmointirajapintoja (API) luokkiin Java-korttisovellusten kehittämiseksi ja järjestelmipalvelujen tarjoamiseksi kyseisille sovelluksille. Tietty ala tai yritys voi toimittaa lisäkirjastoja palvelun tarjoamiseksi tai tietoturva- ja järjestelmämallin tarkentamiseksi. Java Card -sovelluksia kutsutaan sovelmia. Yhdellä kortilla voi olla useita sovelmia. Jokainen sovelma tunnistetaan yksilöllisesti sen perusteella APU (sovelluksen tunniste), sellaisena kuin se määritellään ISO 7816: n osassa 5.

Tärkeä mielessä pidettävä asia on älykortit eivät ole: Ne eivät ole henkilökohtaisia ​​tietokoneita. Niillä on rajalliset muistiresurssit ja laskentateho. Käyttäjien ei pitäisi ajatella Java Card 2.0: ta yksinkertaisesti JDK: n poistetuksi versioksi.

Java-kortin käyttöikä

Java-kortin käyttöikä alkaa, kun natiivi käyttöjärjestelmä, Java-kortin virtuaalikone, API-luokkakirjastot ja valinnaisesti appletit poltetaan ROM-levylle. Tätä prosessia, jolla pysyvät komponentit kirjoitetaan sirun ei-muuttuvaan muistiin saapuvien komentojen suorittamiseksi, kutsutaan naamiointi.

Ennen kuin Java-kortti laskeutuu lompakkoon, se on alustettava ja mukautettava. Alustus tarkoittaa yleisten tietojen lataamista kortin haihtumattomaan muistiin. Nämä tiedot ovat identtisiä useissa korteissa eivätkä ole yksilöllisiä; esimerkki voi olla liikkeeseenlaskijan tai valmistuksen nimi.

Seuraava vaihe, personointi, sisältää kortin määrittämisen henkilölle. Se voi tapahtua fyysisen personoinnin tai sähköisen personoinnin avulla. Fyysinen personointi tarkoittaa nimesi ja korttisi kohokuviointia tai laserkaiverrusta kortin muovipinnalle. Sähköinen personointi tarkoittaa henkilötietojen, esimerkiksi henkilökohtaisen avaimen, nimen ja PIN-numeron, lataamista kortin haihtumattomaan muistiin.

Alustus ja mukauttaminen vaihtelevat toimittajittain ja liikkeeseenlaskijoina. Molemmissa EEPROMia (eräänlainen haihtumaton muisti) käytetään usein tietojen tallentamiseen.

Tässä vaiheessa Java-kortti on käyttövalmis. Voit hankkia Java-kortin liikkeeseenlaskijalta tai ostaa sen jälleenmyyjältä. Jälleenmyyjän myymät kortit ovat yleiskäyttöisiä, jolloin räätälöinti jätetään usein pois.

Nyt voit lisätä Java-kortin lukijaan ja lähettää APDU-komentoja kortilla oleville sovelmille tai ladata lisää sovelmia tai tietoja kortille.

Java-kortti pysyy aktiivisena, kunnes se on vanhentunut tai estetty korjaamattoman virheen vuoksi.

Java-kortin virtuaalikoneen käyttöikä

Toisin kuin tietokoneen tai työaseman Java-virtuaalikone (JVM), Java-kortin virtuaalikone toimii ikuisesti.

Suurin osa kortille tallennetuista tiedoista on säilytettävä, vaikka virta katkaistaan ​​- toisin sanoen kun kortti poistetaan lukijasta. Java-kortin virtuaalikone luo objektit EEPROM-tiedostoon pysyvien tietojen säilyttämiseksi. Java-kortin virtuaalikoneen suoritusaika on kortin käyttöikä. Kun virtaa ei toimiteta, virtuaalikone toimii äärettömällä kellojaksolla.

Java-kortin sovelmien ja objektien käyttöikä

Sovelman elämä alkaa, kun se on asennettu oikein ja rekisteröity järjestelmän rekisteritaulukkoon, ja päättyy, kun se poistetaan taulukosta. Poistetun sovelman tilaa voidaan käyttää uudelleen tai ei, riippuen siitä, onko roskien keräys toteutettu kortilla. Kortin sovelma on passiivisessa vaiheessa, kunnes pääte valitsee sen nimenomaisesti.

Objektit luodaan pysyvään muistiin (esimerkiksi EEPROM). Ne voivat kadota tai kerätä roskia, jos muut pysyvät esineet eivät viittaa niihin. EEPROM-muistiin kirjoittaminen on kuitenkin tuhat kertaa hitaampaa.

Joitakin objekteja käytetään usein, eikä niiden kenttien sisällön tarvitse olla pysyviä. Java-kortti tukee ohimenevä (väliaikaiset) objektit RAM-muistissa. Kun kohde on julistettu ohimeneväksi, sen sisältöä ei voida siirtää takaisin pysyvään muistiin.

Java Card 2.0 -kielijoukko

Java-korttiohjelmat on tietysti kirjoitettu Java-kielellä. Ne on koottu käyttämällä yleisiä Java-kääntäjiä. Rajoitettujen muistiresurssien ja laskentatehon vuoksi kaikkia Java-kielimäärityksissä määriteltyjä kieliominaisuuksia ei tueta Java-kortilla. Java-kortti ei tue erityisesti:

  • Dynaaminen luokan lataus

  • Turvallisuuspäällikkö

  • Viestiketjut ja synkronointi

  • Kohteen kloonaus

  • Viimeistely

  • Suuret primitiiviset tietotyypit (float, double, long ja char)

Ei ole mikään yllätys, että näitä ominaisuuksia tukevat avainsanat jätetään pois myös kielestä. VM-toteuttajat voivat päättää tukea 32-bittistä kokonaislukutyyppiä tai alkuperäisiä menetelmiä julkaisun jälkeisille sovelmille, jos he työskentelevät edistyneemmällä älykortilla, jossa on enemmän muistia. Myöntämisen jälkeiset sovelmat ovat niitä sovelmia, jotka asennetaan Java-kortille sen jälkeen, kun kortti on annettu kortinhaltijalle.

Java Card 2.0 -kehys

Älykortit ovat olleet markkinoilla 20 vuotta, ja suurin osa niistä on yleensä yhteensopiva ISO 7816: n osien 1-7 ja / tai EMV: n kanssa. Olemme jo tarkastelleet ISO 7816 -standardia. Mikä on EMV? Europayn, MasterCardin ja Visan määrittelemä EMV-standardi perustuu ISO 7816 -sarjastandardeihin, joilla on omia lisäominaisuuksia vastaamaan finanssialan erityistarpeita. Java Card Framework on suunniteltu tukemaan älykorttijärjestelmiä ja -sovelluksia helposti. Se piilottaa älykorttiinfrastruktuurin yksityiskohdat ja tarjoaa Java Card -sovelluskehittäjille suhteellisen helpon ja suoraviivan ohjelmointirajapinnan.

Java Card -kehys sisältää neljä pakettia:

Paketin nimiKuvaus
javacard.frameworkTämä on kortin ydinpaketti. Se määrittelee luokat kuten ja , jotka ovat Java Card -ohjelmien ja , ja , jotka tarjoavat ajo- ja järjestelmäpalveluja Java-korttiohjelmille, kuten APDU-käsittely ja objektien jakaminen
javacardx.framework Tämä paketti tarjoaa olio-suunnitelman ISO 7816-4 -yhteensopivalle tiedostojärjestelmälle. Se tukee alkeistiedostoja (EF), omistettuja tiedostoja (DF) ja tiedostokeskeisiä APDU: ita standardin ISO7816 mukaisesti
javacardx.crypto ja javacardx.cryptoEnc Nämä kaksi pakettia tukevat älykorttien edellyttämää salaustoimintoa

Noudattaa Java-nimeämiskäytäntöä, Java Cardx paketit ovat Java Card -kehyksen laajennuksia. Ei tarvitse, että tuet heitä kortilla.

Java-kortin suojaus

Java-sovelmiin sovelletaan Java-suojausrajoituksia, mutta Java-korttijärjestelmien suojausmalli eroaa tavallisesta Javasta monin tavoin.

Java-kortti ei tue Security Manager -luokkaa. Kieliturvakäytännöt toteuttaa virtuaalikone.

Java-sovelmat luovat objekteja, jotka tallentavat ja käsittelevät tietoja. Objektin omistaa sen luova sovelma. Vaikka appletilla voi olla viittaus objektiin, se ei voi käyttää objektin menetelmiä, ellei se omista objektia tai objekti on nimenomaisesti jaettu. Appletti voi jakaa minkä tahansa kohteensa tietyn sovelman tai kaikkien sovelmien kanssa.

Appletti on itsenäinen kokonaisuus Java-kortissa. Muut samalla kortilla asuvat sovelmat eivät vaikuta sen valintaan, suoritukseen ja toimintoihin.

Kuinka asiat toimivat yhdessä Java-kortin sisällä

Java-kortin sisällä JCRE (Java Card Runtime Environment) viittaa Java-kortin virtuaalikoneeseen ja Java-korttikehyksen luokkiin. Jokainen Java-kortin sovelma liittyy JCRE: n osoittamaan yksilölliseen AID: ään.

Kun sovelma on ladattu oikein kortin pysyvään muistiin ja liitetty Java-korttikehykseen ja muihin kortin kirjastoihin, JCRE kutsuu sovelman asennusmenetelmää sovelman asennusprosessin viimeiseksi vaiheeksi. Julkinen staattinen menetelmä, Asentaa, applettiluokan on toteutettava luomaan sovelman ilmentymä ja rekisteröimällä se JCRE: hen. Koska muisti on rajallinen, on hyvä ohjelmointikäytäntö tässä vaiheessa luoda ja alustaa sovelman tarvitsemat elimet.