Programmering

Smartkort: En grunning

Smartkort har fått mye liv i det siste på nettet, på JavaOne-konferansen i april i fjor (fire økter som omhandlet teknologien), på de store nyhetsstasjonene på nettverket og på CNN. I denne artikkelen vil vi bringe smartkortet til liv med et eksempel på et smartkort. Teknikkene som presenteres her, lar deg begynne å bygge Java-applikasjoner som er aktivert med smartkort.

Vi vil fokusere på to typer smartkort: minne smartkort, som kan sees på som små flyttbare lese- / skrivedisker med valgfri sikkerhet; og prosessorkort, som kan sees på som miniatyrdatamaskiner med inngangs- og utgangsport. Fremtidige artikler vil dekke prosessorkort i større dybde.

Som kjøtt av artikkelen utvikler vi en enkel prototype for lesing og skriving av data til et smartkort. Vi vil diskutere en reseptbelagte kort, som fører en liste over alle reseptene dine og sporer forsikring, reseptplaner og annen nyttig info. Senere artikler vil utvide ideen om reseptkortet.

Du vil merke at et tilbakevendende tema som kjører gjennom hele denne serien på smartkort, er behovet for et sikkerhetsrammeverk for å forhindre useriøse plugin-moduler, ActiveX-komponenter og så videre fra å få tak i dine personlige og / eller bedriftsinformasjonsgods. For dette formål vil demonstrasjonen av hvordan du leser og skriver data til et smartkort som er inkludert i denne artikkelen, gi deg vedvarende, sikker (og bærbar) lagring.

Hva er et smartkort?

Du kan tenke på smartkortet som et "kredittkort" med en "hjerne" på, hjernen er en liten innebygd databrikke. Denne kortdatamaskinen kan programmeres til å utføre oppgaver og lagre informasjon, men merk at hjernen er det litt - noe som betyr at smartkortets strøm faller langt fra den stasjonære datamaskinen.

Smartkort brukes for tiden i telefon-, transport-, bank- og helsetransaksjoner, og snart - takket være utviklere som deg - begynner vi å se dem brukes i Internett-applikasjoner. Smartkort blir allerede brukt mye i Japan og Europa og blir stadig mer populære i USA. Det har faktisk skjedd tre viktige hendelser nylig i smartkortindustrien i dette landet:

PC / SC

Microsoft og flere andre selskaper introduserte PC / SC, et smartkortapplikasjonsgrensesnitt for kommunikasjon med smartkort fra Win32-baserte plattformer for personlige datamaskiner. PC / SC støtter for øyeblikket ikke ikke-Win32-baserte systemer og kan aldri gjøre det. Vi vil diskutere dette nærmere senere.

OpenCard Framework

OpenCard er en åpen standard som gir interoperabilitet for smartkortapplikasjoner på tvers av NC-er, POS, stasjonære datamaskiner, bærbare datamaskiner, set-tops og så videre. OpenCard lover å tilby 100% rene Java-smartkortapplikasjoner. Smartkortapplikasjoner er ofte ikke rene fordi de kommuniserer med en ekstern enhet og / eller bruker biblioteker på klienten. (Som en sidemerknad kan 100% rene applikasjoner eksistere uten OpenCard, men uten det vil utviklere bruke hjemmelagde grensesnitt til smartkort.) OpenCard gir også utviklere et grensesnitt til PC / SC for bruk av eksisterende enheter på Win32. platfroms.

JavaCard

JavaCard ble introdusert av Schlumberger og nylig sendt inn som standard av JavaSoft. Schlumberger har det eneste Java-kortet på markedet for tiden, og selskapet er den første JavaCard-lisensinnehaveren. Et smartkort med potensial til å sette den generelle smartkortstandarden, JavaCard består av standardklasser og APIer som lar Java-appletter kjøre direkte på et standard ISO 7816-kompatibelt kort. JavaCards muliggjør sikker og brikkeuavhengig kjøring av forskjellige applikasjoner.

Merk:

Selv om denne artikkelen fokuserer på smartkort, er det viktig å merke seg at du ikke er begrenset til denne typen enheter. Personlig foretrekker jeg at "Ibuttons" -enheten produseres av Dallas Semiconductor. Det er lite og bærbart som et kredittkort, men så mye mer praktisk. Hvorfor? Du trenger ikke å grave ut lommeboken din på jakt etter et kort; Ibuttons er der, på fingeren. Ja, det er en ring!

Samtidig som kontaktløs versjoner av smartkortet eksisterer (se nedenfor for mer informasjon om dette), jeg tror Ibuttons, funksjonell-smykker type enhet kan være ganske lønnsom. For mer informasjon om Ibuttons, se Ressurser-delen. Forresten demonstrerte Java Commerce Team en "JavaRing" på Java Internet Business Expo (JIBE) i New York i august i fjor. Du kan lese om dette i artikkelen i Formue magasinet (igjen, se seksjonen Ressurser).

