Programmering

Smartkort: En primer

Smartkort har fået en masse brummer for nylig på nettet, på JavaOne-konferencen i april sidste år (fire sessioner beskæftiget sig med teknologien), på de store netværksnyhedsstationer og på CNN. I denne artikel vil vi bringe smartkortet til live med et virkeligt smart-korteksempel. De teknikker, der præsenteres her, giver dig mulighed for at begynde at opbygge Java-applikationer, der er aktiveret med smartcard.

Vi fokuserer på to typer smartkort: hukommelseskortkort, som kan ses som små aftagelige læse / skrive diske med valgfri sikkerhed; og processor kort, som kan ses som miniaturecomputere med en input- og outputport. Fremtidige artikler vil dække processorkort i større dybde.

Som kød af artiklen udvikler vi en simpel prototype til læsning og skrivning af data til et chipkort. Vi vil diskutere en lægemiddelreceptkort, der holder en liste over alle dine recepter og sporer din forsikring, receptplaner og anden nyttig info. Senere artikler vil udvide idéen om receptkortet.

Du vil bemærke, at et tilbagevendende tema, der kører i hele denne serie på smartkort, er behovet for en sikkerhedsramme, der forhindrer falske plug-ins, ActiveX-komponenter og så videre i at få fat i dine personlige og / eller virksomhedsinfobad. Til dette formål vil demonstrationen af, hvordan man læser og skriver data til et smartcard, der er inkluderet i denne artikel, give dig vedvarende, sikker (og bærbar) opbevaring.

Hvad er et chipkort?

Du kan tænke på smartkortet som et "kreditkort" med en "hjerne" på, hjernen er en lille indlejret computerchip. Denne kortcomputer kan programmeres til at udføre opgaver og gemme information, men bemærk at hjernen er lille - hvilket betyder, at chipkortets strøm falder langt under din stationære computer.

Smartkort bruges i øjeblikket til telefon-, transport-, bank- og sundhedstransaktioner, og snart - takket være udviklere som dig - begynder vi at se dem bruges i internetapplikationer. Smartkort bruges allerede i vid udstrækning i Japan og Europa og vinder popularitet i USA. Faktisk er der for nylig sket tre vigtige begivenheder i smartkortindustrien i dette land:

PC / SC

Microsoft og flere andre virksomheder introduceret PC / SC, en interface til chipkortapplikation til kommunikation med chipkort fra Win32-baserede platforme til pc'er. PC / SC understøtter i øjeblikket ikke ikke-Win32-baserede systemer og kan muligvis aldrig gøre det. Vi vil diskutere dette mere detaljeret senere.

OpenCard Framework

OpenCard er en åben standard, der giver interoperabilitet mellem chipkortapplikationer på tværs af NC'er, POS, desktops, laptops, set tops og så videre. OpenCard lover at levere 100% rene Java-smartcard-applikationer. Smartkortapplikationer er ofte ikke rene, fordi de kommunikerer med en ekstern enhed og / eller bruger biblioteker på klienten. (Som en sidebemærkning kunne 100% rene applikationer eksistere uden OpenCard, men uden det ville udviklere bruge hjemmelavede grænseflader til smartkort.) OpenCard giver også udviklere en grænseflade til PC / SC til brug af eksisterende enheder på Win32. platfroms.

JavaCard

JavaCard blev introduceret af Schlumberger og indsendt som standard af JavaSoft for nylig. Schlumberger har det eneste Java-kort på markedet i øjeblikket, og virksomheden er den første JavaCard-licenshaver. Et chipkort med potentiale til at indstille den overordnede chipkortstandard, JavaCard består af standardklasser og API'er, der lader Java-applets køre direkte på et standard ISO 7816-kompatibelt kort. JavaCards muliggør sikker og chipuafhængig udførelse af forskellige applikationer.

Bemærk:

Selvom denne artikel fokuserer på smartkort, er det vigtigt at bemærke, at du ikke er begrænset til denne type enheder. Personligt foretrækker jeg, at "Ibuttons" -enheden produceres af Dallas Semiconductor. Det er lille og bærbart som et kreditkort, men så meget mere praktisk. Hvorfor? Du behøver ikke at grave din tegnebog ud på jagt efter et kort; Ibuttons er lige der, på din finger. Ja, det er en ring!

Mens kontaktløs versioner af chipkortet findes (se nedenfor for mere information om dette), jeg tror, ​​Ibuttons, funktionel-smykker type enhed kunne være ret rentabel. For mere information om Ibuttons, se afsnittet Ressourcer. Forresten demonstrerede Java Commerce Team en "JavaRing" på Java Internet Business Expo (JIBE) i New York i august sidste år. Du kan læse om dette i artiklen i Formue magasin (igen, se afsnittet Ressourcer).

Hvorfor bruge et chipkort?

Hvad er fordelene ved at bruge et chipkort? Nå et smartkort:

  • er mere pålidelig end et magnetstribekort
  • kan i øjeblikket gemme hundrede gange mere information end et magnetstribekort
  • er sværere at manipulere med end mag striber
  • kan være engangsbrug eller genanvendelig
  • kan udføre flere funktioner i en lang række brancher
  • er kompatibel med bærbare elektroniske enheder såsom telefoner, personlige digitale assistenter (PDA'er) og pc'er
  • udvikler sig konstant (når alt kommer til alt indeholder den en computerchip)

Typer af smartkort

Som nævnt ovenfor vil denne artikel fokusere på to typer smartkort - hukommelse og proces. I alt er der fem typer smartkort:

  1. hukommelseskort
  2. processor kort
  3. elektroniske pungkort
  4. sikkerhedskort
  5. JavaCard

Smartkort er et personligt stykke hardware, der skal kommunikere med en anden enhed for at få adgang til en displayenhed eller et netværk. Kort kan sættes i en læser, ofte benævnt en

kortterminal

, eller de kan operere ved hjælp af RF-radiofrekvenser.

Smartkort kan kommunikere med en læser eller modtager (se afsnittet om læsere nedenfor for mere om disse to vilkår) i en af ​​to former:

Kontakt smartkort - Forbindelsen foretages, når læseren kontakter en lille guldchip på forsiden af ​​kortet.

Kontaktløse smartkort - Disse kan kommunikere via en antenne, hvilket eliminerer behovet for at isætte og fjerne kortet manuelt. Med et kontaktløst kort er alt, hvad du skal gøre, at komme tæt på en modtager, og kortet begynder at kommunikere med det. Kontaktløse kort kan bruges i applikationer, hvor kortindsættelse / fjernelse kan være upraktisk, eller hvor hastighed er vigtig.

Nogle producenter laver kort, der fungerer i både kontakt- og kontaktløs tilstand.

Opret et udviklingsmiljø til opbygning af smartcard-apps

For at udvikle chipkortapplikationer har du brug for et par ting, nemlig: en chipkortlæser; software til at kommunikere med læseren samt noget software til at kommunikere med det kort, der er sat i læseren; og selvfølgelig smartkort og chipkorthardware.

Smartkortlæser

For at kommunikere med et chipkort eller udvikle en applikation, der er i stand til et smartcard, skal du have en læser. Læseren giver en sti til din applikation til at sende og modtage kommandoer fra kortet. Der er mange typer læsere på markedet, den mest udbredte er seriel, PCCardog tastatur modeller. (Tastaturmodeller dukker op her og der; forventer, at de vil være direkte tilgængelige fra de store pc-producenter inden juni 1998).

Denne artikel bruger serielle læsere til at understøtte enhederne. En serielæser opretter forbindelse til en computers serielle port. Bemærk, at den angivne kode også understøtter en PCCard-læser; de fleste bærbare computere leveres med indbyggede PCCard-slots.

Hver producent leverer en anden protokol til at tale med en læser. Når du først kan kommunikere med læseren, er der en protokol til kommunikation med et chipkort: Kommunikation med et chipkort er baseret på APDU-formatet. (APDU-formatet diskuteres nedenfor.) For information om køb af din egen læser, se overskriften "Gemplus smart card-læsere" i afsnittet Ressourcer.

Software til kommunikation med læseren

Der kræves et antal objektorienterede klasser til chipkorteksemplet, der er inkluderet i denne artikel. Disse er:

  • ISO-kommandoklasser til kommunikation med 7816-protokollen
  • Klasser til kommunikation med læseren
  • Klasser til konvertering af data til et producentspecifikt format
  • En applikation til test og brug af kortene til det formål, som applikationen blev designet til

Smartkort og chipkorthardware

Som bemærket i begyndelsen af ​​artiklen har du brug for chipkorthardware og nogle smartkort for at udvikle chipkortapplikationen her. Du kan købe chipkortudviklingssæt fra en række virksomheder, herunder Gemplus og Schlumberger.

For dem af jer, der allerede har læsere, skal du kunne bruge din læser ved at levere en implementering af en interface-klasse, som vi vil diskutere senere. Som nævnt ovenfor skal vi være i stand til at kommunikere med læseren, før vi kan kommunikere med kortet, og ligesom der er mange forskellige kort, er der mange forskellige læsere.

Vigtige standarder for chipkort

Et vigtigt stykke af smartcard-applikationsudviklingspuslespil er standardprotokollerne. Grundlæggende kommunikerer applikationen med læseren, som igen taler til smartkortet ved hjælp af en standardprotokol - i vores tilfælde International Standards Organization (ISO) 7816-protokollen.

Som med enhver ny teknologi er der så mange standarder for smartkort, at du måske bliver modløs og overvældet. At opnå en grundlæggende forståelse af følgende standarder gør det muligt for dig at udvikle applikationer med tillid til, at du ikke ignorerer noget grundlæggende ved brug af smartkort. For nogle systemer kommer der dog specielle standarder i spil. Jeg har brudt hele standardtingen ned i "vandrette" og "lodrette" standarder: Horisontale standarder kan bruges af alle applikationer, mens lodrette standarder er specifikke for et system.

Horisontale standarder

  • ISO 7816 - beskriver grænsefladen på det laveste niveau til et chipkort. Det er på dette niveau, at databytes overføres mellem kortlæser og kort.

  • PC / SC - standarden til kommunikation med smartkort tilsluttet Win3.1 / Win95 / NT-maskiner.

  • OCF - en Java-grænseflade til kommunikation med smartkort fra et Java-miljø. (Snart vil OCF tillade udviklere at skrive til OCF og udføre oversættelsen, så der er ikke behov for at skrive til PC / SC.)

  • JavaCard - beskriver JavaCard og hvad det understøtter.

Lodrette standarder

  • Mondex - digitale kontanter, der kun bruger smartkort. Mondex-metoden tillader ikke kontanter at eksistere uden for kortet.

  • VisaCash - betalingskort, der holder styr på kortene på serveren.

  • Proton - en anden form for E-kontanter.

  • MPCOS-EMV - kort til generelle formål, der lader dig implementere din egen type valuta eller token.

Jeg er altid forbløffet over, at et sådant lille stykke plast kunne kræve så meget dokumentationslæsning og kræve så meget viden fra udviklerens side!

Fordi et så højt niveau af ekspertise er nødvendigt med smartkort, er der et marked for udviklere at levere produkter, der er i stand til bønner, der implementerer en lodret standard ved hjælp af den vandrette standard til det marked, du ønsker at sælge til. Dette betyder, at du kan udvikle bønner, der bruger forskellige kombinationer af de vandrette standarder, som OpenCard, til at implementere en bestemt applikation ved hjælp af en anden industristandard til handel eller andre applikationer.

Kommuniker med smartkort fra en Java-applet eller -applikation

Du ved hvad du har brug for for at forbinde al hardware. Nu skal vi forstå, hvordan vi bruger nogle API'er, der giver os mulighed for at sende kommandoer fra en applikation til en læser. (Læseren kommunikerer til gengæld med kortet og fungerer derved som mellemmand inden han sender dataene til kortet.) Smartkortlæseren vrikker de gyldne kontaktpunkter og overfører dataene. Kortet vil gøre noget med dataene og returnere dem til læseren, som derefter returnerer dataene til applikationen. Så hvor er alle disse byte, når de bevæger sig fra din applikation til kortet?

Som nævnt ovenfor kommunikerer applikationen med læseren, som igen taler til smartkortet ved hjælp af de standarder, der er diskuteret ovenfor. Grundlæggende, som chipkortteknologien udviklede sig, blev en smartkortstandard foreslået af ISO. Standarden definerede mekaniske og elektriske egenskaber samt protokollen til kommunikation med kortet. Markører til de relevante ISO-dokumenter er angivet i afsnittet Ressourcer. Desværre kunne ISO-gruppen ikke levere en standard til kommunikation med læseren. Så for at sende en kommando til et kort skal du først finde den kommando, som kortet understøtter, pakke denne kommando i en ISO-kommandopakke og derefter pakke denne nye kommando i den indpakning, der kræves for den pågældende læser. Eksemplet på applikationen her udfører al denne lagdeling for dig.

Applikationsprotokol-dataenheder (APDU'er)

Den grundlæggende udvekslingsenhed med et chipkort er APDU-pakken. Kommandomeddelelsen, der sendes fra applikationslaget, og svarmeddelelsen, der returneres af kortet til applikationslaget, kaldes APDU (Application Protocol Data Units). Kommunikation med kortet og læseren udføres med APDU'er. En APDU kan betragtes som en datapakke, der indeholder en komplet instruktion eller et komplet svar fra et kort. For at give denne funktionalitet har APDU'er en veldefineret struktur, der er defineret i et antal ISO-dokumenter, der hører til 7816-specifikationsfamilien.

APDU'er består af følgende felter:

Kommando APDU-format

CLAINSP1P2LcDataLe

Svar APDU-format

DataSW1SW2

Følgende er nogle af de klasser, der leveres til transport af APDU'er og klassernes funktioner: