Programavimas

Išmaniosios kortelės: gruntas

Išmaniosios kortelės pastaruoju metu sulaukia daug aistrų žiniatinklyje, praėjusių metų balandžio mėnesį vykusioje „JavaOne“ konferencijoje (keturios sesijos buvo susijusios su technologija), didžiosiose tinklo naujienų stotyse ir CNN. Šiame straipsnyje mes atgaivinsime intelektualiąją kortelę su realaus pasaulio intelektualiosios kortelės pavyzdžiu. Čia pateikti metodai leis jums pradėti kurti „Java“ programas, įgalinančias „smart-card“.

Mes sutelksime dėmesį į dviejų tipų lustines korteles: atminties lustinės kortelės, kurie gali būti vertinami kaip nedideli nuimami skaitymo / rašymo diskai su neprivaloma apsauga; ir procesoriaus kortelės, kuris gali būti vertinamas kaip miniatiūriniai kompiuteriai su įvesties ir išvesties prievadu. Ateities straipsniuose bus išsamiau aprašytos procesoriaus kortelės.

Kaip straipsnio mėsą sukursime paprastą prototipą, skirtą duomenims skaityti ir rašyti į lustinę kortelę. Aptarsime a vaistų receptų kortelė, kuriame saugomas visų jūsų receptų sąrašas, stebimi jūsų draudimai, receptų planai ir kita naudinga informacija. Vėlesniuose straipsniuose bus išplėsta receptų kortelės idėja.

Jūs pastebėsite, kad pasikartojanti tema, vykdoma visoje šioje serijoje, naudojant intelektualias korteles, yra saugumo sistemos poreikis, kad būtų išvengta nesąžiningų papildinių, „ActiveX“ komponentų ir pan. Šiuo tikslu parodžius, kaip skaityti ir rašyti duomenis į intelektualiąją kortelę, pateiktą šiame straipsnyje, gausite nuolatinę, saugią (ir nešiojamą) saugyklą.

Kas yra lustinė kortelė?

Jūs galite galvoti apie intelektualiąją kortelę kaip apie „kreditinę kortelę“ su „smegenimis“, kurios yra maža įterpta kompiuterio mikroschema. Ši kortelė-kompiuteris gali būti užprogramuotas atlikti užduotis ir kaupti informaciją, tačiau atkreipkite dėmesį, kad smegenys yra mažai - tai reiškia, kad intelektualiosios kortelės maitinimas gerokai pritrūksta jūsų staliniam kompiuteriui.

Šiuo metu išmaniosios kortelės naudojamos atliekant telefono, transporto, bankininkystės ir sveikatos priežiūros operacijas, ir netrukus - dėka tokių kūrėjų kaip jūs, pradėsime jas naudoti interneto programose. Išmaniosios kortelės jau plačiai naudojamos Japonijoje ir Europoje ir populiarėja JAV. Iš tikrųjų šios šalies pažangiųjų kortelių pramonėje neseniai įvyko trys reikšmingi įvykiai:

PC / SC

Pristatė „Microsoft“ ir kelios kitos bendrovės PC / SC, lustinės kortelės taikymo sąsaja, skirta bendrauti su lustinėmis kortelėmis iš Win32 platformų, skirtų asmeniniams kompiuteriams. PC / SC šiuo metu nepalaiko ne „Win32“ pagrįstų sistemų ir gali to niekada nedaryti. Vėliau tai aptarsime išsamiau.

„OpenCard Framework“

„OpenCard“ yra atviras standartas, užtikrinantis intelektualiųjų kortelių programų sąveikumą visose NC, POS, darbalaukiuose, nešiojamuosiuose kompiuteriuose, nustatytose viršutinėse dalyse ir pan. „OpenCard“ žada pateikti 100% grynos „Java“ intelektualiosios kortelės programas. Lustinių kortelių programos dažnai nėra grynos, nes jos bendrauja su išoriniu įrenginiu ir (arba) naudoja kliento bibliotekas. (Pažymėtina, kad 100% grynos programos gali egzistuoti be „OpenCard“, tačiau be jos kūrėjai naudotų namuose auginamas sąsajas prie išmaniųjų kortelių.) „OpenCard“ taip pat suteikia kūrėjams sąsają su kompiuteriu / SC, kad būtų galima naudoti esamus „Win32“ įrenginius. platfroms.

„JavaCard“