Hvorfor bruke et smartkort?

Hva er fordelene med å bruke et smartkort? Vel, et smartkort:

  • er mer pålitelig enn et magnetstripekort
  • kan for øyeblikket lagre hundre ganger mer informasjon enn et magnetstripekort
  • er vanskeligere å tukle med enn mag-striper
  • kan være engangsbruk eller gjenbrukbar
  • kan utføre flere funksjoner i et bredt spekter av bransjer
  • er kompatibel med bærbare elektroniske enheter som telefoner, personlige digitale assistenter (PDAer) og PC-er
  • utvikler seg kontinuerlig (den inneholder tross alt en databrikke)

Typer smartkort

Som nevnt ovenfor, vil denne artikkelen fokusere på to typer smartkort - minne og prosess. I alt er det fem typer smartkort:

  1. minnekort
  2. prosessorkort
  3. elektroniske veskekort
  4. sikkerhetskort
  5. JavaCard

Smartkort er en personlig maskinvare som må kommunisere med en annen enhet for å få tilgang til en skjermenhet eller et nettverk. Kort kan plugges inn i en leser, ofte referert til som en

kortterminal

, eller de kan bruke RF-radiofrekvenser.

Smartkort kan kommunisere med en leser eller mottaker (se avsnittet om lesere nedenfor for mer om disse to vilkårene) i en av to former:

Kontakt smartkort - Tilkoblingen opprettes når leseren kontakter en liten gullbrikke på forsiden av kortet.

Kontaktløse smartkort - Disse kan kommunisere via en antenne, noe som eliminerer behovet for å sette inn og ta ut kortet for hånd. Med et kontaktløst kort er alt du trenger å gjøre å komme nær en mottaker, og kortet vil begynne å kommunisere med det. Kontaktløse kort kan brukes i applikasjoner der kortinnsetting / fjerning kan være upraktisk eller i hvilken hastighet som er viktig.

Noen produsenter lager kort som fungerer i både kontakt- og kontaktløs modus.

Lag et utviklingsmiljø for å bygge smartkort-apper

For å utvikle smartkortapplikasjoner trenger du noen få ting, nemlig: en smartkortleser; programvare for å kommunisere med leseren, samt litt programvare for å kommunisere med kortet som er koblet til leseren; og selvfølgelig smartkort og smartkort-maskinvare.

Smartkortleser

For å kommunisere med et smartkort eller utvikle et program som er i stand til smartkort, må du ha et leser. Leseren gir en bane for søknaden din for å sende og motta kommandoer fra kortet. Det er mange typer lesere på markedet, den mest utbredte er seriell, PCCard, og tastatur modeller. (Tastaturmodeller dukker opp her og der; forvent at de vil være direkte tilgjengelige fra de store PC-produsentene innen juni 1998.)

Denne artikkelen bruker serielle lesere til å støtte enhetene. En seriell leser kobles til datamaskinens serielle port. Merk at koden som leveres også støtter en PCCard-leser; de fleste bærbare datamaskiner har innebygde PCCard-spor.

Hver produsent tilbyr en annen protokoll for å snakke med en leser. Når du kan kommunisere med leseren, er det en protokoll for å kommunisere med et smartkort: Kommunikasjon med et smartkort er basert på APDU-formatet. (APDU-formatet blir diskutert nedenfor.) For informasjon om kjøp av din egen leser, se overskriften "Gemplus smart card reader" i seksjonen Ressurser.

Programvare for kommunikasjon med leseren

Det kreves en rekke objektorienterte klasser for smartkorteksemplet som er inkludert i denne artikkelen. Disse er:

  • ISO-kommandoklasser for kommunikasjon med 7816-protokollen
  • Klasser for kommunikasjon med leseren
  • Klasser for konvertering av data til et produsentspesifikt format
  • En applikasjon for testing og bruk av kortene til det formålet applikasjonen ble designet for

Smartkort og smartkortmaskinvare

Som nevnt i begynnelsen av artikkelen, for å utvikle smartkortapplikasjonen her, trenger du smartkortmaskinvare og noen smartkort. Du kan kjøpe utviklingssett for smartkort fra en rekke selskaper, inkludert Gemplus og Schlumberger.

For de av dere som allerede har lesere, bør du kunne bruke leseren din ved å levere en implementering av en grensesnittklasse som vi vil diskutere senere. Som nevnt ovenfor, før vi kan kommunisere med kortet, må vi kunne kommunisere med leseren, og akkurat som det er mange forskjellige kort, er det mange forskjellige lesere.

Viktige standarder for smartkort

En viktig brikke i utviklingen av smartkortapplikasjoner er standardprotokollene. I utgangspunktet kommuniserer applikasjonen med leseren, som igjen snakker med smartkortet ved hjelp av en standardprotokoll - i vårt tilfelle International Standards Organization (ISO) 7816-protokollen.

Som med enhver ny teknologi, er det så mange standarder for smartkort at du kan bli motløs og overveldet. Å oppnå en grunnleggende forståelse av følgende standarder vil gjøre det mulig for deg å utvikle applikasjoner med tillit til at du ikke ignorerer noe grunnleggende for å bruke smartkort. For noen systemer spiller imidlertid spesielle standarder inn. Jeg har brutt hele standardtingen ned i "horisontale" og "vertikale" standarder: Horisontale standarder kan brukes av alle applikasjoner, mens vertikale standarder er spesifikke for et system.

Horisontale standarder

  • ISO 7816 - beskriver grensesnittet på det laveste nivået til et smartkort. Det er på dette nivået databytes overføres mellom kortleser og kort.

  • PC / SC - standarden for kommunikasjon med smartkort koblet til Win3.1 / Win95 / NT-maskiner.

  • OCF - et helt Java-grensesnitt for kommunikasjon med smartkort fra et Java-miljø. (Snart vil OCF tillate utviklere å skrive til OCF og utføre oversettelsen, så det vil ikke være behov for å skrive til PC / SC.)

  • JavaCard - beskriver JavaCard og hva det støtter.

Vertikale standarder

  • Mondex - digitale kontanter som bare bruker smartkort. Mondex-tilnærmingen tillater ikke at kontanter eksisterer utenfor kortet.

  • VisaCash - debetkort som holder oversikt over kortene på serveren.

  • Proton - en annen form for E-kontanter.

  • MPCOS-EMV - kort for generelle formål som lar deg implementere din egen type valuta eller token.

Jeg er alltid overrasket over at et så lite stykke plast kan kreve så mye dokumentasjonslesing og kreve så mye kunnskap fra utviklerens side!

Fordi et så høyt nivå av ekspertise er nødvendig med smartkort, er det et marked for utviklere å levere Beans-kompatible produkter som implementerer en vertikal standard ved hjelp av den horisontale standarden for markedet du ønsker å selge til. Dette betyr at du kan utvikle bønner som bruker forskjellige kombinasjoner av horisontale standarder, som OpenCard, for å implementere en bestemt applikasjon ved hjelp av en annen industristandard for handel eller andre applikasjoner.

Kommuniser med smartkort fra en Java-applet eller applikasjon

Du vet hva du trenger for å koble til all maskinvaren. Nå må vi forstå hvordan vi bruker noen API-er som lar oss sende kommandoer fra et program til en leser. (Leseren kommuniserer på sin side med kortet og fungerer derved som mellomledd før han sender dataene til kortet.) Smartkortleseren vrikker gullkontaktpunktene og overfører dataene. Kortet vil gjøre noe med dataene og returnere dem til leseren, som deretter vil returnere dataene til applikasjonen. Så hvor er alle disse bytene når de flytter fra applikasjonen din til kortet?

Som nevnt ovenfor kommuniserer applikasjonen med leseren, som igjen snakker med smartkortet ved hjelp av standardene som er diskutert ovenfor. I utgangspunktet, som smartkortteknologi utviklet seg, ble en smartkortstandard foreslått av ISO. Standarden definerte mekaniske og elektriske egenskaper samt protokollen for kommunikasjon med kortet. Pekere til de aktuelle ISO-dokumentene er oppført i Ressurser-delen. Dessverre klarte ikke ISO-gruppen å gi en standard for kommunikasjon med leseren. Så for å sende en kommando til et kort, må du først finne kommandoen som kortet støtter, pakke denne kommandoen i en ISO-kommandopakke, og deretter pakke denne nye kommandoen i innpakningen som kreves for den aktuelle leseren. Eksempelapplikasjonen gitt her utfører all denne lagdelingen for deg.

Application Protocol Data Units (APDUs)

Den grunnleggende utvekslingsenheten med et smartkort er APDU-pakken. Kommandomeldingen som sendes fra applikasjonslaget, og svarmeldingen som kortet returnerer til applikasjonslaget, kalles APDU (Application Protocol Data Units). Kommunikasjon med kortet og leseren utføres med APDUer. En APDU kan betraktes som en datapakke som inneholder en komplett instruksjon eller et komplett svar fra et kort. For å tilby denne funksjonaliteten har APDUer en veldefinert struktur som er definert i et antall ISO-dokumenter som tilhører spesifikasjonsfamilien 7816.

APDUer består av følgende felt:

Kommando APDU-format

CLAINSP1P2LcDataLe

Svar APDU-format

DataSW1SW2

Følgende er noen av klassene som er gitt for transport av APDUer og klassenes funksjoner:

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