Programavimas

Suprasti „Java Card 2.0“

Šis straipsnis pradedamas pažangiųjų kortelių apžvalga ir trumpa ISO 7816, lustinių kortelių standarto, apžvalga. Atsižvelgiant į ankstesnių lustinių kortelių foną „Java“ kūrėjas stulpelių, ši dalis prasidės atsakymu į klausimą „Kas yra„ Java “kortelė?“ ir „Java Card“ sistemos architektūros apžvalga. Toliau mes sutelksime dėmesį į daugelį „Java“ kortelei būdingų klausimų, įskaitant „Java“ kortelės gyvavimo ciklą; „Java Card 2.0“ kalbos pogrupis ir API bibliotekos klasės; ir „Java Card“ saugumas. Tada aptarsime „Java Card“ vykdymo aplinką ir parodysime, kaip veikia „Java Card“. Pabaigoje pateiksime šviečiantį pavyzdį: elektroninės piniginės programa, parašyta tik „Java“ kortelei.

Nuo šiol visos nuorodos į „Java Card“ netiesiogiai reiškia „Java Card 2.0“.

Kas yra lustinė kortelė?

Išmanioji kortelė, identiška kreditinės kortelės dydžiui, saugo ir apdoroja informaciją per elektronines grandines, įdėtas į silicį plastiko pagrindo pagrinde. Yra dvi pagrindinės lustinių kortelių rūšys: intelektualioji intelektualioji kortelė yra mikroprocesorius ir siūlo skaitymo, rašymo ir skaičiavimo galimybes, pavyzdžiui, mažą mikrokompiuterį. A atminties kortelėkita vertus, neturi mikroprocesoriaus ir yra skirtas tik informacijos saugojimui. Atminties kortelė naudoja saugumo logiką, kad valdytų atminties prieigą.

Visose lustinėse kortelėse yra trijų tipų atmintis: nuolatinė nekintama atmintis; nuolatinė kintama atmintis; ir nepatvari kintama atmintis. ROM, EEPROM ir RAM yra plačiausiai naudojama trijų atitinkamų tipų atmintis dabartinėse lustinėse kortelėse. Nuolatinė atmintis dar vadinama nepastoviąja atmintimi. Mes naudosime terminus atkaklus ir nepastovi šiame straipsnyje.

Tarptautinės standartų organizacijos apibrėžtame ISO 7816 1-7 dalyje yra standartų rinkinys, apimantis įvairius lustinių kortelių aspektus. ISO 7816 sudaro:

  • Fizinės savybės (1 dalis)

  • Kontaktų matmenys ir vieta (2 dalis)

  • Elektroniniai signalai ir perdavimo protokolai (3 dalis)

  • Tarpšakinės komandos mainams (4 dalis)

  • Programos identifikatoriai (5 dalis)

  • Tarpšakiniai duomenų elementai (6 dalis)

  • Tarpšakinės komandos, skirtos SCQL (7 dalis)

Ši schema iliustruoja fizines lustinės kortelės charakteristikas, apibrėžtas ISO 7816 1 dalyje.

Daugiau informacijos apie ISO 7816 ir lustines korteles rasite skyrelyje „Išmaniosios kortelės: gruntas“.

Paprastai intelektualiojoje kortelėje nėra maitinimo šaltinio, ekrano ar klaviatūros. Jis sąveikauja su išoriniu pasauliu naudodamasis nuosekliojo ryšio sąsaja per aštuonis kontaktinius taškus. Kontaktų matmenys ir vieta aprašyti ISO 7816 2 dalyje. Šioje diagramoje parodomi lustinės kortelės kontaktai.

Išmanioji kortelė įdėta į kortelių priėmimo įrenginį (CAD), kuris gali prisijungti prie kito kompiuterio. Kiti Kortelės priėmimo įrenginio terminai yra terminalas, skaitytojasir IFD (sąsajos įrenginys). Visi jie atlieka tas pačias pagrindines funkcijas, būtent tiekia kortelę energija ir užmezga duomenų perdavimo ryšį.