„JavaCard“ pristatė „Schlumberger“ ir neseniai „JavaSoft“ pateikė kaip standartą. „Schlumberger“ šiuo metu turi vienintelę „Java“ kortelę rinkoje, o įmonė yra pirmoji „JavaCard“ licencijos turėtoja. Išmanioji kortelė, galinti nustatyti bendrą intelektualiųjų kortelių standartą, „JavaCard“ sudaro standartinės klasės ir API, leidžiančios „Java“ programėlėms veikti tiesiai su standartu, atitinkančiu ISO 7816. „JavaCards“ leidžia saugiai ir nepriklausomai nuo lusto vykdyti įvairias programas.

Pastaba:

Nors šiame straipsnyje daugiausia dėmesio skiriama intelektualioms kortelėms, svarbu atkreipti dėmesį į tai, kad neapsiribojate vien tokiais įrenginiais. Asmeniškai man labiau patinka „Dallas Semiconductor“ gaminamas „Ibuttons“ įrenginys. Ji yra maža ir nešiojama kaip kreditinė kortelė, tačiau tokia patogi. Kodėl? Jums nereikia kasti piniginės ieškant kortelės; Mygtukai yra čia pat, ant jūsų piršto. Taip, tai žiedas!

Nors bekontaktis egzistuoja lustinės kortelės versijos (daugiau informacijos apie tai žr. toliau), manau, kad „Ibuttons“, funkcinio-juvelyrinio tipo prietaisai galėtų būti gana pelningi. Norėdami gauti daugiau informacijos apie mygtukus, žr. Skyrių Ištekliai. Beje, „Java Commerce“ komanda „JavaRing“ demonstravo „Java Internet Business Expo“ (JIBE) Niujorke pernai rugpjūtį. Apie tai galite perskaityti straipsnyje Likimas žurnalas (vėl žr. skyrių Ištekliai).

Kodėl verta naudoti intelektualiąją kortelę?

Kokie yra intelektualiosios kortelės naudojimo pranašumai? Na, intelektualioji kortelė:

  • yra patikimesnė nei magnetinės juostos kortelė
  • šiuo metu gali saugoti šimtą kartų daugiau informacijos nei magnetinės juostos kortelė
  • yra sunkiau sugadinamas nei magijos juostos
  • gali būti vienkartiniai arba daugkartinio naudojimo
  • gali atlikti kelias funkcijas įvairiose pramonės šakose
  • yra suderinamas su nešiojamais elektroniniais prietaisais, tokiais kaip telefonai, asmeniniai skaitmeniniai padėjėjai (PDA) ir asmeniniai kompiuteriai
  • nuolat tobulėja (juk jame yra kompiuterio lustas)

Lustinių kortelių tipai

Kaip minėta pirmiau, šiame straipsnyje pagrindinis dėmesys bus skiriamas dviejų tipų intelektualioms kortelėms - atminčiai ir procesui. Iš viso yra penkios lustinių kortelių rūšys:

  1. atminties korteles
  2. procesoriaus kortelės
  3. elektroninės piniginės kortelės
  4. apsaugos kortelės
  5. „JavaCard“

Išmaniosios kortelės yra asmeninė aparatinė įranga, kuri turi bendrauti su kažkokiu kitu įrenginiu, kad gautų prieigą prie vaizduoklio ar tinklo. Korteles galima prijungti prie skaitytuvo, paprastai vadinamo a

kortelių terminalas

arba jie gali veikti naudodami radijo dažnius.

Išmaniosios kortelės gali bendrauti su skaitytuvu ar imtuvu (daugiau apie šiuos du terminus skaitykite toliau esančiame skyriuje „Skaitytojai“) viena iš dviejų formų:

Susisiekite su lustinėmis kortelėmis - Jungtis atliekama, kai skaitytojas susisiekia su maža aukso drožle kortelės priekyje.

Bekontaktės lustinės kortelės - Jie gali bendrauti per anteną, todėl nereikia įdėti ir išimti kortelės ranka. Turėdami bekontaktę kortelę, tereikia priartėti prie imtuvo, ir kortelė pradės su ja bendrauti. Bekontaktės kortelės gali būti naudojamos tose programose, kuriose kortelių įdėjimas / išėmimas gali būti nepraktiškas arba kuriose greitis yra svarbus.

Kai kurie gamintojai gamina korteles, veikiančias tiek kontakto, tiek bekontakčiu režimu.

Sukurkite kūrimo aplinką, skirtą kurti intelektualiųjų kortelių programas

Norint sukurti lustinių kortelių programas, jums reikia kelių dalykų, būtent: lustinių kortelių skaitytuvas; programinė įranga, skirta bendrauti su skaitytuvu, taip pat tam tikra programinė įranga, skirta bendrauti su kortele, kuri buvo prijungta prie skaitytuvo; ir, žinoma, lustinės kortelės ir lustinių kortelių aparatūra.

Lustinių kortelių skaitytuvas

Norėdami bendrauti naudodamiesi lustine kortele arba kurti programinę įrangą, galinčią naudotis lustinėmis kortelėmis, turite turėti skaitytojas. Skaitytuvas pateikia kelią jūsų programai siųsti ir gauti komandas iš kortelės. Rinkoje yra daugybė skaitytojų tipų, labiausiai paplitę serijinis, PCCardir klaviatūra modeliai. (Čia ir ten pasirodo klaviatūros modeliai; tikimasi, kad iki 1998 m. Birželio mėn. Juos tiesiogiai galės įsigyti didieji kompiuterių gamintojai.)

Šiame straipsnyje prietaisų palaikymui naudojami nuoseklūs skaitytuvai. Nuoseklusis skaitytuvas jungiasi prie kompiuterio nuoseklaus prievado. Atkreipkite dėmesį, kad pateiktas kodas taip pat palaiko PCCard skaitytuvą; daugumoje nešiojamųjų kompiuterių yra įmontuoti „PCCard“ lizdai.

Kiekvienas gamintojas pateikia skirtingą kalbėjimo su skaitytoju protokolą. Kai galėsite bendrauti su skaitytoju, yra vienas protokolas, skirtas bendrauti su išmaniąja kortele: Bendravimas su lustine kortele pagrįstas APDU formatu. (APDU formatas aptariamas toliau.) Norėdami gauti informacijos apie savo skaitytuvo įsigijimą, skaitykite išteklių skyriuje esančią antraštę „Gemplus intelektualiųjų kortelių skaitytuvai“.

Programinė įranga, skirta bendrauti su skaitytoju

Šiame straipsnyje pateikiamam intelektualiosios kortelės pavyzdžiui reikalinga keletas objektu pagrįstų klasių. Šitie yra:

  • ISO komandų klasės, skirtos bendrauti su 7816 protokolu
  • Užsiėmimai bendravimui su skaitytoju
  • Klasės, skirtos konvertuoti duomenis į konkretaus gamintojo formatą
  • Programa kortelėms išbandyti ir naudoti tam tikslui, kuriam buvo sukurta programa

Lustinės kortelės ir lustinių kortelių aparatūra

Kaip pažymėta straipsnio pradžioje, norint čia sukurti intelektualiosios kortelės programą, jums reikia intelektualiosios kortelės aparatūros ir kai kurių išmaniųjų kortelių. Išmaniųjų kortelių kūrimo rinkinius galite įsigyti iš daugelio įmonių, įskaitant „Gemplus“ ir „Schlumberger“.

Tiems iš jūsų, kurie jau turi skaitytojų, turėtumėte galėti naudotis savo skaitytoju, pateikdami sąsajos klasės, kurią aptarsime vėliau, įgyvendinimą. Kaip minėta pirmiau, kad galėtume bendrauti su kortele, turime mokėti bendrauti su skaitytoju, ir lygiai taip pat yra daugybė skirtingų kortelių.

Svarbūs lustinių kortelių standartai

Svarbus intelektualiosios kortelės programų kūrimo galvosūkis yra standartiniai protokolai. Iš esmės programa bendrauja su skaitytoju, kuris savo ruožtu kalbasi su išmaniąja kortele naudodamas standartinį protokolą - mūsų atveju - Tarptautinės standartų organizacijos (ISO) 7816 protokolą.

Kaip ir naudojant bet kokią naują technologiją, yra tiek daug lustinių kortelių standartų, kad galite nusivilti ir būti priblokšti. Pasiekę pagrindinį šių standartų supratimą, galėsite kurti programas užtikrintai, kad neignoruojate kažko pagrindinio naudodami intelektualias korteles. Tačiau kai kurioms sistemoms galioja specialūs standartai. Aš suskaidžiau visą standartų dalyką į „horizontalius“ ir „vertikalius“ standartus: horizontalius standartus gali naudoti visos programos, o vertikalieji standartai yra būdingi sistemai.

