SVEUČILIŠTE U ZAGREBU | |
FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA | 0036381850 |
Zavod za elektroniku, mikroelektroniku, računalne i inteligentne sustave | Zagreb, rujan 2004. |
Turistička pametna
kartica
Mentor: Prof. dr. sc. Leo Budin
Sadržaj
2.2. Kako izgledaju pametne kartice?
2.2.1 Kontaktne pametne kartice
2.2.2. Bezkontaktne pametne kartice
2.3. Sigurnosni aspekti pametnih kartica
2.3.1. Sklopovski sigurnosni aspekti pametnih kartica
2.3.2. Programski sigurnosni aspekti pametnih kartica
3.1.1 Java Card stogovni stroj
3.1.2 Java Card izvršna okolina
3.1.3.2. Paket : javacard.framework
3.1.3.3. Paket : javacard.framework.service
3.1.3.4. Paket : javacard.security
3.1.3.5. Paket : javacardx.crypo
4. Primjena turističke pametne kartice
5. Implementacija turističke pametne kartice
5.1. Terminal turističke pametne kartice
5.1.1 Java kriptografska proširenja
5.1.2 Pružatelji Java kriptografskih proširenja
5.2. Applet turističke pametne kartice - kartična aplikacija
5.2.3. Razred : Implementacija
5.2.4. Razred : MojSecurityService
Dodatak - Korištenje turističke pametne kartice
1.1. Prevođenje appleta turističke pametne kartice
1.2. Prevođenje terminala turističke pametne kartice
2.1. Pokretanje appleta turističke pametne kartice
2.2. Pokretanje terminala turističke pametne kartice
Turistička
pametna kartica (dalje u tekstu TPK) je
mikroprocesorska Java pametna kartica (engl. Java Smart Card)
koja je zamišljena kao zamjena za ulaznice, karte, hotelske ključeve
i sve druge stvari koje inače opterećuju turiste kada dođu na odmor. TPK omogućuje jednostavnu uptrebu i vrhunsku sigurnost.
Princip upotrebe je jednostavan: kada turist dođe u hotel, na recepciji
mu se uruči TPK u kojoj se nalazi program (Java Card
Applet, dalje u tekstu applet) za identifikaciju na razini hotela i
elektronički ključ za sobu. Pored već navedenih appleta, može se uprogramirati
i čitav niz drugih appleta, kao na primjer ulaznice za tenis, stolni
tenis, mini golf, bazen, tobogan, ski lift, muzeje, rezervacije karata
za kino i kazalište te mnogi drugi. Sve transakcije se odvijaju prema
strogo određenim pravilima uz upotrebu suvremenih kriptografskih
algoritama kako bi se osigurala što veća razina sigurnosti.
U uvom seminarskom radu
implementirana je TPK koja se sastoji od terminala
koji se izvodi na računalu i Java Card appleta koji se izvodi na samoj
pametnoj kartici. Implementirane funkcije pametne kartice su: provjera
statusa ulaznica/karata, unos novih ulaznica/karata i poništavanje
ulaznica/karata. Postoje ulaznice za bazen, tenis, mini golf, ski lift,
tobogan i karte za muzej, kazalište i kino. Karte za kazalište i
kino predstavljaju rezervacije koje su određene datumom, satom, minutom,
šifrom kazališta/kina i rezerviranim sjedalima. Sve ostale ulaznice i
karte se pamte kao broj kupljenih ulaznica/karata koje se mogu bilo kada
iskoristiti.
Površno se opisuje sama pametna kartica, ali opširno
i detaljno sama implementacija TPK i alati potrebni
za njenu implementaciju.
Pametne kartice su plastične kartice koje imaju ugrađeni silikonski čip. Prve pametne kartice su se pojavile 1984. u Francuskoj, deset godina nakon što je ideja patentirana. Slika 2.1. prikazuje osnovnu podjelu kartica.
Slika 2.1. Osnovna podijela kartica s tipičnim predstavnicima
Od
njihova početka, pametne kartice se koriste u mnoge svrhe kao što su:
telefonske čip kartice, GSM SIM kartice,
kartice za skladištenje podataka itd... Pametne kartice dijelimo na
memorijske i mikroprocesorske.
Memorijske kartice susrećemo svakodnevno u obliku telefonskih čip
kartica, GSM SIM kartica u
današnjim mobilnim telefonima ili kartica u raznim MP3
player-ima i digitanim fotoaparatima.
Pametne
kartice s mikroprocersorom su danas vrlo rijetke i skupe, ali i
najmoćnije te će biti predmet daljnjeg razmatranja.
Pametne kartice su malo računalo bez ulazno izlaznih
naprava. Imaju mikroprocesor, ponekad kriptografski koprocesor, trajnu
memoriju (ROM - engl. Read Only Memory), izbrisljivu memoriju
(EEPROM - engl. Electronically Erasable Programmable ROM) koja
preuzima funkciju tvrdog diska, radnu memoriju (RAM - engl. Random
Access Memory) i standarnizirano sučelje za komunikaciju
s vanjskim svijetom. Mikroprocesorske pametne kartice se danas najviše
koriste u bankarstvu, npr. American Blue kartica (slika 2.4.).
Pametne kartice najčešće dolaze u tri fomata : ID-0 (85.6mm x 54mm x 0.76mm), ID-00 (66mm x 33mm x 0.76mm ) i ID-000 (25mm x 15 mm x 0.76mm). ID-0 (slika 2.5.) je format kreditnih kartica a ID-000 je format GSM SIM kartica. Format ID-0 je najčešći te ga, osim kod kreditnih kartica (slika 2.4.), susrećemo kod osobnih iskaznica (slika 2.6.).
Kontaktne pametne kartice komuniciraju s okolinom putem fizičkog komunikacijskog sučelja koje čini 8-pinski metalni kontakt prema ISO 7816-2 standardu (slika 2.2.).
Slika 2.2. Metalni kontakt pametnih kartica
Kontakti i raspored su prikazani na slici 2.3.
Slika 2.3. Raspored 8-pinskog kontakta pametnih kartica
Kontakti su sljedeći
Vcc – napajanje 3V ili 5V s dozvoljenim odstupanjem od 10%
Vpp – napajanje koje se koristilo kod starijih modela
Ground – referentna naponska razina (najčešće 0V)
Reset – signal za tzv. topli reset (hladni je ponovno umetanje kartice)
Clock – signal vremenskog vođenja
I/O - obostrani (ne istovremeni) prijenos podataka
RFU - engl. Reserved For Future Use – rezervirano
Kontaktne pametne kartice: |
||
|
|
|
Slika 2.4.
American Express “Blue Card” |
Slika 2.5.
Prazna pametna kartica |
Slika 2.6.
Osobna iskazinica
iz Hong-Konga
|
Pristup kontaktnim pametnim karticama se ostvaruje
uređajem za prihvat kartica (engl.
card acceptance device – CAD). Primjer jednog takvog uređaja je
čitač pametnih kartica (slika 2.7.).
Slika 2.7. Čitač pametnih
kartica
Bezkontaktne pametne
kartice nemaju kontakt već imaju skrivenu antenu pomoću koje
komuniciraju s okolinom (slika 2.8.).
Napajanje je ostvareno pomoću baterije ugrađene u karticu ili se
elektromagnetskom indukcijom u anteni inducira sav potreban napon za
njezin rad. Podaci se do CAD uređaja prenose elektromagnetskim valovima.
Bezkontaktne pametne kartice su osjetljivije na
torzije i savijanja od kontaktnih. Također postoji potencijalna
opasnost da se bez znanja vlasnika presretnu podaci ili izvedu neke
kartične transakcije.
Slika 2.8. Troslojna građa bezkontaktne pametne kartice
Sklopovi
pametnih kartica nikad se ne proizvode od standardnih ćelija i često
posjeduju lažne strukture čija je jedina svrha zbunjivanje potencijalnog
napadača. Sabirnice unutar pametne kartice koje povezuju procesor, ROM, EEPROM i RAM
su interne sabirnice, što znači da nikad ne izlaze iz čipa. Time je
onemogućeno direktno priključivanje na linije sabirnice. Kako bi se
spriječilo bezkontaktno prisluškivanje ili interakcija s podacima na
sabirnici, promet preko sabirnica često se kriptira.
Kako je sadržaj ROM-a čitljiv bit po bit uz pomoć
optičkog mikroskopa, u pametnim karticama se koristi specijalni ionski
usađen ROM čiji se sadržaj ne može pročitati niti uz
pomoć ultraljubičaste svjetlosti.
Informacije sakupljene analizom električnog
potencijala aktivnog čipa moguće je iskoristiti u svrhu izvođenja
zaključaka o trenutnom sadržaju RAM-a. Smještanjem
vodljivih metalnih slojeva iznad memorijskih ćelija postiže se da,
ukoliko se ti slojevi uklone (npr. kemijskim urezivanjem), čip postaje
neupotrebljiv. Osim toga prati se njihov električni otpor tako da čip
automatski prestaje s radom ako dođe do oštećenja zaštitnog
sloja. Ispod zaštitnih slojeva nalaze se i fototranzistori koji dodatno
detektiraju njihovo uklanjanje.
Postoji mogućnost čitanja RAM
ćelija bez napajanja, ali to zahtjeva prethodno hlađenje ćelija na
temperaturu ispod –60°C što uzrokuje da sadržaj RAM
ćelija ostaje trajan. Stoga se tajni ključevi ne bi smjeli nepotrebno
držati u RAM-u. Nakon njihovog pohranjivanja u RAM-u treba slijediti brisanje ili prepisivanje
memorije novim vrijednostima.
U pametnim karticama slijed memorijskih lokacija RAM-a nikada nije linearan kao u ostalim računalnim
sustavima. Fizički bliske memorijske ćelije predstavljaju logički
neslijedne lokacije. Zbog toga nije dovoljno znati sam sadržaj
ćelija već je potrebno znanje i o načinu adresiranja. Način adresiranja
može biti unaprijed određen i strogo tajan ili pak programski riješen i
dinamičan.
Pametne kartice nadziru naponsku razinu kako bi
onemogućili DFA (engl. Differential Fault Analysis) napade,
frekvenciju radnog takta koja je dovedena izvana kako bi se onemogućilo
drastično usporavanje rada kartice čime pračenje internih promijena
postaje jednostavnije. Kako bi se onemogućili DPA napadi (engl.
Differential Power Analysis) pametne kartice
potrošnju elektirične energije reguliraju i održavaju stalnom.
S programske strane, pametne kartice također se odlikuju zavidnom razinom sigurnosti. Kao što je opisano u prošlom odlomku, vrlo je teško iz pametne kartice “izvući” korisne informacije, što odmah upućuje na mogućnost prisluškivanja informacija koje kartica prima ili odašilje. Dok su gore navedene sklopovske zaštite implementirane u tvornici i ne mogu se isključiti, programska zaštita najviše ovisi o programeru koji implementira kartične aplikacije. Kao što je već navedeno, mikroprocesorske pametne kartice dijelimo na one s kripto koprocesorom i one bez kripto koprocesora. Kripto koprocesor je sklopovska podrška kriptiranju. Neke pametne kartice podržavaju samo simetrične kripto-algoritme (najčešće DES), bolje kartice podržavaju još i asimetrične (najčešće RSA), a najbolje još i funkcije za izračunavanje sažetka (engl. Digest ili engl. Hash). Ovisno o vrsti kartice postoji standarnizirano programsko sučelje koje omogućuje iskorištavanje implementiranih kripto algoritama. Pametne kartice koje nemaju kripto koprocesor zahtjevaju od programera, koji želi stvoriti sigurni komunikacijski kanal, samostalno programsko implementiranje potrebnih algoritama ili nabavu nekih drugih implementacija. Radi velike ograničenosti memorijskog prostora na pametnim karticama (tipično 32 KiB ROM-a, 16 KiB EEPROM-a i 1 KiB RAM-a), često se ne implementiraju svi potrebni algoritmi čime čitava “besprijekorna” sigurnost pametnih kartica pada u vodu. Zbog toga se, za bilo kakvu ozbiljniju primjenu, pametne kartice bez kripto koprocesora ne upotrebljavaju.
Rastom tržišta pametnih kartica postalo je potrebno “brzo” i “jednostavno” razvijati kartične aplikacije koje bi trebale biti u “duhu” pametnih kartica – sigurne. Jedna tehnologija se nametala kao vrlo pogodna, Java! Java programi se prevode iz izvornog kôda u sklopovski neovisan međukôd, Java Byte kôd. Java Byte kôd se izvodi u virtualnom stogovnom stroju (engl. Java Virtual Machine - JVM). Ideja je bila odrediti podskup Java jezika koji bi se mogao izvršavati na samoj pametnoj kartici. Taj podskup je definiran Java Card platformom.
Java Card platforma sastoji se od tri dijela:
Java Card Virtual Machine (JCVM) - definira podskup programskog jezika Jave i definiciju stogovnog stroja,
Java Card Runtime Enviroment (JCRE) - opisuje Java Card izvršnu okolinu, upravljanje memorijom, appletom i druge izvršne osobine,
Java Card Application Programming Interface (API) - opisuje jezgru i Java pakete i klase potrebne za programiranje kartičnih aplikacija.
Slika 3.1. prikazuje osnovnu hijerarhiju Java Card platforme.
Slika 3.1. Osnovna struktura Java Card platforme
Java Card stogovni stroj podijeljen je na dva dijela:
prvi - koji se ne izvodi na kartici i obavlja vremenski zahtjevnije zadatke kao što su provjera Java byte kôda, povezivanje, optimizacija, učitavanje razreda i slično,
drugi - koji se izvodi na kartici i obavlja samo izvođenje Java byte kôda.
JCVM definira podskup Java programskog jezika po broju i složenosti paketa i po broju podržanih primitivnih tipova (engl. value type) podataka. Nepodržane osobine Jave su:
primitivni tipovi: long, float, double, char, String
višedimenzionalna polja
dinamičko učitavanje razreda
upravitelj sigurnosti (engl. security manager)
dinamičko upravljanje memorijom (engl. finalization i engl. garbage collection)
dretve (engl. threads)
serijalizacija objekata (engl. object serialization)
kloniranje objekata
Jedno od najznačajnijih obilježja Java Card izvršne okoline je da omogućuje neovisnost kartične aplikacije od operacijskog sustava pametne kartice. Sve što je bitno programeru kartične aplikacije je da postoji JCRE koji sadrži JCVM koji će izvoditi njegov applet i preko kojega se uz pomoć dobro definiranog programskog sučelja (API) pristupa sredstvima pametne kartice.
Java Card programsko sučelje definira standarnizirano sučelje za programiranje appleta. Sučelje se sastoji od osnovnih (engl. Core) i dodatnih (engl. Extension)API paketa (engl. Packages). Java Card API inačica 2.2.1 definira pakete navedene u tablici 3.1. i tablici 3.2.
Osnovni paketi |
|
Ime paketa |
Opis paketa |
java.io |
Podskup java.io paketa iz standardnog Java programskog jezika. |
java.lang |
Pruža razrede koji su osnovni za dizajn Java Card podskupa Java programskog jezika. |
java.rmi |
java.rmi paket definira Remote sučelje koje identificira sučelja čije se metode mogu pozvati sa CAD baziranih klijentskih aplikacija. |
javacard.framework |
Pruža osnovni skup razreda i sučelja potrebnih za izgradnju, komunikaciju i rad s Java Card appletima. |
javacard.framework.service |
Pruža osnovni skup razreda i sučelja servisa koji omogućuju Java Card appletima da budu napravljeni kao skup usluga. |
javacard.security |
Pruža razrede i sučelja koja sadrže javno dostupnu funkcionalnost potrebnu za implementaciju osnovnog skupa sigurnosnih i kriptografskih alata za Java Card platformu. |
Tablica 3.1. Osnovni paketi
Standardna proširenja |
|
Ime paketa |
Opis paketa |
javacardx.crypto |
Dodatni paket koji sadži funkcionalnost (koja može biti podložna pravilima izvoza) potrebnu za implementaciju osnovnog skupa sigurnosnih i kriptografskih alata za Java Card platformu. |
Tablica 3.2. Standardna proširenja
java.rmi paket definira Remote sučelje koje identificira sučelja čije se metode mogu pozvati sa CAD baziranih klijentskih aplikacija. Ono je osnova za izgradnju sučelja Sucelje (vidi 5.2.1). Također definira iznimku RemoteException koja može biti postavljena da ukazuje na iznimku nastalu prilikom izvođenja udaljene metode (engl. remote method).
Sučelja |
|
Ime sučelja |
Opis sučelja |
Remote |
Sučelje Remote služi za identifikaciju sučelja čije metode se mogu pozvati sa CAD baziranih klijentskih aplikacija. |
Tablica 3.3. Sučelja java.rmi paketa
Iznimke |
|
Ime iznimke |
Opis iznimke |
RemoteException |
JCRE baca svoj primjerak |
Tablica 3.4. Iznimke java.rmi paketa
Pruža osnovni skup razreda i sučelja potrebnih za izgradnju, komunikaciju i rad s Java Card appletima. Ovaj skup razreda i sučelja pruža minimalnu potrebnu funkcionalnost potrebnu Java Card okruženju. Dodatna funkcionalnost je moguća dodavanjem dodatnog skupa razreda i sučelja.
Najvažniji razredi, sučelja i iznimke ovog paketa prikazani su u tablicama 3.5., 3.6., 3.7.
Najvažnija sučelja |
|
Ime sučelja |
Opis sučelja |
ISO7816 |
Sadrži bitne konstante za rad s ulaznim i izlaznim podacima. |
MultiSelectable |
Sadrži metode koje podržavaju napredne tehnike programiranja s logičkim kanalima. |
Shareable |
Sadrži mehanizam koji omogućuje objektima, koji implementiraju ovo sučelje, da budu dijeljeni preko applet vatrozida ( eng. applet firewall). |
Tablica 3.5. Najvažnija sučelja javacard.framework paketa
Najvažniji razredi |
|
Ime razreda |
Opis razreda |
AID |
Uključuje identifikator aplikacije (eng. Application Identifier - AID) povezanog s appletom. AID je definiran u ISO 7816-5 kao niz veličine od 5 do 16 okteta. JCRE stvara primjerak AID razreda, kako bi identificirao i upravljao svim appletima na kartici. Appleti nemaju potrebu stvaranja primjerka ovog razreda, ali mogu zatražiti i koristiti JCRE-ov primjerak ovog razreda kako bi identificirali sebe ili bilo koji drugi primjerak appleta. JCRE-ovi primjerci AID-a su stalni ulazni objekti JCRE-a (engl. permanent Java Card runtime environment Entry Point Objects) i može im se pristupiti iz bilo kojeg appleta. Kako su ti objekti stalni, reference na ove objekte moguće je spremiti i bilo kada kasnije koristiti. Primjerak appleta može dobiti referencu na JCRE-ov primjerak njegovog AID-a pomoću javacard.framework.JCSystem.getAID() metode, a AID drugog appleta pomoću javacard.framework.JCSystem.lookupAID() metode. |
APDU |
Pruža metode za kontrolu kartičnog ulaza i izlaza. Ovaj razred sadrži mnoge često korištene metode u MojSecurityService razredu (vidi 5.2.4). Detaljan opis dan je u tablici 3.8. |
Applet |
Osnovni razred za sve Java Card appleta (vidi 5.2.2) |
JCSystem |
Pruža metode za kontrolu funkcija sustava kao što su upravitelj transakcijama (engl. transaction management), privremeni objekti (engl. transient objects), mehanizam brisanja objekata (engl. object deletion mechanism), upravitelj sredstvima (engl. resource management) i među-appletno dijeljenje objekata. |
Util |
Pruža metode za rad s poljima. |
Tablica 3.6. Najvažniji razredi javacard.framework paketa
Najvažnije iznimke |
|
Ime iznimke |
Opis iznimke |
CardException, CardRuntimeException |
Pružaju funkcionalnost sličnu onoj koju pružaju ekvivalentne iznimke u java.lang paketu u standardnom Java programskom jeziku, ali specijalizirane su za rad u kartičnom okruženju. |
Tablica 3.7. Najvažnije iznimke javacard.framework paketa
Češće korištene metode |
|
Povratna vrijednost |
Ime i opis metode |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tablica 3.8. Češće korištene metode javacard.framework.APDU razreda
Paket pruža osnovni skup razreda i
sučelja servisa koji
omogućuju Java Card appletima da budu napravljeni kao skup
servisa. Paket sadrži agregatorski razred (engl. aggregator class)
zvan Dispatcher koji
sadrži metode za dodavanje servisa u svoj registar servisa, odašiljanje
APDU naredbi registriranim servisima i metode za uklanjanje servisa iz registra.
Paket sadrži i sučelje Service koje definira metode za
odradu APDU naredbi i omogućuje odašiljatelju da bude svjestan više
mogućih servisa. Podsučelja omogućuju implementaciju servisa s dodatnom
funkcionalnošću, kao što su:
RemoteService - koristi se pri definiranju servisa koji udaljenim procesima dozvoljavaju pristup servisima na kartici (ovo sučelje je implementirano u AppletTPK razredu - vidi 5.2.2.),
SecurityService - definira servise koji pružaju metode koje ispituju trenutno stanje sigurnosti (ovo sučelje je implementirano u MojSecurityService razredu - vidi 5.2.4.) .
Razred BasicService pruža osnovne funkcionalnosti servisa kao i inicijalnu implementaciju metoda definiranih u Service sučelju.
Razredi CardRemoteObject i RMIService omogućuju klijentskom programu da poziva i izvršava metode na kartici. Ove klase sadrže minimalnu potrebnu funkcionalnost da implementiraju RMI (engl. Remote Method Invocation) za Java Card platformu.
Pruža razrede i sučelja koja sadrže javno dostupnu funkcionalnost potrebnu za implementaciju osnovnog skupa sigurnosnih i kriptografskih alata za Java Card platformu. Razredi u paketu javacard.security pružaju definiciju algoritama koji vrše sigurnosne i kriptografske funkcije kao što su:
implementacija za razne kriptografske ključeve (AES, DES,DSA, EC, RSA),
mogućnost
generiranja (razred KeyBuilder
)
mnogih ključeva (AES/128/192/256, DES/64,
DES3/128/192, DSA/512/768/1024,
EC/112/113/128/131/160/163/192/193,
RSA/512/736/768/896/1024/1280/1536/1984/2048),
izračunavanje
kriptografskog sažetka (razred MessageDigest
)
pomoću nekoliko algoritama (MD5, RIPEMD, SHA),
generiranje
slučajnih brojeva (razred RandomData
),
digitalno
potpisivanje (razred Signature
)
pomoću cijelog niza kombinacija algoritama (AES/MAC/128,
DES/MAC4, DES/MAC8, DSA/SHA
,ECDSA/SHA, RSA/MD5, RSA/MD5, RSA/RIPEMD160, RSA/SHA),
sjednička razmjena ključeva (razred KeyAgreement
) pomoću
Diffie-Hellman ili EC Diffie-Hellman [IEEE P1363] protokola.
Dodatni paket koji sadrži funkcionalnost, koja može biti podložna pravilima izvoza, potrebnu za implementaciju osnovnog skupa sigurnosnih i kriptografskih alata za Java Card platformu. Razredi koji sadrže sigurnosnu i kriptografsku funkcionalnost, a nisu podložni pravilima izvoza nalaze se u paketu javacard.security. Paket javacardx.crypto sadrži razred Cipher i sučelje KeyEncryption. Razred Cipher pruža metode za kriptiranje i dekriptiranje poruka.
Sučelja |
|
Ime sučelja |
Opis sučelja |
KeyEncryption |
|
Tablica 3.9. Sučelja javacardx.crypto paketa
Razredi |
|
Ime razreda |
Opis razreda |
Cipher |
Razred |
Tablica 3.10. Razredi javacardx.crypto paketa
TPK je zamišljena kao zamjena za ulaznice i karte. TPK ne traži od krajnjeg korisnika nikakvo informatičko znanje, a od pružatelja turističkih usluga samo elementarno znanje rada s računalom u grafičkom korisničkom sučelju. Uz pomoć TPK turist ima na jednom mjestu sve što mu je potrebno za njegov turistički doživljaj. Uz pomoć džepnog čitača pametnih kartica turist može u svakom trenutku saznati koje sve karte/ulaznice ima na raspolaganju. Ukoliko pružatelj ne može/ne želi svojim gostima davati džepne čitače uvjek postoji mogućnost postavljanja nekoliko računalnih terminala, npr. u predvorje hotela, preko kojih će gosti moći doći to traženih informacija.
Implementacija TPK se sastoji od Java aplikacije koja se izvršava unutar JVM-a na računalu koju nazivamo “Terminal turističke pametne kartice” (dalje u tekstu T-TPK) i Java Card appleta koji se izvodi na JCVM-u koje nazivamo “Applet turističke pametne kartice” (dalje u tekstu A-TPK).
Terminal TPK je GUI aplikacija pisana u programskom jeziku Java što je čini vrlo prenosivom. T-TPK će raditi na svakom operacijskom sustavu koji ima instaliran JVM koji podržava Java kriptografska proširenja (engl. JavaTM Cryptography Extension - JCE) i ima registrirane “The Legion Of The Bouncy Castle” (http://www.bouncycastle.org) kripto pakete koji implementiraju JCE.
JCE je podložan izvoznim pravilima SAD-a (Sjedinjene Američke Države). U Javi 1.4 postoji “jaka” ali ograničena kriptografska podrška koja, za razliku od prošlih verzija Jave, ima dinamičku politiku. Dinamička politika znači da više nema nekoliko izdanja Jave ovisno o mjestu prebivališta već jedna jedinstvena, koja ovisno o “java.policy” datoteci, pruža više ili manje kriptografskih algoritama. Kako bi se mogli koristiti svi kriptografski algoritmi koji su navedeni u Java specifikaciji ( vidi [2] ), potrebno je s http://java.sun.com/products/jce/index-14.html skinuti “policy” datoteke s neograničenom jačinom (engl. unlimited strength). Prema Java specifikaciji postoji samo niz apstraktnih razreda (engl. abstract class) i sučelja (engl. interface) koji omogućuju rad s kriptografskim algoritmima, ali ne i samu implementaciju. Implementacija kriptografskih algoritama prepuštena je drugim tzv. “pružateljima Java kriptografskih proširenja” (engl. JavaTM Cryptography Extension Provider – JCE Provider). Termin “JCE Provider” koristi se i kao ime niza paketa koji implementiraju JCE.
Postoje mnogi pružatelji JCE-a. Između ostalog i sama tvrtka Sun. Sun s Javom daje svoj JCE Provider – SunJCE. SunJCE je besplatan i dolazi inicijalno s Javom 2 SDK inačica 1.4, ali podržava relativno malo kripto algoritama. Zato se u T-TPK koristi jedan drugi besplatan JCE Provider - “The Legion Of The Bouncy Castle” koji pruža sve potrebno za implementaciju sigurne komunikacije.
A-TPK je Java Card applet koji se instalira u EEPROM pametne kartice gdje ostaje dok ga se eksplicitno ne izbriše. Svaki applet ima svoj vlastiti AID (engl. Application IDentifier) prema kojem ga razlikujemo od ostali instaliranih appleta.
AID A-TPK je : 0xa0 0x00 0x00 0x00 0x62 0x03 0x01 0x0c 0x08 0x01. Applet omogućuje tri osnovne operacije :
provjera statusa željenih ulaznica ili karata,
unos novi ulaznica/karata,
poništavanje prethodno unesenih ulaznica/karata.
TPK je poslužiteljsko-klijentski orijentiran sustav. Terminal TPK preuzima ulogu poslužitelja, tj. počinje i završava sve transakcije. Applet preuzima ulogu klijenta koji pozorno sluša i izvršava zahtjeve terminala. Komunikacija između terminala i appleta odvija se preko APDU (engl. Application Protocol Data Unit) paketa prema ISO/IEC 7816-4 standardu. Sama implementacija Appleta TPK je smještena u paket TuristickaPametnaKartica. Paket TuristickaPametnaKartica sastoji se od sljedećih komponenata:
Sučelja |
|
Ime sučelja |
Opis sučelja |
Zajedničko sučelje za terminal i applet koje definira niz konstanti i tri osnovne metode za rad s appletom. |
Tablica 5.1. Sučelja paketa TuristickaPametnaKartica
Razredi |
|
Ime razreda |
Opis razreda |
Osnovni razred u kojem se stvara primjerak sigurnosnog servisa za pristup appletu, primjerak same implementacije funkcionalnosti appleta TPK, primjerak razreda za udaljeni pristup kartičnim metodama (RMI) te registrira i instalira sam applet. |
|
Implementacija udaljenih metoda TPK. |
|
Servis koji pruža provjeru konzistentonsti, tajnost, neporecivost i integritet podataka. |
Tablica 5.2. Razredi paketa TuristickaPametnaKartica
Sučelje Sucelje je osnovo sučelje (engl. interface) koje se koristi u terminalu i appletu. Ono definira osnovni skup konstanti koje su potrebne za normalan rad TPK i međusobno razumijevanja terminala i aplikacije. Sucelje proširuje java.rmi.Remote sučelje, a implementira ga razred Implementacija. Definira metode opisane u tablici 5.3.
Metode definirane u sučelju Sucelje |
|
Prototip metode |
Opis metode |
public byte[] provjeriStatus(byte CLA) |
|
public void ponisti(byte[]niz, byte CLA) |
|
public void unesi(byte[]niz, byte CLA) |
|
Tablica 5.3. Metode definirane u sučelju Sucelje
Razred AppletTPK je osnovni applet razred u kojem se stvara primjerak (engl. instance) sigurnosnog servisa za pristup appletu, primjerak same implementacije funkcionalnosti appleta TPK, primjerak razreda za udaljeni pristup kartičnim metodama (RMI) te registrira i instalira sam applet. AppletTPK je središnji objekt kartične aplikacije. U samom razredu nije definiran AID, već je definiran u posebnoj datoteci namjenjenoj converter programu koji prevodi Java class datoteke u export datoteku (*.exp), CAP (engl. Converted APplet) datoteku (*.cap) i Java Card Assembly datoteku (*.jca). CAP datoteka je u JAR formatu i sadrži pokretljivu binarnu reprezentaciju Java class datoteka Java paketa. CAP datoteka također sadrži proglasnu (engl. manifest) datoteku koja pruža ljudski čitljivu informaciju o sadržaju paketa. Sadržaj Java Card Assembly datoteka je namjenjen kao pomoć programerima pri boljem razumijevanju Java Card strojnog jezika i kao vodič pri razumijevanju ispisa converter programa. Hijerarhija nasljeđivanja kojom je nastao razred AppletTPK je prikazana slikom 5.1.
java.lang.Object
|
+--javacard.framework.Applet
|
+--TuristickaPametnaKartica.AppletTPK
Slika 5.1. Hijerarhija nasljeđivanja
Razred AppletTPK nasljeđuje (engl. inherit) razred javacard.framework.Applet. Ovaj razred je apstraktan razred kojeg definira Java Card applet (engl. Java Card technology-based applet). Svaki applet koji se namjerava staviti, instalirati i pokrenuti na Java Card kompatibilnojpametnoj kartici (engl. Java Card technology-compliant smart card ) mora proširiti razred Applet. Razred Applet definira jednu metodu (public abstract void process(APDUapdu)) i implementira sedam od kojih je jedna statička. Metode su objašnjene u tablici 5.4.
Metode razreda Applet |
|
Povratna vrijednost |
Ime i opis metode |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Tablica 5.4. Metode razreda Applet
U razredu AppletTPK postoji konstruktor :
Konstruktor |
|
Definirane su sljedeće metode:
Metode AppletTPK razredu. |
|
Prototip metode |
Opis metode |
public static void install(byte[] bArray, short bOffset, byte bLength) |
|
public void process(javacard.framework.APDU apdu) |
|
Tablica 5.5. Metode AppletTPK razreda
Razred Implementacija je kao što mu ime govori implementacija svih funkcija koje TPK pruža. Funkcije su: provjera statusa ulaznica/karata, unos novih ulaznica/karata i poništavanje ulaznica/karata. Metode koje implementiraju ove funkcije prvo provjere da li je korisnik autoriziran za traženu funkciju, ako ne, izazovu sljedeću iznimku: javacard.framework.UserException s navedenim razlogom: ZAHTJEV_ODBIJEN. Provjera da li je korisnik autoriziran za određenu funkciju se vrši na temelju primljenog PIN-a. TPK razlikuje dva PIN-a, korisnički PIN i PIN izdavača kartice. Korisnički PIN omogućuje pregledavanje sadržaja TPK, dok PIN izdavača omogućuje pregledavanje, unos i brisanje podataka. U slučaju da je digitalni potpis poslanih kriptiranih podataka ili zaštitna suma neispravna, izaziva se ista iznimka, ali se kao razlog navodi KORUPTIRANI_PODACI.
ZAHTJEV_ODBIJEN i KORUPTIRANI_PODACI su konstante definirane u sučelju TuristickaPametnaKartica.Sucelje.
Razred MojSecurityService nasljeđuje razred javacard.framework.service.BasicService te implementira (engl. implements) sučelje javacard.framework.service.SecurityService. Ovaj razred predstavlja servis koji pruža provjeru dosljednost, tajnost, neporecivost i integritet podataka.
Dosljednost
Dosljednost podataka je postignuta s jednostavnom 16-bitnom zaštitnom sumom podataka ( engl. checksum ). Zaštitna suma je običan 16-bitni cijeli broj prikazan u dvojnom komplementu (dalje u tekstu 2'k) (engl. short) koji se računa prilikom svakog slanja i primanja APDU paketa. Prilikom slanja zaštitna suma se računa i dodaje na podatkovni blok okteta. Veličina podatkovnog bloka određena LC oktetom unutar APDU zaglavlja poveća se za dva (broj predstavlja broj okteta koji određuju podatkovni blok). Prilikom primanja APDU paketa ponovno se računa zaštitna suma, ali ovaj put od samo LC-2 okteta, jer su zadnja dva primljena zaštitna suma. Nakon što se izračuna, uspoređuje se s primljenim. Ukoliko se ne poklapaju znači da je došlo do pogreške u prijenosu. Zaštitna suma se računa prema vrlo jednostavnom algoritmu:
checksum = 0;
for (short i = 0; i < (short) (LC-2); ++i) {
checksum += podaci[i] & 0x00FF;
}
Bitovni “i” ('&' - Booleov operator disjunkcije nad svim bitovima pojedinačno) nije nužno potreban, ali sprečava sljedeće :
kako je '&' definiran samo nad tipom integer (u Java Card Platformi nad short) svi operandi ove binarne računske operacije se pretvaraju u 16-bitne 2'k brojeve, predznačno proširujući prema potrebi. To može inače pozitivne brojeve u 2'k pretvoriti u negativne. Ovo ponašanje nije presudno za običnu sumu podataka, ali znatno utječe na sve usporedbe 8-bitnih i 16-bitnih 2'k brojeva. Ovo ponašanje Jave se ne može lako izbijeći jer Java nema ugrađene brojeve bez predznaka (engl. unsigned) brojeve.
Tajnost
Tajnost u TPK je postignuta kriptiranjem asimetričnim blok orijentiranim kriptografskim algoritmom RSA. U TPK se koristi kriptiranje s RSA kripto algoritmom u kojem se koriste 512-bitni ključevi i PKCS#1 (v1.5) shema nadopune (engl. padding). Razlog za odabir 512-bitnih ključeva je vrlo jednostavan. Jedini je podržan sa strane Java Card simulatora/emulatora. Javni i privatni RSA ključevi terminala su unaprijed generirani i konstantni. Javni RSA ključ terminala je ugrađen (engl. hard coded) u applet. RSA ključevi appleta se generiraju prilikom stavaranje primjerka samog appleta, tj. prilikom instalacije appleta na pametnu karticu. Prilikom uspostave veze terminala s karticom, terminal daje zahtjev kartici da pošalje svoj javni ključ. Nakon prenošenja ključa upostavlja se sigurni komunikacijski kanal koje se koristi do kraja sjednice (engl. session).
Neporecivost i integritet podataka
Neporecivost i integritet podataka se postiže digitalni potpisom (engl. digital signature – kriptirani kriptografski sažetak originalne poruke s privatnim ključem pošiljatelja). Kao algoritam za izračunavanje kriptografskog sažetka koristi se SHA-1 (engl. Secure Hash Algorithm) sa sažetkom duljine 20 okteta (160-bita) - opet jedini podržan sa strane Java Card simulatora/emulatora. Digitalni potpis se izračunava prilikom svakog slanja i primanja APDU naredbe, slično kao i zaštitna suma. Ukoliko sažetak dobiven dekriptiranjem digitalnog potpisa ne odgovara izračunatom iz dekriptiranih primljenih podataka, terminalu se vraća poruka o izazvanoj iznimci javacard.framework.UserException s navedenim razlogom : KORUPTIRANI_PODACI.
Hijerarhija nasljeđivanja kojom je nastao razred MojSecurityService je prikazana slikom 5.2.
java.lang.Object
|
+--javacard.framework.service.BasicService
|
+--TuristickaPametnaKartica.MojSecurityService
Slika 5.2. Hijerarhija nasljeđivanja
U razredu MojSecurityService definiran je sljedeći konstruktor:
Detalji o konstruktoru |
|
Prototip konstruktora |
Opis konstruktora |
public MojSecurityService() |
|
Tablica 5.6 Konstruktor MojSecurityService razreda
Razred sadrži sljedeće metode:
Detalji o metodama |
processDataIn
public boolean processDataIn(javacard.framework.APDU apdu)
processDataIn
u sučelju javacard.framework.service.Service
processDataIn
u razredu
javacard.framework.service.BasicService
preprocesirajAPDU
public boolean preprocesirajAPDU(javacard.framework.APDU apdu)
provjeriMakniChecksum
public boolean provjeriMakniChecksum(javacard.framework.APDU apdu)
processCommand
public boolean processCommand(javacard.framework.APDU apdu)
processCommand
u sučelju
javacard.framework.service.Service
processCommand
u razredu
javacard.framework.service.BasicService
processDataOut
public boolean processDataOut(javacard.framework.APDU apdu)
processDataOut u sučelju
javacard.framework.service.Service
processDataOut u razredu
javacard.framework.service.BasicService
isZahtjevZaKljucem
public boolean isZahtjevZaKljucem(javacard.framework.APDU apdu)
isAutentificirano
public boolean isAutentificirano(javacard.framework.APDU apdu)
isCommandSecure
public boolean isCommandSecure(byte svojstva)
throws javacard.framework.service.ServiceException
isCommandSecure u sučelju
javacard.framework.service.SecurityService
javacard.framework.service.ServiceException
isChannelSecure
public boolean isChannelSecure(bytesvojstva)
isChannelSecure u sučelju
javacard.framework.service.SecurityService
isAuthenticated
public boolean isAuthenticated(short razina)
throws javacard.framework.service.ServiceException
isAuthenticated u sučelju
javacard.framework.service.SecurityService
Ovaj seminarski rad pokazuje kako je Java Card
platforma vrlo jaka i pogodna za implementaciju raznih i sigurnih
kartičnih aplikacija. Nažalost, punu jačinu Java Card platforme nije
bilo moguće iskusiti jer Java pametna kartica nije bila dostupna, već
samo emulator. Emulator čini dobro okruženje za testiranje novih
aplikacija unatoč činjenici da su njegove kriptografske mogućnosti vrlo
ograničene. RSA ključevi u ovom radu su veličine 512 bita što je ispod
svake preporuke (tipična preporuka 2048 ili 4096). Kriptografski SHA-1
sažetak je veličine 20 okteta (160 bita) također ispod svake preporuke
(tipična preporuka je 256 bita). Koliko god je razina sigurnosti ispod
svih preporuka, za TPK ključevi i sažetak su dovoljno
veliki. Ključevi i sažetak bi se mogli jednostavno povećati ukoliko se
za to pokaže potreba.
Pri razvijanju kartičnih aplikacija najteži dio
implementacije je svakako implementacija sigurnosnih servisa jer oni
rade s karticom na razini ADPU naredbi (ekvivalent mrežnom, trećem, OSI
RM sloju). Osim niže razine problemi nastaju u sinkronizaciji rada
kriptografskih algoritama na terminalu i kartici. Potrebno je uskladiti
načine kriptiranja kao i nadopune poruka prilikom kriptiranja. Nakon
uspješne implementacije sigurnosnih servisa stvar postaje vrlo lagana -
koristi se RMI. RMI omogućuje programeru da piše program skoro kao da ga
piše za osobno računalo: metoda koja poziva drugu metodu. Ovo je Java-in
ekvivalent RPC-a (engl. Remote Procedure Call) koji počiva na
petom, sjedničkom, OSI RM sloju. Jedino ograničenje u odnosu na pravu
Java aplikaciju je činjenica da Java Card platforma definira podskup
Jave i time nešto otežava korištenje te smanjuje mogućnost razmjene
podataka između metoda. Kako raste tržište pametnih kartica tako će
rasti i mogućnosti čipova koji se ugrađuju u pametne kartice te je za
očekivati da će u bliskoj budućnosti pametne kartice biti moćne kao
današnja ručna računala (PDA - engl. Personal Digital Assistant).
“Development Kit User's Guide for the Binary Release with Cryptography Extensions”, Java CardTM Platform, Version 2.2.1, October, 2003, http://java.sun.com/products/javacard/dev_kit.html
“Specification of Java Card v2.2.1 API”, Java Card 2.2.1 Development Kit
“Application Programming Notes”, Java CardTM Platform, Version 2.2.1, October, 2003, Java Card 2.2.1 Development Kit
“ISO/IEC 7816 Part 4: Interindustry command for interchange”, http://www.ttfn.net/techno/smartcards/iso7816_4.html
“JavaTM 2 Platform, Standard Edition, v 1.4.2 API Specification”, “Java 2 Platform, Standard Edition, v 1.4.2 Software Development Kit (SDK)”, http://java.sun.com/j2se/1.4.2/download.html
“ JavaTM Cryptography Extension Reference Guide for the JavaTM 2 SDK, Standard Edition, v 1.4”, “Java 2 Platform, Standard Edition, v 1.4.2 SDK”
Renato Barta, “Java Card Tehnologija”, seminarski rad http://sigurnost.zemris.fer.hr/pk/2002_barta/javacard.htm
Renato Barta “Sigurnosni mehanizmi pametne kartice”, seminarski rad http://sigurnost.zemris.fer.hr/pk/2002_barta/mehanizmi.htm
Nakić-Alfirević, T. , “Digitalni Fort Konx za vaš novac”, VIDI, kolovoz-rujan 2004; Vol. str.74-75
Prevođenje A-TPK sastoji se od niza jednostavnih koraka:
prevođenje izvornog kôda, *.java datoteke, u Java Byte kôd, *.class datoteke pomoću Java prevoditelja (javac),
pretvaranje Java class datoteka u export datoteku (*.exp), CAP (engl. Converted APplet) datoteku (*.cap) i Java Card Assembly datoteku (*.jca) pomoću converter programa,
generiranje script (*.scr) datoteke za apdutool program na temelju (*.cap) datoteke pomoću scriptgen programa,
stvaranje krnje (engl. stub) class datoteke razreda Implementacijaza potrebe RMI-a pomoću Java stub generatora (rmic),
stvaranje EEPROM slike (engl. image) za pametnu karticu pomoću apdutool i cref (engl. Java Card Reference Implementation Simulator) programa.
Da bi prvi korak bio uspješan Java prevoditelj mora moći pristupiti dvjema JAR datotekama iz Java Card Development Kit-a api.jar i javacardframework.jar.
Java prevoditelj i Java stub generator dolaze s Java SDK-om, a converter, apdutool, scriptgen i cref dolaze s Java Card Development Kit-om.
Prevođenje T-TPK ne razlikuje se od prevođenja ostalih Java aplikacija. Da bi prevođenje bilo uspješno Java prevoditelj treba moći pristupiti sljedećim JAR datotekama :
base-core.jar i base-opt.jar koji su dio OCF-a (engl. Open Card Framework),
javacardframework.jar i jcrmiclientframework.jar koji su dio Java Card Development Kit-a,
generiranim krnjim (engl.stub) class datotekama,
bcprov-jdk*-*.jar koji dolazi s razredima pružatelja Java kriptografskih proširenja “The Legion Of The Bouncy Castle” .
A-TPK se može pokrenuti na fizičkoj Java pametnoj kartici ili u simulatoru Java pametne kartice (cref). Za pokretanje u simulatoru potrebna je EEPROM slika i cref program. Može se pokrenuti na sljedećom naredbom :
cref -i “ime.EEPROM.slike”
Za pokretanje T-TPK potreban je JVM (dolazi s Jave RE i Java SDK). Pokretanje se izvršava pomoću java programa naredbom
java “Terminal”
Da bi JVM mogao bez greške izvršavati T-TPK mora moći pristupiti sljedećim JAR datotekama: base-core.jar, base-opt.jar, jcrmiclientframework.jar, javacardframework.jar, apduio.jar, generiranim krnjim class datetekama te naravno class datotekama T-TPK-a i uobičajenim Java JAR datotekama. Ovo se postiže postavljanjem ispravnog CLASSPATH-a koji pokazuje putanju do svih navedenih JAR datoteka ili eksplicitnim naveđenjem CLASSPATH-a pri pozivanju java programa (java -classpath ..... “Terminal”).
AES : Advanced Encription Standard, tj. Rijndael – simetrični blok kripto-algoritam
DES : Data Encription Standard – simetrični blok kripto-algoritam
DES3 : Triple DES
EEPROM : Electronically Erasable Programmable ROM
Java Byte kôd : sklopovski neovisan međukôd specifičan za Javu
JCAPI : Java Card API
KiB : Kibi Byte, 1024 okteta, prema CEI/IEC 60027-2 ,siječanj 1999.
MP3 : MPEG 1 sloj 3
OSI RM : Open System Interconnection (Basic) Reference Model
RACE : Research and Development in Advanced Communications Technologies in Europe
RIPEMD : RACE Integrity Primitives Evaluation Message Digest
RSA : Rivest, Shamir, Adleman – asimetrični blok kripto algoritam
SHA-1 : Secure Hash Algorithm – funkcija za izračunavanje kriptografskog sažetka