Kai du kompiuteriai bendrauja tarpusavyje, jie keičiasi duomenų paketais, kurie sukonstruoti pagal protokolų rinkinį. Panašiai intelektualiosios kortelės kalba su išoriniu pasauliu naudodamosi savo duomenų paketais, vadinamais APDU (Programos protokolo duomenų vienetai). APDU yra komanda arba atsakymo pranešimas. Kortelių pasaulyje naudojamas pagrindinio vergo modelis, pagal kurį intelektualioji kortelė visada atlieka pasyvų vaidmenį. Kitaip tariant, intelektualioji kortelė visada laukia komandos APDU iš terminalo. Tada jis atlieka APDU nurodytą veiksmą ir atsako į terminalą su atsakymo APDU. Komandos APDU ir atsako APDU keičiamos pakaitomis tarp kortelės ir terminalo.

Šiose lentelėse iliustruojami atitinkamai komandos ir atsako APDU formatai. APDU struktūra aprašyta ISO 7816 4 dalyje.

Komanda APDU
Privaloma antraštėSąlyginis kūnas
CLAINSP1P2LcDuomenų laukasLe

Antraštė koduoja pasirinktą komandą. Jį sudaro keturi laukai: klasė (CLA), instrukcija (INS) ir 1 bei 2 parametrai (P1 ir P2). Kiekviename lauke yra 1 baitas:

  • CLA: klasės baitas. Daugelyje lustinių kortelių šis baitas naudojamas programai identifikuoti.

  • INS: instrukcijos baitas. Šis baitas nurodo instrukcijos kodą.

  • P1-P2: parametrų baitai. Tai suteikia papildomą APDU komandos kvalifikaciją.

Lc žymi baitų skaičių komandos APDU duomenų lauke; Le žymi didžiausią tikėtiną baitų skaičių laukiant šio atsakymo APDU duomenų lauke.

Atsakymas APDU
Sąlyginis kūnasPrivalomas priekaba
Duomenų laukasSW1SW2

Būsenos baitai SW1 ir SW2 žymi kortelės APDU komandos apdorojimo būseną.

Kas yra „Java“ kortelė?

„Java Card“ yra intelektualioji kortelė, galinti paleisti „Java“ programas. „Java Card 2.0“ specifikacija buvo paskelbta adresu //www.javasoft.com/javacard. Jame pateikiama išsami informacija apie „Java Card“ virtualiosios mašinos ir programavimo sąsajos (API) sukūrimą lustinėse kortelėse. Mažiausias sistemos reikalavimas yra 16 kilobaitų tik skaitymo atmintis (ROM), 8 kilobaitai EEPROM ir 256 baitai laisvosios kreipties atminties (RAM).

„Java“ kortelės sistemos architektūra pavaizduota šiame paveikslėlyje.

Kaip parodyta paveikslėlyje, „Java Card VM“ yra sukurta ant konkretaus integrinio grandyno (IC) ir vietinės operacinės sistemos diegimo. JVM sluoksnis slepia gamintojo patentuotą technologiją su bendra kalbos ir sistemos sąsaja. „Java Card“ sistema apibrėžia „Application Programming Interface“ (API) klasių rinkinį, skirtą „Java Card“ programoms kurti ir šioms programoms teikti sistemos paslaugas. Konkretus sektorius ar verslas gali tiekti papildomas bibliotekas, kad galėtų teikti paslaugas arba patobulinti saugos ir sistemos modelį. Skambinamos „Java Card“ programos programėlės. Vienoje kortelėje gali būti kelios programėlės. Kiekviena programėlė identifikuojama pagal ją PAGALBA (programos identifikatorius), kaip apibrėžta ISO 7816 5 dalyje.

Svarbus dalykas, kurį reikia nepamiršti, yra tai, kas yra „smart“ kortelės nėra: Jie nėra asmeniniai kompiuteriai. Jie turi ribotus atminties išteklius ir skaičiavimo galią. Vartotojai neturėtų manyti, kad „Java Card 2.0“ yra tiesiog nuimta JDK versija.

„Java“ kortelės tarnavimo laikas

„Java“ kortelės tarnavimo laikas prasideda, kai vietinės OS, „Java Card VM“, API klasių bibliotekos ir pasirinktinai programėlės įrašomos į ROM. Šis nuolatinių komponentų įrašymo į nekintamą lusto atmintį procesas, skirtas atlikti gaunamas komandas, yra vadinamas maskavimas.

Prieš įkeliant į jūsų piniginę, „Java“ kortelė turi būti inicializuota ir suasmeninta. Inicijavimas reiškia bendrų duomenų įkėlimą į nepastovią kortelės atmintį. Šie duomenys yra vienodi daugelyje kortelių ir nėra būdingi asmeniui; pavyzdys gali būti emitentas arba gamyklos pavadinimas.

Kitas žingsnis, suasmeninimas, apima kortelės priskyrimą asmeniui. Tai gali atsitikti fiziškai arba elektroniniu būdu. Fizinis suasmeninimas reiškia jūsų vardo ir kortelės numerio įspaustą arba lazerinį išgraviravimą ant plastikinio kortelės paviršiaus. Elektroninis suasmeninimas reiškia asmens duomenų įkėlimą į nepastovią kortelės atmintį, pavyzdžiui, asmeninį raktą, vardą ir PIN kodą.

Inicijavimas ir suasmeninimas priklauso nuo tiekėjo ir tiekėjo. Abiejuose duomenims saugoti dažnai naudojamas EEPROM (nepastovios atminties tipas).

Šiuo metu „Java“ kortelė yra paruošta naudoti. „Java“ kortelę galite gauti iš leidėjo arba nusipirkti iš mažmenininko. Mažmenininko parduodamos kortelės yra bendros paskirties, tokiu atveju personalizavimas dažnai nenurodomas.

Dabar galite įdėti savo „Java“ kortelę į skaitytuvą ir nusiųsti APDU komandas programoje esančioms programėlėms arba atsisiųsti daugiau programėlių ar duomenų į kortelę.

„Java“ kortelė lieka aktyvi, kol jos galiojimo laikas baigsis arba ji bus užblokuota dėl neatkuriamos klaidos.

„Java Card“ virtualios mašinos tarnavimo laikas

Skirtingai nuo „Java“ virtualiosios mašinos (JVM) asmeniniame kompiuteryje ar darbo stotyje, „Java Card“ virtualioji mašina veikia visam laikui.

Dauguma kortelėje saugomos informacijos turi būti išsaugota net tada, kai maitinimas yra išjungtas, tai yra, kai kortelė išimama iš skaitytuvo. „Java Card“ VM sukuria objektus EEPROM, kad išlaikytų nuolatinę informaciją. „Java Card VM“ vykdymo laikas yra kortelės tarnavimo laikas. Kai maitinimas nėra tiekiamas, VM veikia begaliniu laikrodžio ciklu.

„Java Card“ programėlių ir objektų tarnavimo laikas

Programėlės gyvavimo laikas prasideda, kai ji yra tinkamai įdiegta ir užregistruota sistemos registro lentelėje, ir baigiasi, kai ji pašalinama iš lentelės. Pašalintos programėlės vieta gali būti pakartotinai panaudota, bet ne, atsižvelgiant į tai, ar kortelėje įdiegtas šiukšlių surinkimas. Kortelėje esanti programėlė yra neaktyvi, kol terminalas ją aiškiai parenka.

Objektai yra sukurti nuolatinėje atmintyje (pavyzdžiui, EEPROM). Jie gali būti pamesti arba surinkti šiukšles, jei kiti patvarūs objektai jų nenurodo. Tačiau tūkstantį kartų lėčiau rašyti į EEPROM nei į RAM.

Kai kurie objektai yra prieinami dažnai, o jų laukų turinys neturi būti nuolatinis. „Java“ kortelė palaiko trumpalaikis (laikini) objektai RAM. Kai objektas bus paskelbtas laikinu, jo turinio nebus galima perkelti atgal į nuolatinę atmintį.

„Java Card 2.0“ kalbos pogrupis

„Java Card“ programos, žinoma, yra parašytos „Java“. Jie sudaromi naudojant įprastus „Java“ kompiliatorius. Dėl ribotų atminties išteklių ir skaičiavimo galios ne visos „Java“ kalbos specifikacijoje apibrėžtos kalbos funkcijos palaikomos „Java“ kortelėje. „Java“ kortelė nepalaiko:

  • Dinamiškas klasės pakrovimas

  • Apsaugos vadybininkas

  • Gijos ir sinchronizavimas

  • Objektų klonavimas

  • Baigimas

  • Dideli primityvūs duomenų tipai („float“, „double“, „long“ ir „char“)

Nenuostabu, kad šias funkcijas palaikantys raktiniai žodžiai taip pat praleisti iš kalbos. VM diegėjai gali nuspręsti palaikyti 32 bitų sveiko skaičiaus tipą arba vietinius metodus po išleidimo programėlėms, jei jie dirba pažangesnėje intelektualiojoje kortelėje su daugiau atminties. Programos po išdavimo yra tos programėlės, kurios yra įdiegtos „Java“ kortelėje po kortelės išdavimo kortelės turėtojui.

„Java Card 2.0“ sistema

Išmaniosios kortelės buvo rinkoje 20 metų ir dauguma jų paprastai suderinamos su ISO 7816 1–7 dalimis ir (arba) EMV. Mes jau peržiūrėjome ISO 7816. Kas yra EMV? „EMV“ standartas, apibrėžtas „Europay“, „MasterCard“ ir „Visa“, yra pagrįstas ISO 7816 standartų serija su papildomomis nuosavybės funkcijomis, kad atitiktų specifinius finansų pramonės poreikius. „Java Card Framework“ sukurta taip, kad lengvai palaikytų lustinių kortelių sistemas ir programas. Tai slepia informaciją apie intelektualiųjų kortelių infrastruktūrą ir suteikia „Java Card“ programų kūrėjams gana lengvą ir nesudėtingą programavimo sąsają.

„Java Card“ sistemoje yra keturi paketai:

Pakuotės pavadinimasapibūdinimas
javacard.frameworkTai yra pagrindinis kortelės paketas. Jis apibrėžia tokias klases kaip ir , kurie yra pagrindiniai „Java Card“ programų ir , ir , kurie teikia „Java Card“ programų vykdymo laiką ir sistemos paslaugas, pvz., APDU tvarkymą ir dalijimąsi objektais
javacardx.framework Šis paketas suteikia objektyvų ISO 7816-4 suderinamų failų sistemos dizainą. Jis palaiko elementarius failus (EF), specialius failus (DF) ir į failus orientuotus APDU, kaip nurodyta ISO7816
javacardx.crypto ir javacardx.cryptoEnc Šie du paketai palaiko kriptografinę funkciją, reikalingą lustinėms kortelėms

Atitinka „Java“ vardų suteikimo tvarką „Java“ Cardx paketai yra „Java Card“ sistemos plėtiniai. Nebūtina, kad palaikytumėte juos kortelėje.

„Java Card“ saugumas

„Java“ programėlėms taikomi „Java“ saugumo apribojimai, tačiau „Java Card“ sistemų saugos modelis daugeliu atžvilgių skiriasi nuo standartinės „Java“.

„Java Card“ nepalaiko „Security Manager“ klasės. Kalbos saugumo politiką įgyvendina virtuali mašina.

„Java“ programėlės sukuria objektus, kurie saugo ir valdo duomenis. Objektas priklauso jį kuriančiai programėlei. Net jei programėlėje gali būti nuoroda į objektą, ji negali pasinaudoti objekto metodais, nebent jai priklauso objektas arba objektas yra aiškiai bendrinamas. Programėlė gali dalytis bet kuriuo savo objektu su tam tikra programėle arba su visomis programėlėmis.

Programėlė yra nepriklausoma „Java“ kortelės esybė. Kiti programėlės, esančios toje pačioje kortelėje, neturi įtakos jo pasirinkimui, vykdymui ir funkcionalumui.

Kaip viskas veikia kartu su „Java“ kortele

„Java Card“ viduje JCRE („Java Card Runtime Environment“) nurodo „Java Card“ virtualią mašiną ir „Java Card Framework“ klases. Kiekviena „Java“ kortelės programėlė yra susieta su unikaliu AID, kurį priskiria JCRE.

Kai programėlė teisingai įkeliama į nuolatinę kortelės atmintį ir susiejama su „Java Card Framework“ ir kitomis kortelės bibliotekomis, JCRE paskirties programėlės diegimo procesą vadina programėlės diegimo metodu. Viešasis statinis metodas, diegti, turi įdiegti programėlių klasė, kad sukurtumėte programėlės egzempliorių ir užregistruotumėte JCRE. Kadangi atmintis yra ribota, šiuo metu yra gera programavimo praktika, norint sukurti ir inicializuoti objektus, kurių prireiks programėlei per visą jos gyvavimo laiką.