Horizontalieji standartai

  • ISO 7816 - apibūdina žemiausio lygio sąsają su lustine kortele. Šiuo lygiu duomenų baitai perduodami tarp kortelių skaitytuvo ir kortelių.

  • PC / SC - ryšio su intelektualiomis kortelėmis, prijungtomis prie Win3.1 / Win95 / NT mašinų, standartas.

  • OCF - visa „Java“ sąsaja, skirta bendrauti su „smart“ kortelėmis iš „Java“ aplinkos. (Netrukus OCF leis kūrėjams rašyti į OCF ir atlikti vertimą, todėl nereikės rašyti į PC / SC.)

  • „JavaCard“ - apibūdina „JavaCard“ ir ką ji palaiko.

Vertikalieji standartai

  • „Mondex“ - skaitmeniniai grynieji pinigai, kuriuose naudojamos tik lustinės kortelės. „Mondex“ metodas neleidžia grynųjų pinigų egzistuoti už kortelės ribų.

  • „VisaCash“ - debeto kortelė, kuri seka korteles serveryje.

  • Protonas - kita elektroninių pinigų forma.

  • MPCOS-EMV - bendrosios paskirties kortelė, leidžianti įdiegti savo valiutą ar žetoną.

Aš visada stebiuosi, kad tokiam mažam plastiko gabalėliui gali tekti skaityti tiek daug dokumentų ir pareikalauti tiek daug kūrėjo žinių!

Kadangi reikalinga tokia aukšto lygio patirtis naudojant lustines korteles, kūrėjams yra rinka tiekti „Beans“ turinčius produktus, kurie įgyvendina vertikalųjį standartą, taikydami horizontalųjį standartą rinkoje, kuriai norite parduoti. Tai reiškia, kad galite sukurti pupeles, kurios naudoja įvairius horizontalių standartų derinius, pvz., „OpenCard“, kad įgyvendintumėte konkrečią programą, naudodamiesi kitu pramonės standartu komercijai ar bet kuriai kitai programai.

Bendraukite su intelektualiomis kortelėmis iš „Java“ programėlės ar programos

Jūs žinote, ko reikia norint prijungti visą aparatinę įrangą. Dabar turime suprasti, kaip naudoti kai kurias API, kurios leis mums nusiųsti komandas iš programos skaitytojui. (Skaitytojas savo ruožtu bendrauja su kortele, tokiu būdu veikdamas kaip tarpininkas, prieš siųsdamas duomenis į kortelę.) Išmaniosios kortelės skaitytuvas vingiuoja auksinius kontaktinius taškus ir perduoda duomenis. Kortelė kažką padarys su duomenimis ir grąžins juos skaitytojui, kuris duomenis grąžins į programą. Taigi, kur yra visi šie baitai, kai jie pereina iš jūsų programos į kortelę?

Kaip minėta pirmiau, programa bendrauja su skaitytoju, kuris savo ruožtu kalbasi su lustine kortele naudodamasis aukščiau aptartais standartais. Iš esmės, vystantis lustinių kortelių technologijai, ISO pasiūlė lustinių kortelių standartą. Standartas apibrėžė mechanines ir elektrines charakteristikas, taip pat ryšio su kortele protokolą. Nuorodos į atitinkamus ISO dokumentus pateikiamos išteklių skyriuje. Deja, ISO grupė negalėjo pateikti bendravimo su skaitytoju standarto. Taigi, norėdami nusiųsti komandą į kortelę, pirmiausia turite rasti komandą, kurią palaiko kortelė, suvynioti šią komandą į ISO komandų paketą ir tada suvynioti šią naują komandą į aptariamam skaitytojui reikalingą pakuotę. Čia pateiktame programos pavyzdyje visas šis sluoksniavimas atliekamas jums.

Programos protokolo duomenų vienetai (APDU)

Pagrindinis mainų su lustine kortele vienetas yra APDU paketas. Komandos pranešimas, išsiųstas iš programos sluoksnio, ir atsakymo pranešimas, kurį kortelė grąžino programos sluoksniui, vadinami „Application Protocol Data Units“ (APDU). Ryšys su kortele ir skaitytuvu atliekamas su APDU. APDU gali būti laikomas duomenų paketu, kuriame yra visa instrukcija arba išsamus kortelės atsakymas. Norėdami suteikti šią funkciją, APDU turi gerai apibrėžtą struktūrą, apibrėžtą daugelyje ISO dokumentų, priklausančių 7816 specifikacijų šeimai.

APDU sudaro šie laukai:

Komandos APDU formatas

CLAINSP1P2LcDuomenysLe

Atsakymo APDU formatas

DuomenysSW1SW2

Toliau pateikiamos kelios klasės, numatytos APDU transportavimui, ir klasių funkcijos: