74
SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA DIPLOMSKI RAD br. 1446 RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICE Maja Rus Zagreb, rujan 2004.

RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

  • Upload
    others

  • View
    13

  • Download
    4

Embed Size (px)

Citation preview

Page 1: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

SVEUČILIŠTE U ZAGREBU FAKULTET ELEKTROTEHNIKE I RAČUNARSTVA

DIPLOMSKI RAD br. 1446

RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICE

Maja Rus

Zagreb, rujan 2004.

Page 2: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

SADRŽAJ 1. UVOD ________________________________________________________________________1 2. BASICCARD __________________________________________________________________2

2.1 RAZVOJNO OKRUŽENJE PAMETNIH KARTICA TIPA BASICCARD _______________2 2.1 PAMETNA KARTICA (SMART CARD) ________________________________________3 2.2 SVOJSTVA BASICCARD-A ___________________________________________________5 2.3 IZGLED PROGRAMA ZA BASICCARD _________________________________________6

2.3.1 INICIJALIZACIJSKI KÔD _________________________________________________6 2.3.2 DEFINICIJE PROCEDURA ________________________________________________6 2.3.3 DEFINICIJE DATOTEKA _________________________________________________7

3. TERMINAL ___________________________________________________________________8 3.1 IZGLED TERMINAL PROGRAMA ____________________________________________8 3.2 API NAREDBE_____________________________________________________________9

3.2.1. BasicCard C-API ________________________________________________________9 3.2.2. PRIMJER KORIŠTENJA ZCCRI ___________________________________________10 3.2.2. PRIMJER KORIŠTENJA ZCBCI ___________________________________________11 3.2.2. POZIV KORISNIČKI DEFINIRANE NAREDBE KORIŠTENJEM ZCBCI ___________11

4. PROGRAMSKI JEZIK ZC-BASIC_______________________________________________13 4.1 ERROR HANDLING _______________________________________________________13 4.2 POSEBNOSTI BASICCARD PROGRAMA _____________________________________13

4.2.1 ATR (Answer To Reset) ___________________________________________________13 4.2.2 APPLICATION ID_______________________________________________________14 4.2.3 KRIPTIRANJE (“uključivanje / isključivanje”) ________________________________14 4.2.4 ZAHTIJEVANJE VIŠE VREMENA OD TERMINALA ___________________________14 4.2.5 UNAPRIJED DEFINIRANE (PRE-DEFINED) VARIJABLE ______________________15

4.3 POSEBNOSTI TERMNAL PROGRAMA _____________________________________16 4.3.1 KOMUNIKACIJA _______________________________________________________16 4.3.2 PC/SC FUNKCIJE ______________________________________________________17 4.3.3 I/O LOGGING__________________________________________________________17 4.3.4 AUTOMATSKO KRIPTIRANJE ____________________________________________17 4.3.5 ČEKANJE NA ODGOVOR KARTICE _______________________________________18 4.3.6 UNAPRIJED DEFINIRANE (PRE-DEFINED) VARIJABLE ______________________18

5. KOMUNIKACIJA_____________________________________________________________19 5.1. ODGOVOR NA RESETIRANJE (ANSWER TO RESET - ATR) _____________________20 5.2. NAREDBE I ODGOVORI (COMMANDS AND RESPONSES) ________________________21

5.2.1 APDU (application protocol data unit) NAREDBE _____________________________21 5.2.2. APDU (application protocol data unit) ODGOVORA ___________________________22

5.3. T=0 PROTOKOL__________________________________________________________22 5.3.1. DOLAZEĆI PRIJENOS PODATAKA (incoming data transfer)____________________24 5.3.2. ODLAZEĆI PRIJENOS PODATAKA (outgoing data transfer) ____________________25 5.3.3. PRIJENOS APDU-a T=0 PROTOKOLOM ___________________________________25

5.4. T=1 PROTOKOL__________________________________________________________27 5.4.1. PRIJENOS APDU-a T=1 PROTOKOLOM ___________________________________27 5.4.2. STRUKTURA I-BLOKA __________________________________________________29 5.4.3. WTX ZAHTJEV ________________________________________________________29

5.5. STATUSNI BAJTOVI SW1 I SW2 ___________________________________________30 5.6. UNAPRIJED DEFINIRANE (PRE-DEFINED) NEREDBE _______________________31 5.7. PRIMJER PROGRAMA KOJI ISPISUJE INFORMACIJE O KARTICI U ČITAČU ___32

6. PLUG-IN LIBRARIES _________________________________________________________36 6.2. RSA: THE RIVEST-SHAMIR-ADLEMAN LIBRARY__________________________________36

Page 3: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

6.1.1. OSNOVE ALGORITMA RSA ______________________________________________36 6.1.2. IMPLEMENTACIJA_____________________________________________________37

6.2 AES: ADVANCED ENCRYPTION STANDARD LIBRARY ______________________________38 6.2.1. OPIS ALGORITMA _____________________________________________________38

6.3. EC: ELLIPTIC CURVE _______________________________________________________44 6.4. SHA–1: THE SECURE HASH ALGORITHM LIBRARY _______________________________48

6.4.1. OPIS ALGORITMA _____________________________________________________48 6.4.2. IMPLEMENTACIJA_____________________________________________________50

6.5. IDEA: INTERNATIONAL DATA ENCRYPTION ALGORITHM ___________________________51 6.5.1. OPIS ALGORITMA _____________________________________________________52 6.5.2. IMPLEMENTACIJA_____________________________________________________53

7. UGRAĐENI ALGORITMI ZA KRIPTIRANJE ____________________________________54 7.1. DES_____________________________________________________________________54 TABLICE KOJE ALGORITAM KORISTI OVDJE NISU NAVEDENE ALI SE MOGU NAĆI NA WEB ADRESI NAVEDENOJ U LITERATURI [6]. ____________________________________________________57 7.2. TRIPLE DES _____________________________________________________________57 7.3. SG-LSFR ________________________________________________________________58 7.4. PRIMJER ________________________________________________________________60

8. AUTENTIFIKACIJA __________________________________________________________61 9. PRIMJER APLIKACIJE – XICA ________________________________________________63

9.1. PRIMJER UPORABE ČITAČA-PRIVJESKA (BALANCE READER) _____________65 9.1.1. PRIMJER - PRIKAZ PREOSTALOG IZNOSA ZA SUBVENCIJU NA Xici ___________66

10. TEHNIČKI OPIS_____________________________________________________________68 11. ZAKLJUČAK _______________________________________________________________70 12. LITERATURA_______________________________________________________________71

Page 4: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

1

1. UVOD Kao što je slučaj sa cijenom kompjutorske opreme danas, tako i cijena

pametnih kartica sve više opada dok su njezine performanse i kapacitet u stalnom porastu. Danas je moguće kupiti potpuno funkcionalno računalo veličine nokta za svega nekoliko eura. Prije pojave kartica tipa BasicCard, cijena razvoja programske opreme za pametne kartice bila je puno veća u odnosu na cijenu sklopovske opreme. Naime, tipičan razvojni projekt mogao je trajati oko šest mjeseci i koštati oko četvrt milijuna dolara, što je ujedno bila i najveća zapreka njihovoj popularizaciji.

1996. godine njemačka tvrtka ZeitControl izdala je karticu koja sadrži operacijski sustav s interpreterom za programski jezik Basic, koji je, uz Java Card i MultiOs, jedan od rijetkih operacijskih sustava koji omogućavaju korisniku jednostavno prenošenje izvršnog kôda na karticu.

Postupak za generiranje prenosivog kôda za kartice tipa BasicCard zasniva se na klasičnom Basic interpreteru. Basic kôd se prevodi u P-Code koji se potom zapisuje na karticu.

S obzirom na tipove podataka, te deklaraciju funkcija i procedura ZC-Basic, inačica programskog jezika Basic kojeg podržavaju pametne kartice tipa BasicCard skoro da se i ne razlikuje od danas popularnih programskih jezika.

Sve kartice tipa BasicCard podržavaju T=1 prijenosni protokol, dok neke verzije podržavaju i T=0 protokol. Također postoje već ugrađeni algoritmi za kriptiranje kao što su DES, AES, RSA, IDEA, 3DES itd.

Pojavom kartica tipa BasicCard postalo je moguće “isprogramirati” pametnu karticu u jedno popodne, a još k tome programiranje ne zahtijeva veliko predznanje. Svatko tko se zna služiti programskim jezikom Basic može implementirati aplikaciju za pametne kartice.

Uporabom ZeitControl-ovog BasicCard-a, razvojni ciklus (pisanje kôda, testiranje) bitno se skratio.

Page 5: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

2

2. BasicCard

2.1 RAZVOJNO OKRUŽENJE PAMETNIH KARTICA TIPA BasicCard

ZeitControl-ovu BasicCard porodicu čine: Compact BasicCard,

Enhanced BasicCard, te Professional BasicCard. BasicCard obično sadrži 256-1024 bajta RAM-a i 1-30 kB EEPROM-a. EEPROM sadrži korisnički Basic kôd preveden u P-Code (virtual machine language). Programski jezik Java koristi isti princip. U EEPROM korisnik može smjestiti različite podatke, bilo kao Basic varijable ili kao datoteke u BasicCard datotečnom sustavu. RAM sadrži run-time podatke i P-Code stog.

Compact BasicCard, najmanja kartica iz porodice, ima 1kB EEPROM-a. Pitanje je koliko se Basic kôda može u takvu karticu smjestiti? Iako je praktički nemoguće sa sigurnošću odgovoriti na to pitanje, u prosjeku se generira cca. 10-20 byta P- kôda za svaku Basic naredbu. Za generiranje P-kôda i njegovo prenošenje na karticu potreban je ZeitControl-ov programski paket koji je besplatan i dostupan na njihovim web stranicama. Radi pod operativnim sustavima MS Windows 98/NT/2000/XP. Taj programski paket omogućuje testiranje aplikacija i bez čitača (card reader). Naime, moguće je simulirati BasicCard na PC-u.

Očito je da programiranje pametnih kartica nije isto što i klasično programiranje na PC-u. Za početak, nema tipkovnice! Logično pitanje koje se nameće je kako se uopće komunicira s karticom, tj. kako ona prima ulazne podatke i kako daje izlazne. Odgovor je: preko svog dvosmjernog I/O kontakta. Komunikacija se odvija prema T=0 i T=1 protokolima definiranim ISO/IEC standardima 7816-3 i 7816/4 na 9600 baud-a i više. Ali to je sve sakriveno od Basic programera. Potrebno je samo definirati naredbu na kartici i dalje programirati kao da se radi o klasičnoj proceduri., jer je takvu naredbu moguće pozvati iz ZC-Basic programa na PC-u kao klasičnu proceduru [1].

BasicCard operacijski sustav u potpunosti brine o komunikaciji, kao i o kriptiranju i dekriptiranju naredbi i odgovora koje razmjenjuju kartica i terminal. Sve što je potrebno napraviti jest definirati ID veličine 2 bajta za svaku definiranu naredbu (prema ISO/IEC 7816-4 ta dva bajta se nazivaju CLA – Class i INS - Instruction).

Ilustrirajmo to na jednom jednostavnom primjeru. Pretpostavimo da se na kartici nalaze pohranjeni impulsi i da želimo napisati naredbu pomoću koje ćemo saznati koliko impulsa ima na kartici. Definiramo naredbu GetImp i pridjelimo joj ID &H20 &H01 (prefiks &H označava heksadecimalni broj) . Eeprom Imp 'stalna Integer varijabla Command &H20 &H01 GetImp (Impulsi) Impulsi = Imp End Command

Page 6: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

3

Sljedećim kôdom moguće je pozvati takvu naredbu s PC-a: Const swCommandOK = &H9000 Declare Command &H20 &H01 GetImp(Impulsi) Status = GetImp (Impulsi) If Status <> swCommandOK Then GoTo CancelTransaction

Vrijednost &H90000 definirana je standardom ISO/IEC 7816-4 kao kôd za uspješno obavljenu naredbu. Ukoliko nije drugačije određeno, ta se vrijednost automatski vraća onome tko je pozvao naredbu. Vraćena vrijednost se uvijek treba provjeriti, čak i ako naredba kao takva nema stanje pogreške. Naime, mogu dogoditi nepredviđene situacije na primjer, da se kartica izvadi iz čitača. Naravno da se ispod površine događa još mnogo toga, ali, kao što je već rečeno, za sve to se brine operacijski sustav, pa o tome ne treba voditi računa prilikom pisanja BasicCard aplikacije.

2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1.

Slika 2.1. Pametna kartica u prirodnoj veličini

Važan dio je metalno kontaktno područje koje izgleda jednako kao i

kod standardne telefonske kartice, no telefonska kartica ima samo memoriju dok pametna kartica sadrži i CPU – kompletan minijaturni kompjutor. Danas klasična takva kartica može imati od 8-32 kilobajta ROM-a (gdje je pohranjen strojni kôd operacijskog sustava), 1-64 kilobajta EEPROM-a (za pohranjivanje podataka na karticu) i 256-2048 bajta RAM-a. EEPROM predstavlja hard disc kartice, pa podaci tamo zapisani ostaju i nakon prekida napajanja kartice. Jedno od najpoželjnijih svojstava pametnih kartica je sigurnost podataka pohranjenih na njoj. Zato kartice štite pristup memoriji kriptiranjem.

Komunikacija s karticom odvija se prema command-response protokolu. Prilikom umetanja kartice u čitač inicijalizira se command-response sjednica kao što je prikazano slikom 2.2.

Page 7: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

4

Slika 2.2. Command-response sjednica

U ovoj razmjeni je kartica pasivna strana. Nakon slanja ATR-a

(Answer To Reset) ona ne radi ništa dok ne primi naredbu od terminala. Nakon što pošalje odgovor na primljenu naredbu pasivno čeka novu, itd. Command-response protokol opisan je standardima:

• ISO/IEC 7816-3: Electronic signals and transmission protocols • ISO/IEC 7816-4: Interindustry commands for interchange.

Sve do nedavno programiranje pametnih kartica bilo je prilično

složeno i zahtijevalo je vještine kao: • programiranje u asembleru (iako su za neke kartice bili dostupni

C-prevodioci, nije bilo moguće napisati cijeli operacijski sustav u C-u) • byte-level komunikacijski protokol kao npr. T=0 • block-level komunikacijski protokol na razini command-response • programiranje na sklopovskoj razini za pohranjivanje vrijednosti u

EEPROM • algoritmi za kriptiranje/dekriptiranje (trebalo ih je implementirati)

Također je bilo potrebno složeno i dosta skupo razvojno okruženje. Nakon što je program završen, trebalo je čekati i po par mjeseci prije nego što se “sprži” na određeni broj kartica, kako bi ga se uopće moglo testirati.

No, ta situacija se znatno poboljšala. Jezgru kartice danas čini P-Code interpreter. Nakon što je program napisan u nekom od programskih jezika (trenutno dostupni na tržištu su Basic i Java), prevodi se u tzv. P-Code (strojno nezavisni jezik nalik strojnom kôdu). P-Code se prenese na karticu gdje ga interpreter izvodi. Programi se prevode i prenose na karticu alatom ZeitControl MultiDebugger. Ako to ne radi kako treba, potrebno je popraviti program i prenijeti novu verziju na istu karticu. Znači, razvojni ciklus je mnogo bliži onome na što je većina programera naučena. Prilikom testiranja aplikacije nisu potrebni ni kartica ni čitač. Naime, alat MultiDebugger

Page 8: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

5

uključuje simulator kartica. Testiranje aplikacije na simuliranim karticama ubrzava razvojni proces jer zaobilazi prenošenje programa na stvarnu karticu [1].

2.2 SVOJSTVA BasicCard-a

BasicCard je pametna kartica s P-Code interpreterom koji može izvoditi programe napisane u Basic-u. Ima četiri važne karakteristike:

1. niska cijena

• najnoviju verziju razvojnog sustava može se besplatno skinuti sa stranice www.BasicCard.com

• kartice koštaju manje od pola cijene ostalih pametnih kartica trenutno dostupnih na tržištu

2. jednostavno se programira

• programiranje u programskom jeziku Basic nije komplicirano i

moguće ga je relativno brzo naučiti • sve naredbe definirane na kartici pozivaju se s terminala kao

klasične Basic procedure • datotečni sustav na kartici praktički je izjednačava s disketom • kriptiranje i dekriptiranje je pojednostavljeno (potrebno ga je

“uključiti” ili “isključiti”, a podatci se čitaju/pišu iz/u EEPROM-a jednako kao da se radi o RAM-u)

3. sigurnost

• algoritmi za kriptiranje dostupni su za sve kartice tipa BasicCard

Professional BasicCard RSA, AES, SHA-1, DES, 3DES Enhanced BasicCard DES, 3DES, AES, SHA-1, EC, IDEA Compact BasicCard SG-LFSR algoritam

• za generiranje ključeva postoji već gotov program KEYGEN.EXE.

4. ISO-kompatibilnost

• u programskom jeziku ZC-Basic moguće je definirati svoju ISO-kompatibilnu naredbu kao klasičnu funkciju (npr. ISO naredbe kao SELECT FILE ili READ RECORD se mogu napisati u ZC-Basic-u, čime se otvara mogućnost da korisnik sam implementira svoju ISO-karticu ili da komunicira s postojećom preko ZC-Basic Terminal programa).

Page 9: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

6

Operacijski sustav svake vrste BasicCard-a ima svojstva: 1. u cijelosti implementiran T=1 protokol; Professional BasicCard

sadrži T=0 protokol 2. unaprijed definirane naredbe za pohranjivanje programa i podataka

na karticu uključujući i automatsko kriptiranje 3. Virtual Machine za izvođenje ZC-ovog P-kôda

NEDOSTACI • sigurno da je kartica s interpreterom sporija u odnosu na karticu koja ga

nema • postoji datotečni sustav na karticama, ali čitanje/pisanje iz/u datoteke je

prilično sporo

2.3 IZGLED PROGRAMA ZA BasicCard

BasicCard program čine dva dijela: inicijalizacijski kôd i definicije

procedura. Programi za Enhanced i Professional kartice mogu sadržavati i definicije datoteka.

2.3.1 INICIJALIZACIJSKI KÔD

Inicijalizacijski kôd je prvi blok kôda koji nije sadržan unutar definicije procedura. Izvršava se u trenutku kad je s terminala pozvana prva korisnički definirana naredba. Nije nužan, ali može biti koristan (npr. za provjeravanje da li potrebne datoteke uopće postoje, da li je korisnik poništio karticu i sl.).

2.3.2 DEFINICIJE PROCEDURA

ZC-Basic ima tri tipa procedura: potprogram (blok kôda koji se može pozvati iz drugih procedura), funkcije (procedura koja vraća vrijednost) i naredbe (mehanizam koji omogućava komunikaciju između terminala i kartice). Ugnježdene definicije procedura nisu dozvoljene.

Page 10: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

7

2.3.3 DEFINICIJE DATOTEKA Enhanced i Professional kartice imaju datotečni sustav nalik datotečnom

sustavu operacijskog sustava DOS. Pristup datotekama i direktorijima moguć je na neki od načina: • unutar same kartice (datoteke se mogu otvoriti i puniti identičnim

naredbama koje bi koristili iz Basic programa koji radi pod operacijskim sustavima DOS ili Windows)

• gledano s terminala kartica se ponaša kao disketa i moguće joj je pristupiti kao '@:' – disku (ukoliko korisnik ima odgovarajuće dozvole može s nje čitati ili na nju pisati kao da se radi o disketi)

• moguće je stvoriti strukturu direktorija i datoteka u samom programu na kartici u bloku definicija datoteka.

Page 11: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

8

3. TERMINAL

Iako je programski jezik ZC-Basic razvijen za BasicCard, moguće ga je koristiti na PC-u i bez kartice, odnosno ako čitač uopće nije spojen na računalo [1].

ZC-Basic program koji se izvršava na PC-u naziva se Terminal program i obično komunicira s jednim ili više programa koji se izvršavaju na stvarnim ili simuliranim karticama, tzv. BasicCard programi (kartični programi).

3.1 IZGLED TERMINAL PROGRAMA

Terminal program sastoji se od glavne (main) procedure koja počinje prvom naredbom koja nije sadržana unutar definicije procedura i njome započinje izvođenje Terminal programa koje traje do njezine zadnje naredbe ili do prve EXIT naredbe.

Drugi dio čine definicije procedura (funkcija i potprograma – isto kao u klasičnom Basic programu). BasicCard naredbe nakon što su deklarirane u bloku definicije naredbi mogu se pozivati kao klasične funkcije.

Već je ranije bilo spomenuto da ZC-Basic omogućava jednostavno pohranjivanje “stalnih” podataka na karticu i to definiranjem EEPROM varijabli. Iako je to na terminalu neizvedivo na taj način, podatke je moguće sačuvati ako je program pokrenut iz Image ili Debug datoteke. EEPROM varijable terminal programa se zapisuju natrag u Image datoteku u jednom od sljedeća dva slučaja:

1. kad program završava, ako su odgovarajuće opcije bile specificirane: • W parametrom prilikom pokretanja ZCSIM programa • u ZCMDTERM Terminal Program Debuggeru opcijom Save

Terminal Eeprom

2. naredbom Write Eeprom u terminal programu Terminal program izvršava P-Code interpreter na jedan od načina:

• kao posebnu izvršnu datoteku (.EXE) koju je stvorio prevodioc • iz Image File-a (.IMG) preko ZCSIM P-Code interpretera • iz Debug Filea (.DBG) preko ZCMDTERM Terminal Program

Debugger-a.

Page 12: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

9

3.2 API NAREDBE

Trenutno su dostupni API-ji za programske jezike C, C++, Visual Basic i Delphi. Korištenjem API naredbi moguće je, umjesto iz terminal programa pisanog u jeziku ZC-Basic, komunicirati s karticom tipa BasicCard iz programa pisanog u nekom od navedenih programskih jezika [5]. Tijekom izrade diplomskog rada terminal programi pisani su u programskom jeziku ZC-Basic i nisu korištene API naredbe.

U nastavku je ukratko opisan C-API i dan je primjer poziva korisnički definirane funkcije na kartici.

3.2.1. BasicCard C-API

C-API omogućava istovremeno korištenje podrške za BasicCard i grafičkog sučelja (GUI) prilikom pisanja aplikacije za kartice tipa BasiCard. Trenutno je dostupan za Windows ™ 32 bitne operacijske sustave, te podržava čitače ZeitControl CyberMouse, ZeitControl Chipi i PC/SC kompatibilne čitače pod navedenim operacijskim sustavima. Osim realnih čitača, podržani su i virtualni (za simulirane kartice) .

C-API se sastoji od nekoliko DLL-ova (ZCBCI.DLL, ZCCRI.DLL, ZCRWSER.DLL, ZCRWPCSC.DLL, ZCPLIB.DLL) koji su podijeljeni u tri sloja kao što je prikazano slikom 3.1. Osim navedenih DLL-ova postoji i ZCCRYPT.DLL koji čini C-Crypto API [5, 6].

Slika 3.1. Api slojevi i pripadni DLL-ovi

Omotač čitača (Reader Wrapper Layer - ZCRWL) sadrži po jedan DLL za svaki čitač koji je podržan. Sučelje prema čitaču (Common Reader Interface - ZCCRI) potrebno je za spajanje s nekim od podržanih čitača, dok

Page 13: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

10

je sučelje naredbi ( BasicCard Command Interface - ZCBCI) najveći dio API-ja koji koristi sučelje prema čitaču za komuniciranje s karticom i čitačem.

3.2.2. PRIMJER KORIŠTENJA ZCCRI

Prije poziva bilo koje BasicCard naredbe potrebno je uspostaviti vezu s čitačem sljedećim kôdom: ZCCRIRET criret; /* ZCCRI return codes */ ZCCRIREADER reader; /* handle to ZCCRI reader device */ /* Ukoliko nije potrebna provjera spojenog čitača moguće je */ /* brzo uspostavljanje veze opcijom ZCRI_OPTION_FASTINIT.*/ criret=ZCCriSetOptions2(NULL, ZCCRI_OPTION_FASTINIT); if (ZCCRI_NOERROR!=criret) {

/* Došlo je do pogreške */ return;

} criret=ZCCriOpenReader(&reader, NULL); if (ZCCRI_NOERROR!=criret) {

/* Došlo je do pogreške */ return;

} /* Čekaj karticu, u ovom slučaju beskonačno dugo (-1) */ /* Prilikom korištenja beskonačnog čekanja treba imati na umu da */ /* je time blokiran red poruka. Zato je bolje koristiti */ /* ZCCriWaitCard s čekanjem 0 zajedno sa Windows timer-om*/ criret=ZCCriWaitCard(reader, -1); switch (criret) {

case ZCCRI_NOERROR: /* čitač nije detektiran */ break;

case ZCCRI_ERROR_NO_CARD: /* u čitaču nema kartice – ova pogreška se ne javlja kod beskonačnog čekanja*/ return;

default: /* error handling */ return;

} /* Uspostavljanje veze s karticom bez čekanja ATR-a (NULL) */ criret=ZCCriConnect(reader, NULL); if (ZCCRI_NOERROR!=criret) {

/* Error handling */ return;

} /* Veza je uspostavljena. */ /* Poziva se naredba s kartice opisana kasnije */ DoBasicJob(reader);

Page 14: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

11

/* Zatvaranje veze. */ criret=ZCCriDisconnect(reader); if (ZCCRI_NOERROR!=criret) {

/* error handling */ return;

} /* close reader */ criret=ZCCriCloseReader(reader);

3.2.2. PRIMJER KORIŠTENJA ZCBCI

Nakon uspostavljanja veze mogu se pozivati BasicCard naredbe. No, prvo se treba spojiti s čitačem. void DoBasicJob(ZCCRIREADER reader) { ZCBCIRET bciret; /* ZCBCI return codes */ WORD sw; /* status word returned by ZCBCI commands */ ZCBCICARD card; /* handle to BasicCard */ char echo[]=”ABC”; /* string koji koristi echo naredba */ /* spajanje s čitačem */ bciret=ZCBciAttach(reader, &card); if (ZCBCI_NOERROR!=bciret) {

/* error handling */ return;

} /* poziv BasicCard naredbe, u ovom slučaju echo naredbe */ bciret=ZCBciEcho(card, &sw, 1, echo); if (ZCBCI_NOERROR!=bciret) {

/* error handling */ return;

} /* Poziv ostalih naredbi */ /* Odspajanje.. */ bciret=ZCBciDetach(card); if (ZCBCI_NOERROR!=bciret) {

/* error handling */ return;

} }

3.2.2. POZIV KORISNIČKI DEFINIRANE NAREDBE KORIŠTENJEM ZCBCI

Izgled korisnički definirane BasicCard naredbe: Declare Command &H20 &H08 MyCommand (bVal as Byte, iVal as Integer,

lVal as Long, strVal as String)

Page 15: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

12

Poziv BasicCard naredbe MyCommand iz C-a: ZCBCIRET MyCommand (unsigned char *pByte, short *pInteger, long *pLong, char *pszString, int cbString) { ZCBCIRET bciret; /* ZCBCI return codes */ ZCBCIPARM parm[4]; /* 4 parametra za naredbu */ WORD sw; /* status word returned by transaction */ /*postavljanje parametara deklariranih naredbom s lijeva na desno*/ parm[0].parmtype=ZCBCIBYTE; /* prvi parametar: tipa byte */ parm[0].data.valbyte=*pByte; /* vrijednost: *pByte */ parm[1].parmtype=ZCBCIINT; /* drugi parametar: ZCBasic integer */ parm[1].data.valint=*pInteger; /*(16 bit). Vrijednost: pInteger */ parm[2].parmtype=ZCBCILONG; /* treći parametar: tipa long */ parm[2].data.vallong=*pLong; /* vrijednost: *pLong */ parm[3].parmtype=ZCBCISTRING; /* četvrti parametar: string*/ parm[3].data.valstring.cbString=(BYTE) min(255, cbString); /* max. duljina string buffer-a : cbString. */ parm[3].data.valstring.pString=pszString; /*vrijednost: pszString */ /* poziv naredbe: Cla 0x20 (&H20) i Ins 0x08 (&H08) */ bciret=ZCBciTransaction(card, 0x20, 0x08, parm, 4, &sw); if (ZCBCI_NOERROR!=bciret) {

/* error handling */ return;

} /* kopiranje vraćenih parametara */ *pByte=parm[0].data.valbyte; *pInteger=parm[1].data.valint; *pLong=parm[2].data.vallong; /* string parametar se ne kopira jer je vraćen by value */ Return bciret; }

Page 16: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

13

4. PROGRAMSKI JEZIK ZC-BASIC Programski jezik ZC-Basic je vrlo sličan klasičnom Basic jeziku pa

njegova sintaksa nije ovdje opisana. Opisani su samo neki njegovi dijelovi specifični za pametne kartice [1].

4.1 ERROR HANDLING

Ako P-Code interpreter na kartici otkrije run-time grešku (npr. preljev, nedovoljno memorije i sl.) poziva ErrorHandler proceduru. Ako procedura s takvim imenom ne postoji u programu, program završava s kôdom SW1 – sw1PCodeError(&H64). SW2 sadržava P-Code grešku. Procedura ErrorHandler može obaviti različite operacije obrade pogreške, ali ne može nastaviti izvođenje od naredbe koja je prouzročila pogrešku. Sama vrijednost pogreške pohranjena je u unaprijed definiranoj varijabli PCodeError.

Kod Enhanced i Professional kartica adresa naredbi kod koje se pogreška pojavila predaje se ErrorHandler proceduri kao cjelobrojni (integer) parametar, pa joj se može pristupiti naredbom: Sub ErrorHandler (PC As Integer)

4.2 POSEBNOSTI BasicCard PROGRAMA

4.2.1 ATR (Answer To Reset)

Kad je kartica resetirana, ona čuva podatke o sebi pomoću ATR-a. ATR sadrži tehničke podatke o komunikacijskim parametrima koje kartica koristi, iza kojih sljedi 15 bajta (Historical Characters) kojima se kartica identificira. Oni su za BasicCard oblika: “BasicCard ZCvvv”, pri čemu je vvv unaprijed određen broj koji označava verziju kartice. Moguće je definirati vlastite Historical Charactere naredbom:

Declare ATR = data Kompletan ATR (ne samo Historical Charactere) moguće je definirati naredbom: Declare Binary ATR = dana

Page 17: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

14

4.2.2 APPLICATION ID

BasicCard ima ugrađenu naredbu kojom se može provjeriti koja aplikacija postoji na kartici u čitaču. GetApplicationID (ID$)

Za konfiguraciju ID-a koristi se naredba: Declare ApplicationID = data

4.2.3 KRIPTIRANJE (“uključivanje / isključivanje”) {Enable | Disable} Encryption [AlgorithmID [, AlgorithmID, …]] AlgorithmID – identifikacijski broj algoritma za kriptiranje (ukoliko nije

eksplicitno naveden, svi raspoloživi algoritmi su “uključeni / isključeni”)

Radi maksimalne sigurnosti poželjno je “isključiti” sve algoritme za

kriptiranje koji se ne koriste. Gore navedena naredba izvršava se prilikom prevođenja programa i traje kroz čitav životni vijek kartice. Algoritmi se ne mogu naknadno “uključivati/isključivati”. Također se može dogoditi da različite verzije kartice podržavaju različite algoritme.

4.2.4 ZAHTIJEVANJE VIŠE VREMENA OD TERMINALA

Za BasicCard je BWT (Block Waiting Time) 1,6s (Compact kartice), odnosno 12,8s (Enhanced i Professional kartice). Pri korištenju naredbe čije bi izvršavanje moglo trajati dulje od vremena određenog BWT-om potrebno je, da bi se izbjegao istek vremena (time out), dodatno tražiti od terminala više vremena.

Ne postoji pravilo kojim bi se odredilo za koju naredbu treba tražiti od terminala dodatno vrijeme za odgovor. Jedini način je testiranje. Naredba koja to omogućava je WTX (Waiting Time Extension):

WTX BWT-units

Page 18: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

15

4.2.5 UNAPRIJED DEFINIRANE (PRE-DEFINED) VARIJABLE

BasicCard operacijski sustav ima niz internih varijabli kojima se može pristupiti iz ZC-Basic-a. Većina ih služi za komunikaciju. Javne (public) varijable (smještene u RAM-u) tipa Byte: CLA Class bajt – prvi bajt identifikatora naredbe duljine 2

bajta (CLA INS). INS Instruction bajt – drugi bajt identifikatora naredbe duljine

2 bajta (CLA INS). P1 Prvi parametar zaglavlja naredbe duljine 4 bajta:

CLA INS P1 P2 P2 Drugi parametar zaglavlja naredbe duljine 4 bajta:

CLA INS P1 P2 Lc Duljina polja IDATA u naredbi. Le Očekivana duljina polja ODATA u odgovoru

(postavlja pozivatelj naredbe). ResponseLength Stvarna duljina polja ODATA u odgovoru

(postavlja pozvana naredba) SW1 Prvi od dva statusna bajta SW1-SW2. SW2 Drugi od dva statusna bajta SW1-SW2. Algorithm ID trenutno aktivnog algoritma za kriptiranje. KeyNumber Broj ključa kojeg koristi trenutno aktivan algoritam

kriptiranja (npr. ključ broj 99). Ako niti jedan algoritam za kriptiranje nije aktivan vrijednost ove varijable je 0.

PCodeError Ako dođe do run-time pogreške, a u programu postoji podprogram ErrorHandler za obradu pogreške, tada taj podprogram može iz varijable PCodeError saznati o kojoj se pogrešci radi.

LibError Posljednja pogreška koja se dogodila izvođenjem procedure iz neke od bibliotek. Samo Professional kartice unaprijed definiraju ovu varijablu, dok je kod Enhanced kartica deklarirana u datoteci library.def.

Cjelobrojne varijable: P1P2 konkatenacija P1 i P2 SW1SW2 konkatenacija SW1 i SW2.

Page 19: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

16

4.3 POSEBNOSTI TERMNAL PROGRAMA

4.3.1 KOMUNIKACIJA

Tri funkcije su predviđene za određivanje statusa čitača i kartice. Sve te tri funkcije vraćaju SW1-SW2: 1. CardReader [(name$)]

Služi za otkrivanje čitača kartice preko konfiguriranog serijskog porta. Ukoliko se proslijedi kao parametar znakovni niz (string), kao povratna vrijednost dobit će se identifikacijski znakovni niz čitača. Ukoliko se radi o kartici simuliranoj na PC-u, što znači da čitač kao takav ne mora postajati, vraća se znakovni niz Simulated Card Reader u name$ parametru. Mogući statusni bajtovi SW1-SW2: swCommandOK Čitač je detektiran. swNoCardReader Čitač nije detektiran. swCardReaderError Odgovor dobiven od čitača je pogrešan. 2. CardInReader Provjerava da li je kartica u čitaču. Mogući statusni bajtovi SW1-SW2: swCommandOK Kartica je u čitaču. swNoCardReader Čitač nije detektiran. swCardReaderError Odgovor dobiven od čitača je pogrešan. swNoCardInReader U čitaču nema kartice. 3. ResetCard [(ATR$)]

U slučaju resetiranja kartice vraća swCommandOK (&H9000) ako je kartica ispravno odgovorila ATR-om. Ukoliko se proslijedi parametar, vraćaju se Historical bajtovi. Mogući statusni bajtovi SW1-SW2: swCommandOK Primljen je ispravan odgovor na resetiranje (ATR). swNoCardReader Čitač nije detektiran. swCardReaderError Odgovor dobiven od čitača je pogrešan. swNoCardInReader U čitaču nema kartice. swT1Error Pogreška specifična za T=1 protokol. swCardError Kartica nije ispravno odgovorila. swCardTimedOut Kartica nije odgovorila ATR-om na vrijeme.

Page 20: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

17

4.3.2 PC/SC FUNKCIJE

Sljedeće dvije funkcije predviđene su za dobavljanje informacija o PC/SC kompatibilnim čitačima kartica u sistemu:

1. nReaders = PcscCount

Vraća broj konfiguriranih PC/SC čitača kao integer vrijednost. Mogući statusni bajtovi SW1-SW2: swNoPcscDriver Nije instaliran PC/SC driver. swPcscError PC/SC driver vratio je neočekivani kôd pogreške. 2. ReaderName = PcscReader(ReaderNum)

Vraća ime PC/SC čitača ReaderNum kao string. Ako je ReaderNum = 0

vraća se vrijednost default čitača. Mogući statusni bajtovi SW1-SW2: swNoCardReader Čitač nije detektiran. swNoPcscDriver Nije instaliran PC/SC driver. swPcscError PC/SC driver vratio je neočekivani kôd pogreške.

4.3.3 I/O LOGGING Funkcije za otvaranje i zatvaranje log-datoteke. Open Log File filename otvara log-datoteku pod imenom filename Close Log File zatvara log-datoteku

4.3.4 AUTOMATSKO KRIPTIRANJE { Enable | Disable } Encryption

P-Code interpreter koji izvršava terminal program kriptira sve što šalje unutar bloka naredbi koji počinje naredbom Start Encryption i završava naredbom End Encryption naredbom.

Page 21: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

18

4.3.5 ČEKANJE NA ODGOVOR KARTICE WTX seconds

Ova naredba produljuje čekanje terminala na odgovor kartice, no može se koristiti samo ako je čitač spojen na COM1-COM4 i ako se radi o ZeitControl Chipi čitaču. Standardno PC/SC sučelje i CyberMouse čitači ne podržavaju ovu naredbu.

U slučaju kad ova naredba nije podržana može se u BasicCard programu koristiti #BWT n (pri čemu je n potencija broja 2 između 1 i 512 – rubovi intervala su uključeni).

4.3.6 UNAPRIJED DEFINIRANE (PRE-DEFINED) VARIJABLE Public varijable tipa Byte: ComPort Broj Com Porta na koji je spojen čitač. ResponseLength Stvarna duljina polja ODATA u odgovoru

(postavlja pozvana naredba) SW1 Prvi od dva statusna bajta SW1-SW2. SW2 Drugi od dva statusna bajta SW1-SW2. Algorithm ID trenutno aktivnog algoritma za kriptiranje. KeyNumber Broj ključa kojeg koristi trenutno aktivan algoritam

kriptiranja (npr. ključ broj 99). Ako niti jedan algoritam za kriptiranje nije aktivan vrijednost ove varijable je 0.

PCodeError Ako dođe do run-time pogreške, a u programu postoji podprogram ErrorHandler za obradu pogreške, tada taj podprogram može iz varijable PCodeError saznati o kojoj se pogrešci radi.

FgCol Boja kojom Print naredba ispisuje tekst na ekran (0-15). BgCol Boja pozadine teksta kojeg ispisuje Print naredba na

ekran (0-15). CursorX x-koordinata pozije cursor-a (1-80). CursorY y-koordinata pozije cursor-a (1-25). FileError Posljednja pogreška, tj. kôd pogreške kojom je rezultirala

neka od naredbi za rukovanje s datotekama. nParams Broj command-line parametara. Integer varijabla: SW1SW2 Konkatenacija SW1 i SW2. String varijable: Param$(1 To nParams) Command-line parametri. Key(0 To 255) Ključevi za kriptiranje.

Page 22: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

19

5. KOMUNIKACIJA

Komunikacija između kartice i terminala odvija se nizom naredbi (koje

šalje terminal) i odgovora (od strane kartice). Komunikacija počinje naredbom terminala Reset Card:

Slika 5.1. Komunikacija između terminala i kartice

Taj proces detaljno opisuju dva ISO/IEC standarda: 1. ISO/IEC 7816-3: Electronic signals and transmission protocols

• opisuje ATR i protokole T=0 i T=1.

2. ISO/IEC 7816-4: Interindustry commands for interchange • opisuje sadržaj naredbi terminala i odgovora kartice, te kako se oni

šalju navedenim protokolima.

Navedeni standardi naredbe i odgovore (commands and responses) tretiraju kao APDU (application protocol data unit) kao što je opisano poglavljem 5.2. Poznavanje navedena dva standarda nužno je jedino ukoliko je potrebno uklopiti BasicCard u neki postojeći sistem. U protivnom, o svemu brine operacijski sustav [1].

Page 23: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

20

5.1. ODGOVOR NA RESETIRANJE (Answer To Reset - ATR)

ATR je znakovni niz (string) veličine maksimalno 33 bajta koji sadržava različite parametre vezane uz karticu i prijenosni protokol koji ona podržava. Vrlo se rijetko događa da ATR ima maksimalnu dopuštenu duljinu (najčešće sadrži samo par bajtova). Posebno kod aplikacija gdje se kartica koristi vrlo brzo nakon aktiviranja, ATR mora biti kratak. ATR, kao i njegovi dijelovi, detaljno je opisan ISO/IEC 7816-3 standardom [1, 2]. Izgled osnovnog ATR-a opisan je tablicom 5.1. Podatkovni

elementi Naziv Opis

TS Initial Character T0 Format Character

određuju neke osnovne parametre važne za prijenos, te indiciraju prisutnost popratnih bajtova

TA1, TB1, TC1, TD1,…

Interface Characters određuju posebne parametre prijenosa za protokol, koji su važni za nadolazeće prijenose podataka

T1, T2, ..,TK Historical Characters opisuju opseg osnovnih funkcija pametne kartice TCK Check Character checksum prethodnih bajtova (može se slati kao

zadnji bajt ATR-a ovisno o protokolu) Tablica 5.1. Podatkovni elementi ATR-a i njihovo značenje prema

ISO/IEC 7816-3 standardu Od svih podataka ATR-a navedenih u tablici 5.1, BasicCard

programeru je jedino važno da li kartica podržava T=0 ili T=1 protokol, maksimalna brzina komunikacije koju kartica podržava, te Historical Character-i.

U nastavku je opisan izgled ATR-a za svaki od tipova kartica BasicCard. Navedene su vrijednosti podatkovnih elemenata ATR-a i njihovo značenje, ali ne i sve moguće vrijednosti koje mogu poprimiti kod različitih tipova kartica, budući da se ATR ovdje promatra u kontekstu kartica tipa BasicCard.

Compact i Enhanced kartice podržavaju samo T=1 prijenosni protokol, dok je brzina komunikacije ograničena na 9600 baud-a. Šalju sljedeći ATR:

TS=3B Najznačajniji je prvi bit: 1=visoko (high), 0=nisko (low) T0=EF E označava da sljede TB1, TC1, TD1

F označava broj Historical Character-a, u ovom slučaju 15 TB1=00 Ne zahtjeva napon za EEPROM programiranje. TC1=FF Vrijeme čekanja između dva znaka = 11 ETU TD1=81 Označava da sljedi TD2 (indicira T=1). TD2=31 Označava da sljede TA3 i TB3 (indicira T=1). TA3=50ili20 IFCS (Information Field Size) = 50 za Compact kartice

IFCS (Information Field Size) = 20 za Enhanced kartice TB3=45ili75 CWT (character waiting time) = (11 + 32) ETU (= 3.33 ms između znakova) Kod kartica ZC1.1, ZC3.3, ZC3.5 (TB3 = 45) : BWT (block waiting time) = (11 + 16*960) ETU (= 1.6 ms između blokova) Kod novijih kartica (TB3=75) : BWT= (11 + 128*960) ETU (=12.8 ms između blokova) T1-TK Historical Character-i

Slika 5.2. ATR: Compact i Enhanced kartice

Page 24: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

21

Professional kartice podržavaju T=0 i T=1 protokole, a rade i na 38400 baud-a. Šalju sljedeći ATR:

TS=3B Najznačajniji je prvi bit: 1=visoko (high), 0=nisko (low) T0=F9 F označava da sljede TA1, TB1, TC1, TD1

9 označava broj Historical Character-a, u ovom slučaju njih 9 TA1=13 FI=1, DI=3: najveća dozvoljena brzina je 38400 baud-a TB1=00 Ne zahtjeva napon za EEPROM programiranje. TC1=FF Vrijeme čekanja između dva znaka = 11 ETU TD1=40 Označava da sljedi TC2 (indicira T=0). TC2=80 WWT (work waiting time) = 12,8 s T1-TK Historical Character-i

Slika 5.3. ATR: Professional kartice

5.2. NAREDBE I ODGOVORI (Commands and Responses)

Sadržaj naredbi i odgovora opisan je dokumentom ISO/IEC 7816-4: Interindustry commands for interchange.

5.2.1 APDU (application protocol data unit) NAREDBE Izgled APDU naredbe prikazan je na slici 5.4.

CLA Class bajt – prvi bajt identifikatora naredbe duljine 2 bajta (CLA INS).

Ne smije biti FF ako se koristi T=0 protokol. INS Instruction bajt – drugi bajt identifikatora naredbe duljine 2 bajta (CLA INS).

Zbog ISO kompatibilnosti ovaj bajt treba biti paran. Značajniji dio ne smije biti 6 ili 9 ako se koristi T=0 protokol (tim vrijednostima počinje SW1 u APDU odgovoru).

P1 Prvi parametar zaglavlja naredbe duljine 4 bajta: CLA INS P1 P2 P2 Drugi parametar zaglavlja naredbe duljine 4 bajta CLA INS P1 P2 Lc Duljina polja IDATA u naredbi. IDATA Podaci koji se očekuju uz naredbu.

U slučaju ZC-Basic naredbe, ovo polje sadrži parametre koje je proslijedio pozivatelj naredbe. Le Očekivana duljina polja ODATA u odgovoru.

Slika 5.4. Izgled APDU naredbe (osjenčani blokovi nisu obavezni)

Bajtove CLA i INS može odrediti aplikacijski programer (ukoliko se radi

o ZC-Basic naredbi) ili su oni već unaprijed određeni (ako se radi o pred- definiranim naredbama). P1 i P2 su važni samo zbog ISO kompatibilnosti, ali ih se ne mora nužno koristiti. Ukoliko ih se koristi, tada se parametri koje predaje pozivatelj naredbe predaju Public varijablama P1 i P2, odnosno njihova vrijednost se može postaviti prilikom pozivanja naredbe na sljedeći način:

Call command-name ([P1=expr,] [P2=expr,] arg-list).

Page 25: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

22

5.2.2. APDU (application protocol data unit) ODGOVORA Izgled APDU odgovora prikazan je na slici 5.5.

ODATA Podaci koje vraća naredba. U slučaju ZC-Basic naredbe sadrži parametre koje je poslao

pozivatelj naredbe, a naredba ih je naknadno promijenila. SW1 Prvi statusni bajt. SW2 Drugi statusni bajt. Slika 5.5. Izgled APDU odgovora (osjenčani blokovi nisu obavezni)

Bajtovi SW1 i SW2 su unaprijed definirane javne varijable. Prije izvršavanja naredbe imaju vrijednost &H90 i &H00, što je kôd poruke “Command successfully completed”. Ukoliko je SW1-SW2 <> &H9000 i SW1 <> &H61, ODATA se zanemaruje što rezultira gubljenjem vraćene vrijednosti. Kod kartica koje koriste T=0 protokol, značajniji dio bajta SW1 mora biti &H6 ili &H9.

5.3. T=0 PROTOKOL

T=0 je prvi međunarodno standardizirani prijenosni protokol za pametne kartice. Korišten je u Francuskoj tijekom početnog razvoja pametnih kartica. Nastao u ranoj fazi u povijesti razvoja tehnologija za pametne kartice kao protokol, te kao takav koristi minimalne memorijske resurse i maksimalno je jednostavan. Budući da ga koriste GSM kartice danas je najčešće korišten od svih postojećih protokola za pametne kartice.

T=0 protokol je opisan standardom ISO/IEC 7816-3: Electronic signals and transmission protocols, dok se dodaci mogu naći u dokumentima GSM 11.11, TS 102.221 i EMV specifikacijama.

T=0 je byte-level prijenosni protokol, što znači da je najmanja jedinica podataka kojom on rukuje jedan bajt. Definiran je kao niz poruka koje razmjenjuju terminal (IFD – interface device) i kartica (ICC - integrated circuit card).

Razmjena počinje kad kartica pošalje ATR. Nakon toga terminal šalje TPDU (transmission protocol data unit) u kojem je sadržana naredba, na što kartica odgovara TPDU-om u kojem je sadržan odgovor. TPDU je lower-level paket iz kojeg se generira ranije opisan APDU paket [1, 2].

Slika 5.6. prikazuje skicu T=0 protokola za dolazeći i odlazeći prijenos podataka. Dolazeći prijenos podataka objašnjen je u poglavlju 5.3.1, a odlazeći prijenos podataka u poglavlju 5.3.2.

Page 26: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

23

Slika 5.6. Primjer dolazećeg i odlazećeg prijenosa podataka između terminala i

kartice T=0 protokolom

Neke Professional kartice podržavaju T=0 protokol, kao i T=1 protokol koji je opisan u poglavlju 5.4. T=1 je brži, jednostavniji za korištenje i otporniji na pogreške. U principu se kod kartica tipa BasicCard T=0 protokol koristi isključivo kad je potrebno iskoristiti čitaće koji ne podržavaju T=1 protokol ili kad se koriste neke postojeće naredbe napisane za T=0 protokol. Kad terminal pošalje TPDU naredbu i kartica na nju odgovori TPDU odgovorom, samo jedan od ta dva TPDU-a smije sadržavati podatke. Ako ih sadrži naredba, radi se o dolazećem prijenosu podataka (incoming data transfer), u protivnom radi se o odlazećem prijenosu podataka (outgoing data transfer). Budući da protokolom nije osiguran mehanizam za određivanje koji TPDU smije sadržavati podatke, može doći do zastoja ako se terminal i kartica ne mogu složiti o smjeru prijenosa podataka.

U oba slučaja terminal šalje zaglavlje naredbe veličine 5 bajta prikazano na slici 5.7.

Page 27: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

24

CLA Class byte – prvi bajt dvo-bajtnog identifikatora (CLA INS) naredbe. Ne smije biti FF ako se koristi T=0

protokol. INS Instruction byte – drugi bajt dvo-bajtnog identifikatora (CLA INS) naredbe. Zbog ISO kompatibilnosti

ovaj bajt treba biti paran. Značajniji dio ne smije biti 6 ili 9 ako se koristi T=0 protokol (tim vrijednostima počinje SW1 u APDU odgovoru).

P1 Prvi parametar zaglavlja naredbe duljine 4 bajta: CLA INS P1 P2 P2 Drugi parametar zaglavlja naredbe duljine 4 bajta CLA INS P1 P2 P3 Broj podatkovnih bajtova. Slika 5.7. Zaglavlje duljine 5 bajta koje terminal šalje kartici bilo da očekuje dolazeći ili

odlazeći prijenos podataka.

Iz zaglavlja naredbe koju je primila od terminala, kartica mora moći

odrediti da li terminal očekuje dolazeći ili odlazeći prijenos podataka.

5.3.1. DOLAZEĆI PRIJENOS PODATAKA (incoming data transfer)

Kad terminal pošalje TPDU naredbu i kartica na nju odgovori TPDU odgovorom, samo jedan od ta dva TPDU-a smije sadržavati podatke. Ako ih sadrži naredba, radi se o dolazećem prijenosu podataka (incoming data transfer). Slika 5.8. prikazuje izgled TPDU naredbe i odgovora za dolazeći prijenos podataka.

Slika 5.8. Izgled TPDU naredbe i TPDU odgovora za dolezeći prijenos podataka

Na zaglavlje naredbe duljine 5 bajta kartica odgovara terminalu INS bajtom (ISO/IEC standardom opisano je nekoliko mogućih odgovora kartice, no BasicCard koristi samo ovaj jedan).

Nakon toga terminal šalje P3 bajta podataka:

Na koje kartica odgovara s dva statusna bajta: Slika 5.9. Dolazeći prijenos podataka

Dolazeći prijenos podataka prikezan je na slici 5.6. (prva četiri bloka podataka koje razmjenjuju terminal i kartica nakon što je kartica poslala ATR).

Page 28: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

25

5.3.2. ODLAZEĆI PRIJENOS PODATAKA (outgoing data transfer)

Kad terminal pošalje TPDU naredbu i kartica na nju odgovori TPDU odgovorom, samo jedan od ta dva TPDU-a smije sadržavati podatke. Ako ih sadrži odgovor, radi se o odlazećem prijenosu podataka (outgoing data transfer). Slika 5.10. prikazuje izgled TPDU naredbe i odgovora za odlazeći prijenos podataka.

Slika 5.10. Izgled TPDU naredbe i TPDU odgovora za odlazeći prijenos podataka

Na zaglavlje naredbe duljine 5 bajta kartica odgovara terminalu INS

bajtom kojeg sljedi P3 podatkovnih bajtova i dva statusna bajta kao što je prikazano slikom 5.11.

Slika 5.11. Odgovor kartice na zaglavlje duljine 5 bajta za odlazeći prijenos podataka

Odlazeći prijenos podataka prikezan je na slici 5.6. (posljednja dva bloka podataka koje razmjenjuju terminal i kartica).

U oba slučaja kartica može «odbiti» izvršavanje naredbe tako da odmah pošalje SW1-SW2 umjesto INS. Ukoliko prođe WWT (work waiting time) terminal više neće čekati odgovor kartice, tj. javit će pogrešku. Kartica može resetirati timer slanjem NULL (60) bajta. U BasicCard programu to se postiže WTX n naredbom (sintaksa ZC-Basic-a zahtijeva parametar n iako se on ignorira ako kartica koristi T=0 protokol).

5.3.3. PRIJENOS APDU-a T=0 PROTOKOLOM

U poglavlju 5.2. Naredbe i odgovori opisana je struktura APDU paketa, dok se ovo poglavlje bavi razmjenom APDU-a T=0 protokolom (sam proces prijenosa određen je standardom ISO/IEC 7816-4: Interindustry commands for interchange). Da bi se odredilo da li se radi o ulaznim ili izlaznim podacima važna su dva polja APDU paketa: Lc (duljina polja IDATA u naredbi) i Le (očekivana duljina polja ODATA). Jasno je da ukoliko je Lc<>0 očekuju se ulazni podaci, a ako je Le definiran izlazni. Zanimljiva su četiri slučaja: 1. nema ulaznih ni izlaznih podataka

2. samo izlazni podaci 3. samo ulazni podaci 4. ulazni i izlazni podaci

Page 29: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

26

1. Lc=0, Le nije definiran: nema ulaznih ni izlaznih podataka TPDU naredba sastoji se od APDU naredbe i dodanim byte-om P3 čija je vrijednost 0.

Slika 5.12. Izgled TPDU i APDU naredbi i odgovora: nema ulaznih ni izlaznih podataka

2. Lc=0, Le definiran: samo izlazni podaci

Slika 5.13. Izgled TPDU i APDU naredbi i odgovora: samo izlazni podaci 3. Lc<>0, Le nije definiran: samo ulazni podaci TPDU naredba i odgovor identični su APDU naredbi i odgovoru.

Slika 5.14. Izgled TPDU i APDU naredbi i odgovora: samo ulazni podaci 4. Lc<>0, Le definiran: ulazni i izlazni podaci TPDU naredba identična je APDU naredbi bez polja Le.

Slika 5.15. Izgled TPDU i APDU naredbi: samo izlazni podaci

Page 30: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

27

5.4. T=1 PROTOKOL

T=1 prijenosni protokol je asinkroni half-duplex protokol za pametne kartice. Opisan je standardom ISO/IEC 7816-3, kao i TS 102.221 i EMV specifikacijama. To je blok-orijentirani protokol, što znači da je jedan blok najmanja količina podataka koja se može prenijeti između terminala i kartice. Karakteristično za ovaj protokol su strogo odijeljeni slojevi, pa kad bi ga promatrali u kontekstu OSI referencijalnog modela bio bi podatkovni link sloj (transportni sloj). Odvojenost slojeva znači da podaci namijenjeni višim slojevima (npr. podaci za aplikacijski sloj) mogu u potpunosti biti obrađeni podatkovnim link slojem. Nije nužno da slojevi, osim onih striktno za to zaduženih, mogu mijenjati ili uopće razumjeti sadržaj podataka koji se prenose. Stroga podjela slojeva nužna je za sigurno prenošenje poruka (secure messaging) jer je to najjednostavniji način za prijenos kriptiranih podataka sučeljem. T=1 je trenutno jedini međunarodno usvojeni prijenosni protokol za pametne kartice koji omogućava pouzdan i siguran prijenos podataka.

Sam proces prijenosa započinje u trenutku kad kartica pošalje odgovor na resetiranje (ATR – Answer To Reset). Terminal šalje prvi blok, kartica drugi, te se cijela komunikacija odvija se tako da ulogu pošiljatelja ima malo terminal, a malo kartica.

Uporaba T=1 protokola nije ograničena samo na komunikaciju između terminala i pametne kartice, već ga terminali koriste za razmjenu kontrolnih i aplikacijskih podataka s računalom na koje su spojeni [1, 2].

Svaka pametna kartica tipa BasicCard u potpunosti podržava T=1 protokol, uključujući NAD awareness, chaining retries, WTX requests i IFS requests.

U nastavku su objašnjeni dijelovi protokola zanimljivi aplikacijskom BasicCard programeru (prijenos I-blokova bez pogreške i WTX zahtjev). Mehanizmi za ulančavanje (chaining), obradu pogreške (error handling) i IFS prilagodbu (IFS adjustment) su sakriveni, odnosno o njima brine operacijski sustav, stoga nisu ovdje opisani.

5.4.1. PRIJENOS APDU-a T=1 PROTOKOLOM

T=1 protokol definiran je kao niz poruka koje izmjenjuju IFD (interface device) i ICC (integrated circuit card), odnosno terminal i pametna kartica. Nakon što kartica pošalje ATR terminal šalje APDU (application protocol data unit) koji sadrži naredbu. Na tu naredbu kartica odgovara APDU-om koji sadrži odgovor. U međuvremenu, odnosno nakon što je primila naredbu i prije nego pošalje odgovor na nju, kartica može poslati WTX zahtjev (waiting time extension) za dodatnim vremenom kao što je prikazano na slici 5.16.

Page 31: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

28

Slika 5.16. T=1 protokol - WTX zahtjev

Svaki APDU prenosi se kao jedan ili više I-blokova. I-blok je osnovna

jedinica podataka koja se prenosi T=1 protokolom. Maksimalna dozvoljena duljina I-bloka ovisi o smjeru prijenosa i parametrima protokola koji se mogu dinamički mijenjati, no tipična duljina je 32-128 bajta. Sukcesivni I-blokovi se međusobno povezuju (ulančavaju) i tako tvore APDU naredbu ili APDU odgovor. Slika 5.17. prikazuje prijenos sukcesivnih I-blokova koji tvore jednu APDU naredbu.

Slika 5.17. T=1 protokol - APDU je konkatenacija INF1, INF2 i INF3

Page 32: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

29

5.4.2. STRUKTURA I-BLOKA

I-blok sastoji se od pet polja (NAD, PCB, LEN, INF, LRC) od kojih su sva duljine jedan byte osim polja INF.

NAD Node Address byte.

Manje značajan dio sadrži Node adresu (0-7) pošiljatelja, dok značajniji dio sadrži Node adresu (0-7) primatelja. BasicCard odgovara sve vrijednosti Node adresa osim ako nije drugačije zadano pred-definiranom naredbom ASSIGN NAD . NAD I-bloka koji sadrži odgovor jednak je NAD-u I-bloka koji sadrži naredbu ali su im značajniji i manje značajan dio zamijenjeni.

PCB Protocol control byte. Može poprimiti vrijednost 00 ili 40 (osim ako nije ulančavanje blokova u tijeku). Nevažan podatak za BasicCard aplikacijskog programera.

LEN Duljina INF polja u bajtima. INF Information field – informacija sadržana I-blokom.

T=1 protokolom nije određen interni format tog polja. LRC Longitudinal redundancy check.

Xor svih proslijeđenih byte-ova. Slika 5.18. Izgled I-bloka

5.4.3. WTX ZAHTJEV

Terminal će čekati na odgovor kartice dok ne prođe vrijeme zadano ATR-om: BWT (block waiting time). Kod kartica tipa BasicCard BWT je postavljen na 12,8 sekundi. Izuzetak su kartice ZC1.1, ZC3.3 i ZC3.5 za koje je BWT 1,6 sekundi. Ukoliko se pretpostavlja da će obrada naredbe trajati duže od vremena zadanog BWT-om, kartica mora tražiti dodatno vrijeme od terminala, što se postiže WTX (waiting time extension) naredbom: WTX BWT-jedinice, pri čemu je parametar BWT-jedinice tipa byte kojim je traženo vrijeme zadano kao višekratnik broja BWT. Polje INF dugačko je 1 bajt i sadrži vrijednost BWT-jedinica. Odgovor na ovakav zahtjev sadrži identično INF polje. Slika 5.19 prikazuje izgled WTX zahtjeva i odgovora.

Slika 5.19. Izgled WTX zahtjeva i WTX odgovora

Page 33: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

30

5.5. STATUSNI BAJTOVI SW1 I SW2 Pogreške koje vraća BasicCard operacijski sustav: swCommandOK 9000 sw1LeWarning 61XX swRetriesRemaining 63CX sw1PCodeError 64XX swEepromWriteError 6581 swBadEepromHeap 6582 swBadFileChain 6583 swKeyNotFound 6611 swPolyNotFound 6612 swKeyTooShort 6613 swKeyDisabled 6614 swUnknownAlgorithm 6615 swAlreadyEncrypting 66C0 swNotEncrypting 66C1 swBadCommandCRC 66C2 swDesCheckError 66C3 swCoprocessorError 66C4 swAesCheckError 66C5 swLcLeError 6700 swCommandTooLong 6781 swResponseTooLong 6782 swInvalidState 6985 swCardUnconfigured 6986 swNewStateError 6987 swP1P2Error 6A00 swOutsideEeprom 6A02 swDataNotFound 6A88 swINSNotFound 6D00 swCLANotFound 6E00 swInternalError 6F00 Ako P-Code interpreter na kartici naiđe na pogrešku vraća sw1PCodeError (64) u SW1 i kôd pogreške o kojoj se radi u SW2, a ona može biti : pcStackOverflow 01 pcDivideByZero 02 pcNotImplemented 03 pcBadRamHeap 04 pcBadEepromHeap 05 pcReturnWithoutGoSub 06 pcBadSubscript 07 pcBadBounds 08 pcInvalidReal 09 pcOverflow 0A pcNegativeSqrt 0B pcDimensionError 0C pcBadStringCall 0D pcArrayNotDynamic 0F pcArrayTooBig 10 pcDeletedArray 11 pcPCodeDisabled 12 pcBadSystemCall 13 pcBadKey 14 pcBadLibraryCall 15 pcStackUnderflow 16 U slučaju pogreške na terminalu P-Code interpreter vraća jednu od pogrešaka: swNoCardReader 6790 swCardReaderError 6791 swNoCardInReader 6792 swCardPulled 6793 swT1Error 6794 swCardError 6795 swCardNotReset 6796 swKeyNotLoaded 6797 swPolyNotLoaded 6798 swBadResponseCRC 6799 swCardTimedOut 679A swTermOutOfMemory 679B swBadDesResponse 679C swInvalidComPort 679D swComPortNotSupported 679E swNoPcscDriver 679F swPcscReaderBusy 67A0 swPcscError 67A1 swComPortBusy 67A2 swBadATR 67A3 swT0Error 67A4 swPTSError 67A7 swDataOverrun 67A8 swBadAesResponse 67A9 swReservedINS 6D80 swReservedCLA 6E80

Page 34: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

31

5.6. UNAPRIJED DEFINIRANE (PRE-DEFINED) NEREDBE

BasicCard OS sadrži dvanaest do trinaest unaprijed definiranih naredbi. Sve one imaju class byte CLA = C0, dok INS byte može imati neku od vrijednosti od 00, 02, 04, …, 16, 18. Većina tih naredbi je dostupna samo kad je kartica u odgovarajućem stanju što je prikazano tablicom 5.2.

NAREDBA

INS bajt

NEW

LOAD

PERS

TEST

RUN

OPIS NAREDBE

GET STATE

00

Vraća stanje i verziju kartice.

EEPROM SIZE

02

Vraća adresu i veličinu EEPROM-a

CLEAR EEPROM

04

Određene bajtove postavlja na FF.

WRITE EEPROM

06

Spremanje podataka u EEPROM.

READ EEPROM

08

*

*

*

Čitanje podataka iz EEPROM-a.

EEPROM CRC

0A

Računanje CRC-a podataka na određenim adresama.

SET STATE

0C

Postavljanje kartice u određeno stanje.

GET

APPLICATION ID

0E

Vraća Application ID.

START

ENCRYPTION

10

Početak automatskog kriptiranja naredbi i odgovora.

END

ENCRYPTION

12

Kraj automatskog kriptiranja.

ECHO

14

Echo naredba.

ASSIGN NAD

16

Kartica će odgovarati samo na poruke kojima je značajniji dio prvog bajta jednak NAD.

FILE IO

18

**

Izvršava određenu operaciju vezanu uz datotečni sustav.

* READ EEPROM naredba dozvoljena je u stanjima PERS, TEST i RUN ako je omogućeno kriptiranje

ključem pod brojem 0. ** FILE IO naredba dozvoljena je samo kod Enhanced kartica. Tablica 5.2. Unaprijed definirane naredbe dostupne u pojedinim stanjima kartice

Page 35: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

32

STANJA KARTICE Compact i Enhanced kartice imaju četiri stanja: NEW Kartica je u stanju NEW prije nego ju ZeitControl konfigurira. LOAD Kartica je u stanju LOAD kad ju aplikacijski programer dobije. TEST Stanje TEST dozvoljava testiranje programa na kartici. RUN Kartica je u stanju RUN kad dođe u ruke krajnjem korisniku. Professional kartica ima pet stanja: NEW Kartica je u stanju NEW prije nego ju ZeitControl konfigurira. LOAD Kartica je u stanju LOAD kad ju aplikacijski programer dobije. PERS Za inicijalizaciju korisničkih podataka. TEST Stanje TEST dozvoljava testiranje programa na kartici. RUN Kartica je u stanju RUN kad dođe u ruke krajnjem korisniku.

Kartica može mijenjati stanja LOAD, PERS i TEST koliko god puta treba, ali RUN stanje je stalno. Jednom kad se kartica prebaci u stanje RUN ne može se više reprogramirati.

5.7. PRIMJER PROGRAMA KOJI ISPISUJE INFORMACIJE O KARTICI U ČITAČU

Informacije o kartici koje ispisuje program Cardinfo.exe: 1. Historical Character-e

ResetCard (ATR$)

2. stanje i tip kartice #Include COMMANDS.DEF Call GetState (State@, CardType$)

3. veličinu EEPROM-a ako je kartica prazna, inače Application ID #Include COMMANDS.DEF Call GetApplicationID (ID$) Call EepromSize (Start%, Len%)

Page 36: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

33

KÔD PROGRAMA Option Explicit Option Base Explicit #Include STATE.DEF #Include CARDUTIL.DEF #Include COMMERR.DEF #Include COLOURS.DEF Declare Sub PrintCardInfo() Declare Sub PrintEepromInfo() Const DataCol = BrightGreen Do Call WaitForCard() Call PrintCardInfo() Call WaitForNoCard() Loop Sub PrintCardInfo() Print Rem ATR Historical Bytes Private ATR$ : ResetCard (ATR$) : Call CheckSW1SW2() If ATR$ = "" Then Print "No historical bytes in the ATR" Else FgCol = White : Print "ATR historical bytes: " ; FgCol = DataCol : Print ATR$ End If Rem Get the state and the card type Private State@, CardType$ Call GetState (State@, CardType$) if SW1SW2 = swINSNotFound or SW1SW2 = swCLANotFound Then FgCol = White : Print "This is not a BasicCard" Print Exit Sub End If Call CheckSW1SW2() Rem Print the card type FgCol = White : Print "Type: " ; : FgCol = DataCol Select Case Len(CardType$) Case 0 ' Compact BasicCard Print "Compact " ; If ATR$ = "BasicCard ZC1.1" Or ATR$ = "BasicCard ZC1.2" Then Print ATR$ Else ' Maybe the ATR was re-configured by the user Print "BasicCard (unknown sub-type)" End If

Page 37: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

34

Case 2 ' Enhanced BasicCard Private Type@ : Type@ = Asc(CardType$(1)) Private SubType@ : SubType@ = Asc(CardType$(2)) Print "Enhanced BasicCard ZC" + Str$(Type@) + "." + Str$(SubType@) Case Else ' Print card name in quotes Print "BasicCard " + Chr$(34) + CardType$ + Chr$(34) End Select Rem Print the state, after adjusting for Compact and Enhanced cards If Len(CardType$) <= 2 Then Select Case State@ Case CECardStateTEST: State@ = PCardStateTEST Case CECardStateRUN: State@ = PCardStateRUN End Select End If FgCol = White : Print "State: " ; : FgCol = DataCol Select Case State@ Case CardStateNEW Print "NEW" ; : FgCol = White Print " (Configuration state -- this one slipped through the net!)" Case CardStateLOAD Print "LOAD" ; : FgCol = White Print " (no Basic program active)" Case PCardStatePERS Print "TEST" ; : FgCol = White Print " (Basic program loaded but inactive; file system active)" Case PCardStateTEST Print "TEST" ; : FgCol = White Print " (Basic program active, can be overwritten)" Case PCardStateRUN Print "RUN" ; : FgCol = White Print " (Basic program active, can't be changed)" Case Else Print "Unknown (" + Str$ (State@) + ")" : FgCol = White End Select Rem Print the EEPROM size or the Application ID If State@ <= CardStateLOAD Then Call PrintEepromInfo() Else Private ID$ : Call GetApplicationID (ID$) If SW1SW2 = swDataNotFound Then Print "Application ID not configured" Else Call CheckSW1SW2() Print "Application ID: " ; FgCol = DataCol : Print ID$ : FgCol = White End If End If Print End Sub ' PrintCardInfo

Page 38: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

35

Sub PrintEepromInfo() Private Start%, Len% : Call EepromSize (Start%, Len%) Call CheckSW1SW2() FgCol = White : Print "EEPROM start " ; FgCol = DataCol : Print "&H" Right$ ("0000" + Hex$ (Start%), 4) ; FgCol = White : Print ", length" ; FgCol = DataCol : Print Len% ; FgCol = White : Print "bytes" End Sub ' PrintEepromInfo

Slika 5.6. Primjer izvođenja programa CardInfo.exe za dvije kartice

Page 39: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

36

6. PLUG-IN LIBRARIES

U terminal programu, kao i kartičnim programima za Enhanced i Professional kartice, moguće je koristiti ugrađene biblioteke (plug-in libraries) [1].

Naziv biblioteke

Opis

Terminal

Enhanced BasicCard

Professional BasicCard

RSA Asimetrični algoritam kriptiranja AES Simetrični algoritam kriptiranja

EC-167 Eliptične krivulje (167 bita). Kriptografija s javnim ključem

EC-161 Eliptične krivulje (161 bit). Kriptografija s javnim

ključem

SHA-1 Algoritam za računanje sažetka poruke (hash broj) IDEA Simetrični algoritam kriptiranja MATH Matematičke funkcije

MISC

Razne funkcije npr. za generiranje slučajnih brojeva, rukovanje s vremenom i sl.

Tablica 6.1. Popis trenutno dostupnih ugrađenih biblioteka (plug-in libaries)

Na CD-u priloženom uz diplomski rad nalaze se programi koji ilustriraju pozive funkcija različitih algoritama za kriptiranje/dekriptiranje. U nastavku su opisane biblioteke koje sadrže funkcije za kriptiranje.

6.2. RSA: The Rivest-Shamir-Adleman Library

Kriptografija nazvana po prvim slovima autora (Razvijen od Ron Rivesta, Adi Shamira i Len Adelmana) izazvala je pravi potres u kriptografskim krugovima. Konceptom javnih i tajnih ključeva značajno je pridonijela sigurnosti komunikacije za običnog korisnika. Snaga RSA algoritma jest u velikim prostim brojevima, odnosno faktorizaciji velikih brojeva (>10100). Sve dok se ne otkrije neki dovoljno brzi i efikasni način faktorizacije velikih brojeva, RSA algoritam, ili neki njegov derivat. kriptografija je budućnosti [6].

6.1.1. OSNOVE ALGORITMA RSA

Neka su p i q dva VELIKA prosta broja. Brojevi n i z računaju se prema izrazima (6.1) i (6.2).

n = p*q (6.1) z = (p-1)*(q-1) (6.2)

Page 40: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

37

Odabere se broj e takav da je manji od z i relativno prost s obzirom na z, tj. najveća zajednička mjera im je 1. Uz takav e izračuna se d tako da vrijedi izraz (6.3), odnosno izraz (6.4).

ed mod z = 1 (6.3) ed = kz + 1 , k∈N (6.4)

Par (n, e) proglašava se javnim ključem, a par (n, d) tajnim ključem. Postupak kriptiranja sastoji se u tome da se poruka pretvori u zapis brojeva manjih od n, te se svaki od njih (M) kriptira prema izrazu (6.5). Dekriptiranje je analogno, ali s privatnim ključem. Izvorna se informacija dobiva se iz izraza (6.6).

C = Me mod n (6.5) M = Cd mod n (6.6)

6.1.2. IMPLEMENTACIJA

RSA biblioteka uključuje se naredbom: #Include RSA.DEF i sadrži procedure/funkcije koje koriste velike cijele brojeve, koji se prikazuju kao znakovni nizovi [1]. Function RsaPseudoPrime (x$, nRounds) Sub RsaGenerateKey (nBits, eBits, p$, q$, e$) Function RsaPublicKey (p$, q$) As String Sub RsaEncrypt (Mess$, n$, e$) Sub RsaDecrypt (Mess$, p$, q$, e$) Sub RsaPKCS1Sign (Hash$, p$, q$, e$, Sig$) Function RsaPKCS1Verify (Hash$, n$, e$, Sig$) Sub RsaPKCS1Encrypt (Mess$, n$, e$) Function RsaPKCS1Decrypt (Mess$, p$, q$, e$) Sub RsaOAEPEncrypt (Mess$, EP$, n$, e$) Function RsaOAEPDecrypt (Mess$, EP$, p$, q$, e$)

Slika 6.1. Primjer izvođenja programa Rsaterm.bas

Page 41: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

38

6.2 AES: Advanced Encryption Standard Library

Američka vlada, točnije NIST, početkom 1990-tih uviđa potrebu za novim simetričnim algoritmom koji bi jamčio sigurnost u nadolazećim godinama. DES algoritam bio je standardom još od 1977. godine, no prestao je zadovoljavati sigurnosne zahtjeve, dok ih je zamjenski algoritam TDEA zadovoljavao, ali nije bio učinkovit. U siječnju 1997. godine NIST najavljuje međunarodni natječaj za izbor AES algoritma (Advanced Encryption Standard). Pobjednikom natječaja 2. listopada 2000. godine proglašen je algoritam Rijndael, belgijskih autora Joana Daemena i Vincenta Rijmena. Naziv algoritma dobiven je kombinacijom njihovih prezimena [6].

6.2.1. OPIS ALGORITMA

Rijndael algoritam koristi promijenjivu dužinu bloka podataka, kao i promijenjivu dužinu ključa. Dužine ključa i bloka mogu biti 128, 192 ili 256 bita i nisu međusobno ovisne. Blok koji se kriptira smješten je u pravokutni niz bajta. Niz ima četiri reda, dok je broj stupaca zavisan o dužini ključa (4, 6, ili 8). Ključ ima istu strukturu podataka.

a00 a01 a02 a03 a04 a05 a10 a11 a12 a13 a14 a15 a20 a21 a22 a23 a24 a25 a30 a31 a32 a33 a34 a35

Slika 6.2. Primjer 192 bitovnog bloka podataka

k00 k01 k02 k03 k04 k05 k05 k05 k10 k11 k12 k13 k14 k15 k15 k15 k20 k21 k22 k23 k24 k25 k25 k25 k30 k31 k32 k33 k34 k35 k35 k35

Slika 6.3. Primjer 256 bitovnog ključa

Vektori duljine 4 bajta nazvani su riječima (WORD). Tekst se unosi u danu tablicu po redoslijedu a00, a10, a20, a30, a01, a02, a03, a04, a20, ….. Po istom principu unosi se i ključ k00, k10, k20, k30, k01, k02, k03, k04, k20, …. Ako je traženi bajt unutar bloka na mjestu n, onda se indeksi unutar bloka podataka računaju prema izrazima (6.7), (6.8) i (6.9). i = n mod 4 (6.7) j = ⎣n / 4⎦ (6.8) n = i + 4 * j (6.9)

Page 42: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

39

Broj krugova koje je potrebno izvesti prilikom kriptiranja (Nr) ovisi o duljini bloka teksta i duljini ključa (Nb i Nk - u bajtima), kao što prikazuje slika 6.4.

Nr Nb=4 Nb=6 Nb=8Nk=4 10 12 14 Nk=6 12 12 14 Nk=8 14 14 14

Slika 6.4. Broj krugova (Nr) kao funkcija dužine bloka (Nb) i ključa (Nk)

KRIPTIRANJE - DEKRIPTIRANJE

Kriptiranje tj. dekriptiranje odvija se u nekoliko krugova. Broj krugova određen je dužinom bloka i ključa. Prilikom kriptiranja koriste se generirani ključevi, i to za svaki krug po jedan različit. Rijndael_kriptiranje ()

blok = AddRoundKey(blok, kružniKljuč[0]) za i = 1 do Nr-1 čini blok = Round(blok, kružniKljuč[i]) FinalRound(blok, kružniKljuč[Nr-1])

Kraj Rijndael_dekriptiranje ()

InverseFinalRound(blok, kružniKljuč[Nr-1]) za i = Nr-1 do 1 čini

blok = InverseRound(blok, kružniKljuč[i]) blok = AddRoundKey(blok, kružniKljuč[0])

kraj InverseRound (blok, kružniKljuč)

addRoundKey(blok, kružniKljuč) mixColumn(blok) shiftRow(blok) byteSub(blok) kraj Round (blok, kružniKljuč) byteSub(blok) shiftRow(blok) mixColumn(blok)

addRoundKey(blok, kružniKljuč) kraj InverseFinalRound (blok, kružniKljuč)

addRoundKey(blok, kružniKljuč) shiftRow(blok) byteSub(blok) kraj

Page 43: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

40

FinalRound (blok, kružniKljuč) byteSub(blok) shiftRow(blok)

addRoundKey(blok, kružniKljuč) kraj DODAVANJE KRUŽNOG KLJUČA addRoundKey(blok, kružniKljuč) blok = blok ⊕ kružniKljuč // XOR operacija svih bitova kraj KRUŽNI POSMAK REDOVA BLOKA

Ovisno o redu bloka red se kružno posmiče u lijevo kao što je prikazano slikom 6.5.

Slika 6.5. Kružno posmicanje bitova u lijevo: prvi red se ne posmiče, drugi red se

posmiče za 1 bajt u lijevo, drugi za 2, a treći za 3 bajta

byteSub TRANSFORMACIJA

ByteSub transformacija koristi tablicu SBox ili njoj inverznu tablicu InverseSBox, zavisno o činjenici da li je riječ o kodiranju ili dekodiranju. byteSub(blok) za i=0 do 3 čini za j=0 do (Nb-1) čini blok[i][j]=SBox[blok[i][j] // ili InverseSBox za dekriptiranje kraj

ZAMJENA STUPACA

U ovoj funkciji koriste se matematičke operacije koje ovdje nisu detaljno opisane, već su samo dani naputci kako se one mogu ostvariti. Svaki stupac bloka posebno se množi kao polinom s funkcijom c(x)=’03’x3+’01’x 2+’01’x +’02’ unutar GF(28) područja prilikom kriptiranja, tj. s

Page 44: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

41

funkcijom c(x)=’0B’x3+’0D’x 2+’09’x +’0E’ prilikom dekriptiranja, gdje su koeficijenti zapisani u heksadekadskoj bazi. xtime(a)

ako(a&0x80) // slucaj kad a zapocinje s 1 kao najvisim bitom b=0x1B // inace a zapocinje s nulom kao najvisim bitom

inače b=0 a<<=1; // kružno smicanje ulijevo

// ako ja b==0 onda a^b==a inace a=a ⊕ b; // a=a XOR b vrati (BYTE)a; kraj mult(x, y)

result=0; za bit = 1 do 256 čini //prelazi se preko svih bitova 1 bytea

ako (x & (BYTE)bit)// kad se nadju oni bitovi x-a koji su ‘1’ result = result ⊕ y; // treba obaviti operacijucXOR y bit *= 2

y = xtime(y) vrati (BYTE) result

kraj mixColumn(blok)

za j=0 do Nb-1 čini za i=0 do 4 čini // jedan stupac promatra se kao da je polinom

// a0*x^3 +a1*x^2 +a2*x+a3 //i on se multiplicira sa c(x)='03'x3+'01'x 2+'01'x+'02' // unutar GF(28) područja za enkripciju ako_je (FLAG==enkripcija)

b[i] = mult(blok[i][j], 2) ⊕ mult(blok[(i+1)%4][j], 3) ⊕

blok[(i+2)%4][j] ⊕ blok[(i+3)%4][j]

// dok se za dekripciju multiplicira sa // c(x)='09'x3+'0D'x 2+'0B'x +'0E'

// unutar GF(28) područja inače ako je(FLAG==dekripcija)

b[i] = mult(state[i][j], 0xE) ⊕ mult(state[(i+1)%4][j], 0xB) ⊕ mult(state[(i+2)%4][j], 0xD) ⊕ mult(state[(i+3)%4][j], 0x9)

za i=0 do 4 čini blok[i][j]=b[i]

kraj

Page 45: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

42

PROŠIRENJE ORIGINALNOG KLJUČA

Originalni ključ proširuje se na potreban broj bitova. Taj broj jednak je dužini bloka pomnoženoj brojem krugova uvećanim za jedan (npr. za blok duljine 28 bita i 10 krugova duljina ključa se povećava na 1408 bita). Pri tome je ključ proširen u tzv. Prošireni_ključ. Funkcija proširenja za Nk<=6 glasi: KeyExpansion ( BYTE ključ[ 4*Nk ], WORD Prošireni_ključ[Nk * (Nr+1)] )

za i = 0 do (Nk-1) čini Prošireni_ključ[i]=( ključ[4*i], ključ[4*i+1],

ključ[4*i+2], ključ[4*i+3]) za i = Nk do (Nb*(Nr+1)) čini

temp=W[i-1] ako ( i % Nk ==0) onda temp=SubByte(RotByte(temp)) ⊕ Rcon ⎣i/Nk⎦ W[i]=W[i-Nk] ⊕ temp kraj dok je za Nk>6: KeyExpansion ( BYTE ključ[ 4*Nk ],WORD Prošireni_ključ[Nk * (Nr+1)] )

za i = 0 do (Nk-1) čini Prošireni_ključ[i]=( ključ[4*i], ključ[4*i+1],

ključ[4*i+2], ključ[4*i+3]) za i = Nk do (Nb*(Nr+1)-1) čini

temp=W[i-1] ako ( i % Nk == 0) onda temp=SubByte(RotByte(temp)) ⊕ Rcon ⎣i/Nk⎦ inače ako ( i % Nk == 4) temp=SubByte(temp) W[i]=W[i-Nk] ⊕ temp kraj

Funkcija RotByte već je opisana u prethodnim koracima, Rcon je tablica priložena na strani 36. Funkcija SubByte, u načelu jednaka funkciji ByteSub, a dana sljedećim opisom: SubByte(WORD temp){

za i = 0 do 4 čini b[i]=temp[i] // i-ti BYTE riječi temp

b[i]=SBox[b[i]] // koristi se tablica SBox vrati b[0:3] kraj

Iz opisanih funkcija je jasno da se prošireni ključ generira tako da se uzme originalni, prekopira na početak proširenog, te se iza njega gradi ostatak pomoću više operacija. Prilikom rada, iz tog proširenog ključa uzimaju se podključevi veličine bloka Nb.

Page 46: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

43

Potrebne tablice: int Rcon[30]={ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 }; BYTE SBox[256]={ 99, 124, 119, 123, 242, 107, 111, 197, 48, 1, 103, 43, 254, 215, 171, 118, 202, 130, 201, 125, 250, 89, 71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 183, 253, 147, 38, 54, 63, 247, 204, 52, 165, 229, 241, 113, 216, 49, 21, 4, 199, 35, 195, 24, 150, 5, 154, 7, 18, 128, 226, 235, 39, 178, 117, 9, 131, 44, 26, 27, 110, 90, 160, 82, 59, 214, 179, 41, 227, 47, 132, 83, 209, 0, 237, 32, 252, 177, 91, 106, 203, 190, 57, 74, 76, 88, 207, 208, 239, 170, 251, 67, 77, 51, 133, 69, 249, 2, 127, 80, 60, 159, 168, 81, 163, 64, 143, 146, 157, 56, 245, 188, 182, 218, 33, 16, 255, 243, 210, 205, 12, 19, 236, 95, 151, 68, 23, 196, 167, 126, 61, 100, 93, 25, 115, 96, 129, 79, 220, 34, 42, 144, 136, 70, 238, 184, 20, 222, 94, 11, 219, 224, 50, 58, 10, 73, 6, 36, 92, 194, 211, 172, 98, 145, 149, 228, 121, 231, 200, 55, 109, 141, 213, 78, 169, 108, 86, 244, 234, 101, 122, 174, 8, 186, 120, 37, 46, 28, 166, 180, 198, 232, 221, 116, 31, 75, 189, 139, 138, 112, 62, 181, 102, 72, 3, 246, 14, 97, 53, 87, 185, 134, 193, 29, 158, 225, 248, 152, 17, 105, 217, 142, 148, 155, 30, 135, 233, 206, 85, 40, 223, 140, 161, 137, 13, 191, 230, 66, 104, 65, 153, 45, 15, 176, 84, 187, 22 }; BYTE SBoxInverse[256] = { 82, 9, 106, 213, 48, 54, 165, 56, 191, 64, 163, 158, 129, 243, 215, 251, 124, 227, 57, 130, 155, 47, 255, 135, 52, 142, 67, 68, 196, 222, 233, 203, 84, 123, 148, 50, 166, 194, 35, 61, 238, 76, 149, 11, 66, 250, 195, 78, 8, 46, 161, 102, 40, 217, 36, 178, 118, 91, 162, 73, 109, 139, 209, 37, 114, 248, 246, 100, 134, 104, 152, 22, 212, 164, 92, 204, 93, 101, 182, 146, 108, 112, 72, 80, 253, 237, 185, 218, 94, 21, 70, 87, 167, 141, 157, 132, 144, 216, 171, 0, 140, 188, 211, 10, 247,228, 88, 5, 184, 179, 69, 6, 208, 44, 30, 143, 202, 63, 15, 2, 193, 175, 189, 3, 1, 19, 138, 107, 58, 145, 17, 65, 79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 150, 172, 116, 34, 231, 173, 53, 133, 226, 249, 55, 232, 28, 117, 223, 110, 71, 241, 26, 113, 29, 41, 197, 137, 111, 183, 98, 14, 170, 24, 190, 27, 252, 86, 62, 75, 198, 210, 121, 32, 154, 219, 192, 254, 120, 205, 90, 244, 31, 221, 168, 51, 136, 7, 199, 49, 177, 18, 16, 89, 39, 128, 236, 95, 96, 81,127, 169, 25, 181, 74, 13, 45, 229, 122, 159, 147, 201, 156, 239, 160, 224, 59, 77, 174, 42, 245, 176, 200, 235, 187, 60, 131, 83, 153, 97, 23, 43, 4, 126, 186, 119, 214, 38, 225, 105, 20, 99, 85, 33, 12, 125 };

Tablice Sbox i SboxInverse su inverzne, što znači da se primjerice na poziciji 0 kod tablice SBox nalazi broj 99, a na poziciji 99 kod tablice SboxInverse se nalazi broj 0.

Page 47: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

44

6.2.2. IMPLEMENTACIJA

AES biblioteka uključuje se naredbom #Include AES.DEF. sastoji se od jedne procedure koja kriptira i dekriptira Block$ (duljine 16 bajta) koristeći ključ Key$ ovisno o parametru Type% [1]. Function AES (Type%, Key$, Block$) As String Type% 128 Kriptiranje, ključ duljine 128 bita. Len (Key$) mora biti >= 16. 192 Kriptiranje, ključ duljine 192 bita. Len (Key$) mora biti >= 24. 256 Kriptiranje, ključ duljine 256 bita. Len (Key$) mora biti >= 32. -128 Dekriptiranje, ključ duljine 128 bita. Len (Key$) mora biti >= 16. -192 Dekriptiranje, ključ duljine 192 bita. Len (Key$) mora biti >= 24. -256 Dekriptiranje, ključ duljine 256 bita. Len (Key$) mora biti >= 32.

Slika 6.6. Primjer izvođenja programa Aesterm.bas

6.3. EC: Elliptic Curve

Eliptične krivulje (Elliptic Curve) su funkcije koje se mogu vrlo jednostavno nacrtati u (x,y) ravnini. No, kad su matematičari počeli proučavati točke u kojima krivulja prolazi cjelobrojnim koordinatama došli su do zanimljivih i važnih zaključaka. Korištenjem eliptičnih krivulja moguće je ostvariti metode kriptiranja s javnim ključem koje su, u usporedbi s ostalim metodama, brže i koriste manje ključeve. Razlog tome jest činjenica da koriste drugačiju grupu matematičkih operacija [8].

Metode kriptografije s javnim ključem uglavnom koriste dvije matematičke operacije: eksponenciranje i njoj inverznu operaciju – računanje diskretnog algoritma. Da bi se postigla što veća sigurnost algoritma eksponenciranje mora biti jednostavno u usporedbi s računanjem inverza (diskretni logaritam).

Problem računanja diskretnog logaritma kod eliptičnih krivulja razlikuje se od prethodnog primjera i nešto je teže, pa se često u implementacijama ta

Page 48: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

45

razlika koristi za smanjenje duljine ključa i povećanje brzine rada algoritma za određenu razinu sigurnosti.

Različiti algoritmi kriptiranja s javnim ključem (npr. SPEKE, Diffie-Hellman) mogu raditi s eliptičnim krivuljama ili nekom drugom pogodnom grupom i tako iskoristiti prednosti najboljih dostupnih implementacija.

Zamislimo beskonačno velik list papira sa označenim cjelobrojnim koordinatama (x,y). Na tom papiru nacrtajmo posebnu vrstu eliptične krivulje (ne elipsu) koja se širi u beskonačnost i prolazi konačnim brojem točaka sa cjelobrojnim koordinatama (x,y).

Skup takvih točaka na krivulji je prebrojiv i može se definirati operacija zbrajanja koja kombinacijom bilo koje dvije točke daje treću. Ta operacija zbrajanja nad ovim skupom točaka čini konačnu grupu.

Krivulja prikazana na slici 6.7. opisana je jednadžbom (6.10) i njezina grupa sadrži pet točaka. y2 + y = x3 - x2 (6.10)

Navedeni primjer nije od velike koristi za kriptiranje, ali je jednostavan i poslužit će za opis aritmetike nad točkama krivulje.

Slika 6.7. Primjer eliptične krivulje (pravci opisuju zbrajanje točaka krivulje ) ZBRAJANJE TOČAKA ELIPTIČNE KRIVULJE

Svaki pravac koji sječe eliptičnu krivulju sječe je u tri točke. Da bi se zbrojile dvije točke u i v potrebno je:

• nacrtati pravac koji prolazi točkama u i v , te tako naći treće

sjecište pravca i krivulje: w • nacrtati okomicu kroz w i naći sjecište z.

Page 49: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

46

Ukratko, ako su u, v i z točke krivulje, uz gore navedena pravila vrijedi izraz (6.11). u + v = z (6.11)

No, da bi se navedeno pravilo moglo iskoristiti, potrebno je definirati točku O (izvor - origin), odnosno točku u beskonačnosti. Ako se vratimo na početak, odnosno na priču s beskonačno velikim papirom na kojem je nacrtana krivulja, tada bi točka O bila smještena na vrhu papira. Iako ta točka nema definirane (x,y) koordinate pretpostavimo da je jedna od točaka na krivulji.

Slika 6.7. prikazuje primjer eliptične krivulje. Pravac kroz točke a i b sječe krivulju u «trećoj» točci: b. Taj je pravac na slici označen sa [a,b,b]. Postoji i zamišljeni vertikalni pravac [O,O,O]. Krivulja prolazi točkama (0,0), (1,-1), (1,0), (0,-1) i O, odnosno {a, b, c, d, O}. Suma a+b računa se crtanjem pravca [a,b,b], te se, kao treće sjecište, dobiva točka b. Analogno je dobiven izraz (6.12). a + a = b (6.12)

Pomoću pravca [a,a,c] dobiva se c, kao i pomoću pravca [O,c,b]. Zaključujemo da je zbroj bilo koje dvije točke s jednakim x koordinatama i y koordinatama suprotnog predznaka vrijedi O: a + d = O (6.13) c + b = O (6.14)

Množenje točaka krivulje skalarom u stvari je ponavljanje operacije

zbrajanja. Iz izraza (6.12) i (6.15) dobiva se (6.16). a + b = c (6.15) 3a = c (6.16)

Budući da je O neutralan element za zbrajanje (odnosno zbrajanje točke O s bilo kojom točkom ekvivalentno je množenju s jedinicom) vrijedi izraz (6.17).

v + O = v (6.17)

Page 50: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

47

KRIVULJE S VELIKIM BROJEM TOČAKA

Zadani su brojevi p i N. Broj p je prost broj. p = 6,277,101,735,386,680,763,835,789,423,207, 666,416,083,908,700,390,324,961,279. N = 6,277,101,735,386,680,763,835,789,423,337, 720,473,986,773,608,255,189,015,329.

Zamislimo tablicu (mrežu) s p redaka i stupaca. Nad takvim prostorom definirana je krivulja opisana jednadžbom (6.18), pri čemu su A i B pažljivo odabrani veliki brojevi. Takva krivulja sadrži točno N točaka koje, prema ranije opisanom pravilu, tvore grupu.

y2 = x3 + Ax2 + B (mod p) (6.18)

Iako su brojevi p i N prilično veliki, još su uvijek manji od brojeva koje koriste algoritmi RSA i Diffie-Hellman. Binarni zapis broja p opisan je relativno jednostavnim polinomom (6.19) što bitno olakšava računanje.

p = 2192 - 264 – 1 (6.19)

Polinom koji opisuje broj N nije tako jednostavan. Zanimljivo je da se brojevi p i N razlikuju samo u manje značajnoj polovici bitova. Iz navedenog je očito da, iako je ideju aritmetike nad točkama krivulje relativno jednostavno razumjeti, prilično je složeno odabrati pogodnu krivulju.

Implementacija algoritma u slučaju kartica tipa BasicCard sljedi standard IEEE P1363: Standard Specifications for Public Key Cryptography. Kriptografija eliptičnim krivuljama je grana kriptografije s javnim ključem koja je posebno pogodna za implementaciju kod pametnih kartica i to iz dva razloga:

• generiranje para ključeva (javni i tajni ključ) je dovoljno jednostavno za implementaciju na samoj kartici,

• potrebna duljina ključa je bitno manja nego kod nekih drugih poznatih metoda koje osiguravaju isti stupanj sigurnosti.

Podržane su operacije:

• generiranje ključeva po sjednicama • generiranje digitalnog potpisa • verifikacija digitalnog potpisa (samo za Terminal program).

Biblioteka EC–161 koristi točke sa 161-bit prime order, što je, po

pitanju sigurnosti, ekvivalentno RSA s ključevima duljine1024-bita [1].

Page 51: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

48

6.4. SHA–1: The Secure Hash Algorithm Library

Algoritam služi za generiranje sažetka (HASH broja) bilo kojeg niza podataka, a primijenjen na nizu bajtova bilo koje duljine uvijek daje rezultat (HASH) veličine 20 bajta. Svrha algoritma je mogućnost kontrole integriteta podataka za koje se generira HASH broj. Algoritam garantira da će svaka promjena originalnog niza podataka rezultirati generiranjem drugog HASH broja. Sa zanemarivom vjerojatnošću moguće je napraviti dva niza podataka za koje bi generirani HASH brojevi bili jednaki, čime se osigurava integritet podataka.

Ako se kasnije želi provjeriti da li se predani niz podataka, za koji je prethodno izračunat HASH, u međuvremenu promijenio, ponovno se izračuna HASH i usporedi se s ranije zapisanim. Ukoliko su HASH brojevi jednaki, niz podataka sigurno nije mijenjan [6].

6.4.1. OPIS ALGORITMA

PUNJENJE PORUKE

Kao što je već ranije bilo rečeno, SHA-1 služi za generiranje sažetka poruke. Zamislimo tu poruku, tj. datoteku s podacima, kao string. Duljina poruke je broj bitova koje zauzima (znači, prazna poruka je duljine 0 :) ). Ako je broj bitova poruke višekratnik broja 8, radi jednostavnosti, ta se poruka promatra u heksadecimalnom zapisu. Prilikom generiranja sažetka, SHA-1 obrađuje po 512 bitova poruke. Kako veličina poruke može biti proizvoljna, potrebno je na neki način osigurati da njezina duljina bude dijeljiva s 512, što se postiže punjenjem poruke. Da bi se generirala poruka duljine 512*n na kraj se dodaje "1", zatim m "0" i cjelobrojna vrijednost (integer) duljine 64 bita (duljina originalne poruke). Takva se poruka obrađuje kao n blokova duljine 512 bita.

Primjer punjenja poruke

Pretpostavimo da je poruka duljine 1 bit. Prije obrade algoritmom SHA-1, treba je nadopuniti, tako da joj duljina (u bitovima) bude višekratnik broja 512. Znači, prvo se na kraj dodaje "1". Nakon toga se dodaju "0", njih m (m ovisi o početnoj duljini poruke). Posljednjih 64 bita posljednjeg bloka od 512 bita rezervirana su za duljinu poruke.

Poruka: 01100001 01100010 01100011 01100100 01100101 a) Na kraj se dodaje "1": 01100001 01100010 01100011 01100100 01100101 1.

Page 52: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

49

Duljina originalne poruke je 40 bita. Nakon koraka a) duljina je 41, što znači da treba dodati 407 "0", čime se duljina povećala na 448 bita. b) HEX zapis: 61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000. c) Na kraj se dodaje duljina originalne poruke (40). 40 (hex) = 00000000 00000028 61626364 65800000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000028

SHA-1 koristi konstante: K(0), K(1), ... , K(79). Njihov HEX zapis:

K = 5A827999 ( 0 <= t <= 19) Kt = 6ED9EBA1 (20 <= t <= 39) Kt = 8F1BBCDC (40 <= t <= 59) Kt = CA62C1D6 (60 <= t <= 79).

RAČUNANJE SAŽETKA PORUKE

Nakon što je poruka nadopunjena, što znači da je njezina duljina višekratnik broja 512, računa se sažetak. Pri tome se koriste dva buffer-a sastavljena od po pet riječi duljine 32 bita i niza od osamdeset riječi od 32 bita. Pet riječi prvog buffer-a označimo sa A, B, C, D, E, a pet riječi drugog sa H0, H1, H2, H3, H4. Osamdeset riječi od po 32 bita označimo sa W0, W1,..., W79. Koristi se još i TEMP varijabla veličine jedne riječi. Prilikom računanja sažetka obrađuju se blokovi veličine 16 riječi: M1, M2,..., Mn opisani u prošlom poglavlju. Obrada svakog bloka Mi sastoji se od 80 koraka, ali prije toga je potrebno postaviti {Hi} na:

H0 = 67452301 H1 = EFCDAB89 H2 = 98BADCFE H3 = 10325476 H4 = C3D2E1F0.

Obrada bloka Mi:

a) Podijeli Mi u 16 riječi W0, W1, ... , W15. b) Za t = 16 do 79 Wt = S1(Wt-3 XOR Wt-8 XOR Wt- 14 XOR Wt-16). c) A = H0, B = H1, C = H2, D = H3, E = H4. d) Za t = 0 do 79 do TEMP = S5(A) + ft(B,C,D) + E + Wt + Kt; E = D; D = C; C = S30(B); B = A; A = TEMP; e) H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.

Page 53: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

50

Nakon obrade bloka Mn, sažetak poruke je niz duljine 160 bita kojeg predstavlja 5 riječi.

H0 H1 H2 H3 H4.

DRUGI NAČIN RAČUNANJA SAŽETKA

Navedeni postupak računanja pretpostavlja da je niz W0, ... , W79 zapisan kao niz od osamdeset riječi po 32 bita. Budući da se adrese od Wt-3, ... ,Wt-16 u koraku b) relativno jednostavno računaju, takav zapis je praktičan zbog minimiziranja vremena računanja, ali zahtijeva dosta memorije. Ukoliko se to želi izbjeći, {Wt } se može promatrati kao kružni niz, koji se može ostvariti poljem od šesnaest riječi po 32 bita: W[0], ... W[15]. U tom slučaju potrebna je još jedna pomoćna varijabla, čija HEX vrijednost iznosi:

MASK = 0000000F.

Obrada bloka Mi:

a) Podijeli Mi u 16 riječi W[0], ... , W[15], b) A = H0, B = H1, C = H2, D = H3, E = H4. c) Za t = 0 to 79 do s = t ^ MASK;

if (t >= 16) W[s] = S1(W[(s + 13) ^ MASK] XOR W[(s + 8) AND MASK] XOR W[(s + 2) ^ MASK] XOR W[s]); TEMP = S5(A) + ft(B,C,D) + E + W[s] + Kt; E = D; D = C; C = S30(B); B = A; A = TEMP;

d) H0 = H0 + A, H1 = H1 + B, H2 = H2 + C, H3 = H3 + D, H4 = H4 + E.

6.4.2. IMPLEMENTACIJA

Biblioteka se uključuje naredbom: #Include SHA–1.DEF. Ako je poruka sadržana u string varijabli njezin HASH (sažetak) može se izračunati pozivom funkcije:

Function ShaHash (S$) As String Za računanje sažetka dužih poruka koriste se procedure/funkcije: Professional BasicCard: Ostale kartice: Sub ShaStart (HashBuff$) Sub ShaStart() Sub ShaAppend (HashBuff$, S$) Sub ShaAppend (S$) Function ShaEnd (HashBuff$) As String Function ShaEnd() As String

Pozivom funkcije ShaStart() počinje računanje sažetka poruke, ShaAppend (S$) osigurava sukcesivne blokove podataka, ShaEnd() vraća

Page 54: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

51

sažetak poruke duljine 20 bajta. Professional kartice koriste argument HashBuff$ za pohranjivanje unutarnjeg stanja algoritma [1].

Slika 6.8. Primjer izvođenja programa sha1_term.bas

6.5. IDEA: International Data Encryption Algorithm

Prvi oblik IDEA algoritma, autora Xuejia Laia i Jamesa Masseya,

pojavio se 1990. godine pod nazivom PES (Proposed Encryption Standard). Nakon što je demonstrirana diferencijalna kriptoanaliza, ojačali su algoritam protiv takve vrste napada i takvoga nazvali IPES (Improved Proposed Encryption Standard). Godine 1992. ime mu je promijenjeno u IDEA (International Data Encryption Algorithm).

IDEA se bazira na impresivnim teoretskim temeljima. Iako je kriptoanaliza uznapredovala, algoritam do danas nije podlegao napadima akademske zajednice u pogledu njegovog probijanja. Sredinom devedesetih godina prošlog stoljeća smatrao se jednim od najboljih i najsigurnijih algoritama dostupnih javnosti.

IDEA je simetrični blok algoritam koji radi s blokovima podataka duljine 64 bita i ključem duljine 128 bita. Isti algoritam se koristi i za kriptiranje i za dekriptiranje [6].

Osnova algoritma je upotreba niže navedenih operacija različitih algebarskih grupa, a rade s blokovima duljine16 bita:

• XOR • Zbrajanje modulo 2^16 • Množenje modulo 2^16 + 1.

Algoritam je patentiran Europi i SAD-u. Za uporabu u komercijalne

svrhe potrebno odobrenje, dok se može slobodno koristiti u nekomercijalne svrhe. Njegova popularnost bazirana je na činjenici da je dio PGP-a. Patent je vlasništvo tvrtke Ascom-Tech AG.

Page 55: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

52

6.5.1. OPIS ALGORITMA

Blok duljine 64 bita djeli se na četiri podbloka duljine 16 bita : X1, X2, X3, X4. Ova četiri podbloka postaju ulazi u prvu rundu algoritma. Ukupno postoji osam rundi. U svakoj rundi nad četiri podbloka se vrši XOR, zbrajanje i množenje međusobno i sa šest podključeva veličine 16 bita. Između rundi, drugi i treći blok zamjenjuju mjesta. U finalnoj rundi se ta četiri podbloka (dobiveni nakon osam rundi) kombiniraju sa četiri podključa da bi dobili konačni izlaz iz algoritma.

U svakoj rundi obavljaju se operacije:

1. Pomnoži X1 prvim podključ. 2. Zbroji X2 drugim podključ. 3. Zbroji X3 trećim podključ. 4. Pomnoži X4 četvrtim podključ. 5. Izvrši XOR rezultata koraka (1) i (3). 6. Izvrši XOR rezultata koraka (2) i (4). 7. Pomnoži rezultat koraka (5) petim podključem. 8. Zbroji rezultate koraka (6) i (7). 9. Pomnoži rezultat koraka (8) šestim podključem. 10. Zbroji rezultate koraka (7) i (9). 11. Izvrši XOR rezultata koraka (1) i (9). 12. Izvrši XOR rezultata koraka (3) i (9). 13. Izvrši XOR rezultata koraka (2) i (10). 14. Izvrši XOR rezultata koraka (4) i (10).

Izlaz iz runde su četiri podbloka koji su rezultati koraka (11), (12), (13) i (14). Unutarnja dva podbloka mijenjaju mjesta (osim za finalnu rundu) i to je ulaz u novu rundu.

Nakon osam rundi, finalna runda je oblika :

1. Pomnoži X1 i prvi podključ. 2. Zbroji X2 i drugi podključ. 3. Zbroji X3 i treći podključ. 4. Pomnoži X4 i četvrti podključ.

Četiri podbloka se ponovo spoje i rezultat je kriptirani blok (64 bita).

GENERIRANJE PODKLJUČEVA

Algoritam koristi 52 podključa (šest za svaku od osam rundi i još četiri za finalnu izlaznu transformaciju). U startu se ključ od 128 bita podijeli u osam podključeva od po 16 bita. To je prvih osam podključeva (šest za prvu rundu i još dva za drugu). Nakon toga se ključ rotira za 25 bita u lijevo i ponovo podijeli na osam podključeva. Prva četiri se koriste u rundi 2, a poslijednja četiri u rundi 3. Ključ se ponovo rotira za 25 bita u lijevo i dobiva se osam podključeva. Postupak se nastavlja do kraja algoritma.

Page 56: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

53

DEKRIPTIRANJE

Dekriptiranje se obavlja na isti način. Dekripcijski podključevi su ili aditivni ili multiplikativni inverzi enkripcijskih podključeva. Za računanje ovih inverza potrebno je nešto vremena, ali se oni ionako samo jednom izračunavaju za svaki dekripcijski podključ.

Runda Enkripcijski podključevi Dekripcijski podključevi 1. Z1 (1)Z2 (1)Z3 (1)Z4 (1)Z5 (1)Z6 (1) Z1 (9)^-1 -Z2 (9) -Z3 (9) Z4 (9)^-1 Z5 (8) Z6 (8) 2. Z1 (2)Z2 (2)Z3 (2)Z4 (2)Z5 (2)Z6 (2) Z1 (8)^-1 -Z3 (8) -Z2 (8) Z4 (8)^-1 Z5 (7) Z6 (7) 3. Z1 (3)Z2 (3)Z3 (3)Z4 (3)Z5 (3)Z6 (3) Z1 (7)^-1 -Z3 (7) -Z2 (7) Z4 (7)^-1 Z5 (6) Z6 (6) 4. Z1 (4)Z2 (4)Z3 (4)Z4 (4)Z5 (4)Z6 (4) Z1 (6)^-1 -Z3 (6) -Z2 (6) Z4 (6)^-1 Z5 (5) Z6 (5) 5. Z1 (5)Z2 (5)Z3 (5)Z4 (5)Z5 (5)Z6 (5) Z1 (5)^-1 -Z3 (5) -Z2(5) Z4 (5)^-1 Z5 (4) Z6 (4) 6. Z1 (6)Z2 (6)Z3 (6)Z4 (6)Z5 (6)Z6 (6) Z1 (4)^-1 -Z3 (4) -Z2 (4) Z4 (4)^-1 Z5 (3) Z6 (3) 7. Z1 (7)Z2 (7)Z3 (7)Z4 (7)Z5 (7)Z6 (7) Z1 (3)^-1 -Z3 (3) -Z2(3) Z4 (3)^-1 Z5 (2) Z6 (2) 8. Z1 (8)Z2 (8)Z3 (8)Z4 (8)Z5 (8)Z6 (8) Z1 (2)^-1 -Z3 (2) -Z2 (2) Z4 (2)^-1 Z5 (1) Z6 (1)

finalna Z1 (9)Z2 (9)Z3 (9)Z4 (9) Z1 (1)^-1 -Z2 (1) -Z3 (1) Z4 (1)^-1

Z - oznaka za podključ, pri čemu je indeks broj ključa u rundi koja je označena u zagradi. Za (b) je a-ti ključ u rundi broj b. Oznaka "^-1” znači da se radi o multiplikativnom inverzu. Oznaka "–“ ispred podključa označava aditivni inverz.

Tablica 6.2. Enkripcijski i dekripcijski podključevi

6.5.2. IMPLEMENTACIJA

Biblioteka se uključuje naredbom: #Include IDEA.DEF, te sadrži dvije funkcije koje obje vračaju znakovni niz duljine 8 bajta [1]. Function IdeaEncrypt (Key$, Data$) As String Function IdeaDecrypt (Key$, Data$) As String

Key$ - ključ duljine 16 bajta Data$ - blok podataka za kriptiranje/dekriptiranje duljine 8 bajta.

Slika 6.9. Primjer izvođenja programa Ideaterm.bas

Page 57: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

54

7. UGRAĐENI ALGORITMI ZA KRIPTIRANJE

Za svaki od tipova kartica (Compact, Enhanced, Professional) implementirani su različiti algoritmi za kriptiranje. No, da bi se koristili, nije potrebno znati kako rade. O samom postupku kriptiranja/dekriptiranja naredbi i odgovora koje razmjenjuju terminal i kartica nakon poziva naredbe Start Encryption, pa sve do poziva End Encryption, brine operacijski sustav [1].

Tip kartice ID algoritma Naziv algoritma 11 SG-LSFR (Shrinking Generator- Linear Feedback Shift

Register) Compact

12 SG-LSFR sa CRC-om

21 DES (Data Encryption Standard) Enhanced 22 3DES (Triple DES)

23 DES sa CRC-om 24 3DES sa CRC-om

Professional

25 AES (Advanced Encryption Standard) Tablica 7.1. Algoritmi koje podržavaju pojedini tipovi kartica tipa BasicCard

U nastavku su detaljno objašnjeni algoritmi SG-LSFR, DES, 3DES, dok je algoritam AES objašnjen u poglavlju 6.

7.1. DES

DES (Data Encryption Standard) je simetrični algoritam kriptiranja razvijen sredinom 70-tih u IBM-u i ubrzo je prihvaćen kao federalni standard u SAD-u. Godine 1981. ANSI je potvrdio DES kao ANSI standard (ANSI X3.92 Data Encription Standard).

DES predstavlja kriptiranje koje transformira blokove podataka duljine 64 bitna u kriptirane blokove jednake duljine. Duljina ključa kriptiranja je 64 bita, od kojih je 8 u funkciji paritetnih bitova, tako da je efektivna duljina ključa 56 bita.

DES kriptiranje/dekriptiranje se provodi u nekoliko koraka, kako je to prikazano na slici 7.1.

Page 58: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

55

Slika 7.1. Dijagram toka za DES algoritam

Najprije se bitovi ulaznog bloka duljine 64 bita permutiraju nekom

permutacijom IP. Tada se ulazni blok podijeli na dva dijela po 32 bita, lijevi L0 i desni dio R0. Nad desnim blokom se obavlja funkcija f(Ri, Ki), odnosno f(Ri,K16-i+1) kod dekriptiranja, gdje je Ri desnih 32 bita, a Ki je 48 bitni ključ koji se generira iz zadanog tajnog ključa kriptiranja. Vrijednost dobivena operacijom EXILI između vrijednosti funkcije f i lijevih 32 bita podataka, postaje Ri+1, tj. desnih 32 bita za slijedeći korak iteracije. Li+1 za slijedeći korak je Ri. Nakon 16 takvih koraka blokovi se zamjenjuju te se spajaju i obavlja se konačna permutacija koja je inverzna početnoj, tj. IP-1. Dobivenih 64 bita su kriptirani blokovi. Budući da se nakon dvije uzastopne operacije EXILI nad istim brojem dobiva početna vrijednost, tj. a = (a XOR b) XOR b, postupak dekriptiranja može se provesti tako da se operacije obavljaju obrnutim redoslijedom.

Page 59: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

56

Zbog simetričnosti algoritma to se postiže tako da se kriptirani blok pusti kroz isti algoritam s tom razlikom da se umjesto ključa Ki u i-tom koraku upotrijebi ključ K16-i+1.

Postupak generiranja šesnaest ključeva duljine 48 bita od zadanog, tajnog ključa provodi se u nekoliko koraka. Prvo se pomoću zadane tablice permutacije iz ključa generiraju dva bloka od po 28 bita. Zatim slijedi 16 koraka: svaki se blok rotira u lijevo za određeni broj bita (ovisno o kojem je koraku riječ) te se iz nastalih blokova (2x28), pomoću permutacije zadane tablicom, generira ključ Ki, pri čemu je i broj koraka.

Funkcija enkripcije f najkritičniji je dio algoritma. Zbog njezine kompleksnosti, koliko je za sada poznato, ne postoji drugi način provaljivanja DES-a osim grubom računalnom silom. Vrijednost funkcije dobiva se u nekoliko koraka. Najprije se od ulaznih 32 bita (Ri) proširenjem zadanom tablicom dobiva 48 bita, te se nad tom vrijednošću i ključem Ki obavlja logička operacija EXILI. Dobivena se vrijednost (od 48 bita) dijeli na osam dijelova od po šest bita. Prvi i zadnji bit svakog dijela predstavlja adresu retka, a srednja četiri adresu stupca u tablici selekcije, odnosno, pomoću šest određena su četiri bita. Istim postupkom nad svakom šestorkom od ulaznih 48 bita selekcijom dobivamo 32 bita. Tih se 32 bita još permutira zadanom tablicom te se dobiva konačna vrijednost funkcije f. Potpuni DES algoritam može se opisati pseudokodom: DES_enkripcija ( blok [n], ključ )

// blok [n] - n bloka po 64 bita za enkripciju generiraj_ključeve ( ključ, K [16] ) za j = 1 do n čini

p = perm_IP ( blok [j] ) // tablica 1 L1 = p [1:32] // lijevih 32 bita bloka R1 = p [33:64] // desnih 32 bita bloka // pretp. da je prvi bit-prvi sa lijeva za i = 1 do 16 čini

Li+1 = Ri Ri+1 = Li XOR f ( Ri, Ki ) // Ri+1 = Li XOR f ( Ri, K16-i+1 ) za dekr. q [1:32] = R17 q [33:64] = L17 k_blok [j] = perm_IP-1 ( q ) // kript. j-ti blok

kraj f ( Ri, Ki )

ER = expand ( Ri ) // tablica 6 A = ER XOR Ki B = select ( A ) f = perm ( B ) // tablica 7

kraj

Page 60: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

57

Generiraj_ključeve ( ključ, K [16] ) C = f1 ( ključ ) // tablica 2 D = f2 ( ključ ) // tablica 3 za i = 1 do 16 čini

// rotacija u lijevo za Ni mjesta (tablica 4) C = rot_lijevo (C, Ni) D = rot_lijevo (D, Ni) Ki = perm_k ( C, D ) // tablica 5

kraj select ( A ) // od 48 bita odaberi 32

za i = 1 do 8 čini // dijelimo A na dijelove od po 6 bita ai = A [( i - 1 ) * 6 + 1 : i *6] r [1:1] = ai [1:1] r [2:2] = ai [6:6] c = ai [2:5] di = S ( i, r, c ) // tablica S select = d1 : d2 : d3 : d4 : d5 : d6 : d7 : d8

kraj

Tablice koje algoritam koristi ovdje nisu navedene ali se mogu naći na web adresi navedenoj u literaturi [6].

7.2. TRIPLE DES

TDEA (Triple Data Encryption Algorithm) je simetrični algoritam kriptiranja nastao na temeljima DES (Data Encryption Standard) algoritma. Alternativni nazivi za TDEA algoritam su 3DES ili TripleDES. U TDEA sustavu kriptiraju se blokovi duljine 64 bita. Simetrični ključ kriptiranja ima 192 bita. Jedan bit svakoga bajta je paritetni i zbog toga se efektivno koristi samo 168 bita.

TDEA algoritam zapravo se sastoji od tri poziva DES algoritma. Ključ TDEA algoritma čine tri ključa DES algoritma: KTDEA = KDES1 | KDES2 | KDES3. Ključ DES algoritma ima 56 bitova (+8 zaštitnih), a iz njega se određuje 16 podključeva ili parametara {K1, K2, K3, … , K16}. Najprije se 64 bitova jednog bloka izvornog teksta P, permutira na način određen pripadajućom tablicom, pa se dobiva niz bitova IP(P).

Rezultat permutacije se inicijalno dijeli na dvije polovine L0 i R0, od kojih svaka ima po 32 bita. IP(P) = L0 | R0. Nakon toga slijedi 16 ponavljanja gdje je i=1,2,...,16 indeks 32 bitnih podnizova Li i Ri. U svakom ponavljanju obavljaju se operacije: Li = Ri-1 , i Ri = Li-1 ⊕ f(Ri-1, Ki), gdje je Ki podključ generiran iz originalnog KDES ključa, a f(Ri-1, Ki) funkcija koja vrši preslagivanje bitova u Ri-1 ovisno o podključu Ki.

Nakon zadnjeg koraka obavlja se inverzna permutacija IP-1 od inicijalne IP. Konačni kriptirani blok teksta je IP-1(R16, L16).

Page 61: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

58

Kriptiranje algoritmom TDEA obavlja se pozivanjem standardnih DES funkcija, i to redoslijedom: kriptiranje (ključ KDES1) – dekriptiranje (ključ KDES2) – kriptiranje (ključ KDES3). Za dekriptiranje podataka postupak je obrnut: dekriptiranje (ključ KDES3) – kriptiranje (ključ KDES2) – dekriptiranje (ključ KDES1). Iz navedenog je očito da će se korištenjem kombinacije kod tajnog ključa K gdje je KDES1 = KDES2 ili KDES2 = KDES3, podaci kriptirani TDEA algoritmom biti jednaki podacima kriptiranim DES algoritmom.

TDEA algoritam pokazao se potrebnim nakon što su se razvile tehnike razbijanja DES tajnog ključa. DES tajni ključ veličine je 56 bita, pa se može pojaviti u 72,057,594,037,927,936 oblika. Nastankom novih tehnika probijanja ključa, taj veliki broj više nije dovoljan, pa se počeo koristiti ključ duljine 168 bita nad blokom podataka od 64 bita [6]. TDEA_enkripcija ( blok[n], ključ K) K1 = K[0:63] K2 = K[64:127] K3 = K[128:191] blok_pom [n] = DES_enkripcija ( blok [n], ključ K1 ) blok_pom2 [n] = DES_dekripcija ( blok_pom [n], ključ K2 ) blok_pom3 [n] = DES_enkripcija ( blok_pom2 [n], ključ K3 ) kraj TDEA_dekripcija ( blok[n], ključ K) K1 = K[0:63] K2 = K[64:127] K3 = K[128:191] blok_pom [n] = DES_dekripcija ( blok [n], ključ K3 ) blok_pom2 [n] = DES_enkripcija ( blok_pom [n], ključ K2 ) blok_pom3 [n] = DES_dekripcija ( blok_pom2 [n], ključ K1 ) kraj

7.3. SG-LSFR

Autori algoritma su D. Coppersmith, H. Krawczyk i Y. Mansour (“The Shrinking Generator”, Advances in Cryptology – CRYPTO ’93 Proceedings, Springer-Verlag, 1994.).

Algoritam koristi dva LFSR-a (Linear Feedback Shift Registers – posmačni registri s povratnom vezom), A i S, za generiranje niza bitova koji rade paralelno dok registar S ne generira bit 1 , te se u tom trenutku bit koji je generirao registar A pamti i koristi kao novi bit u nizu [1, 7].

LFSR je posmačni registar čiji su ulazi EXILI nekih njegovih izlaza. Izlazi koji utječu na ulaze nazivaju se pipe (taps). Niz pipa (taps) LFSR-a može se prikazati polinomom. Na primjer, ako su pipe na pozicijama 17 i 15 kao na slici 7.2., radi se o polinomu x17+x15+1.

Page 62: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

59

Slika 7.2. Primjer LFSR-a Compact kartice sadrže implementaciju ovog algoritma, pri čemu su

registri A i S duljine 31, odnosno 32 bit-a. Da bi ovakav sustav bio siguran od napada, važno je koristiti polinome PolyA i PolyS nepoznate napadaču (generira ih program KEYGEN.EXE). Tim je polinomima određen LFSR. Koristi se i tajni ključ K duljine 8 bajta poznat samo dvjema stranama koje komuniciraju, npr. kartici i terminalu. Obje strane generiraju po jedan slučajan broj duljine 4 bajta: terminal generira broj RA, a kartica RB. Na primjer: RA = &H2923BE84 RB = &HE16CD6AE Sljedeći kôd generira program KEYGEN.EXE: Declare Polynomials = &H609FBB9C,&HD23B770D 'LFSR: A i S Declare Key 99 = &H3E,&H1F,&HA7,&H55,&H81,&HDB,&HC3,&H25 ' ključ K

Za opis rada algoritma potrebno je sve dijelove podijeliti u riječi duljine 2 bajta. Time se dobivaju: RA(0) = &H2923 RA(1) = &HBE84 RB(0) = &HE16C RB(1) = &HD6AE K(0) = &H3E1F K(1) = &HA755 K(2) = &H81DB K(3) = &HC325 Registri A i S postavljaju se na vrijednosti ovisne i o generiranim slučajnim brojevima: A(0) = (RA(0) Xor K(0)) And &H7FFF = &H173C A(1) = RB(0) Xor K(1) = &H4639 S(0) = RB(1) Xor K(2) = &H5775 S(1) = RA(1) Xor K(3) = &HC325 Nula nije prihvatljiva inicijalizacijska vrijednost i predstavlja posljednji korak: If A(0) = 0 And A(1) = 0 Then A(1) = 1 If S(0) = 0 And S(1) = 0 Then S(1) = 1

Page 63: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

60

Navedene vrijednosti rezultiraju generiranjem niza: &H84B453C0C6F6….

Ukoliko je poruka koju treba kriptirati «abc», odnosno &H616263, kriptirana poruka dobiva se operacijom EXILI poruke i generiranog niza: 61 Xor 84 = E5 62 Xor B4 = D6 63 Xor 53 = 30

Kriptirana poruka je &E5D630. Budući da se radi o simetričnom algoritmu kriptiranja, postupak dekriptiranja je u stvari operacija EXILI kriptirane poruke i generiranog niza.

7.4. PRIMJER

Kao što je ranije bilo rečeno, o kriptiranju i dekriptiranju ugrađenim algoritmima brine operacijski sustav. Potrebno je pozvati funkciju StartEncryption i kao parametre joj proslijediti ID algoritma i ključ. Operacijski sustav automatski kriptira sve podatke koje razmjenjuju kartica i terminal dok ne naiđe na naredbu End Encryption.

Na CD-u priloženom uz diplomski rad nalazi se terminal program Echotest.bas koji demonstrira automatsko kriptiranje ugrađenim algoritmima na različitim tipovima kartica. Primjer za Enhanced kartice: Print "Algorithm &H21 = Single DES" Call StartEncryption (P1=&H21, P2=99, Rnd) : Call CheckSW1SW2() Call EchoTest() Call EndEncryption() : Call CheckSW1SW2() Print "Algorithm &H22 = TripleDES(koristi se kljuc duljine 16bytea)" Call StartEncryption (P1=&H22, P2=100, Rnd) : Call CheckSW1SW2() Call EchoTest() Call EndEncryption() : Call CheckSW1SW2()

Slika 7.3. Primjer izvođenja programa Echotest.bas za Enhanced kartice

Page 64: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

61

8. AUTENTIFIKACIJA

Podaci pohranjeni na kartici mogu podleći raznim napadima, bilo da se radi o neovlaštenom korištenju kartice (pokušaj uporabe tuđe kartice), neovlaštenom čitanju podataka s kartice ili njihovom mjenjanju. Upravo zato nužan je sustav autentifikacije. Terminal ne može čitati podatke s kartice ili pisati podatke na karticu ako za to nije ovlašten, a da bi znali da li je ovlašten, treba proći postupak obostrane autentifikacije. Isto tako svaka kartica ima svoju namjenu, pa se npr. korisnik koji ima karticu za logiranje samo na web aplikaciju ne može istom tom karticom logirati kao npr. administrator sustava i sl. I on mora proći proces autentifikacije.

Postoje različiti autentifikacijski protokoli, bolji i lošiji. Budući da je ideja bila pokazati da se BasicCard kartice mogu koristiti za postupak autentifikacije odabran je relativno jednostavan protokol. Korišteni autentifikacijski protokol shematski je prikazan slikom 8.1.

Slika 8.1. Shematski prikaz korištenog autentifikacijskog protokola Terminal ima pristup bazi ključeva u kojoj uz identifikator svakog

korisnika postoji zapisan i njegov ključ. Svaka kartica ima svoj jedinstveni identifikator i ključ koji postoji još zapisan samo u bazi ključeva. Na početku procesa autentifikacije terminal dohvaća identifikator s kartice i za njega

Page 65: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

62

potraži ključ u bazi ključeva. Ako je pronašao ključ njime kriptira poruku (npr. «a») i pošalje kartici takvu kriptiranu poruku. Kartica je dekriptira i uveća ASCII vrijednost svakog znaka za 1 (tako da se umijesto «a» dobije «b»), kriptira i vrati terminalu. Terminal takvu poruku dekriptira i provjeri da li je to stvarno početna poruka («a») kojoj je ASCII vrijednost svakog znaka uvećana za 1 (odnosno, u ovom slučaju, da li je primljen kriptirani «b»). Ako utvrdi da je to stvarno tako, kartica je prošla proces autentifikacije i komunikacija može početi.

Slika 8.2. Primjer izvođenja programa za autentifikaciju IDEA algoritmom

(ispisani su ID i tajni ključ)

Na CD-u priloženom uz diplomski rad nalaze se programi za

autentifikaciju korištenjem nekoliko različitih simetričnih algoritama za kriptiranje. Također postoji i program za programiranje kartica (Programator.BAS) koji radi pod pretpostavkom da postoji baza ključeva koji se dodjeljuju korisnicima, odnosno već unaprijed definirani parovi identifikator-ključ koji se zapisuju na karticu.

Page 66: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

63

9. PRIMJER APLIKACIJE – Xica

Dio diplomskog zadatka sastoji se u demonstraciji rada BasicCard pametnih kartica na primjeru programskog sustava koji koristi pametne kartice za ostvarenje popularnih Xica.

Xica (identifikacijska kartica studenta) je kartica koju student dobiva prilikom upisa na fakultet, a osim kao dokaz statusa studenta služi i za ostvarivanje studentskih prava (npr. pravo na subvencioniranu prehranu). Kartica je vlasništvo izdavača i na zahtjev mora biti vraćena.

U stvarnom sustavu postoje entiteti zaduženi za izdavanje kartica, koji od matičnih fakulteta dobivaju informacije koje zapisuju na kartice i predaju ih fakultetima. Svaki redovni student prilikom upisa na fakultet dobiva takvu karticu. Ukoliko dođe do oštećenja kartice ona se poništava i izdaje se nova. Ako student izgubi karticu izdaje mu se nova ali s drugim brojem kartice, te se broj stare kartice zapisuje u bazu nevažećih kartica. Svaki mjesec studentu se dodjeljuje iznos ovisno o mjestu prebivališta studenta (studenti s prebivalištem u Zagrebu dobivaju manji iznos od studenata s prebivalištem izvan grada Zagreba). Postoje različita ograničenja, kao na primjer: student smije dnevno kupiti maksimalno pet sokova i pet mliječnih proizvoda (mlijeko, čokoladno mlijeko, sladoled i sl.). Prilikom naplate na blagajni restorana SC-a provjerava se da li student ima pravo kupiti željene proizvode.

Za demonstraciju rada BasicCard pametnih kartica kao Xica izgrađen je pojednostavljen model stvarnog sustava.

Čine ga tri entiteta od kojih je jedan zadužen za programiranje kartica (zapisivanje podataka o studentu na karticu), drugi za provjeru podataka na karici i njezino poništavanje, a treći simulira rad restorana. Programi se nalaze na CD-u priloženom uz diplomski rad.

Slika 9.1. Primjer izvođenja programa Programator.bas

Page 67: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

64

Slika 9.2. primjer izvođenja programa Min_Xica.bas

Prilikom pokretanja programa koji simulira rad restorana potrebne su dvije datoteke: jedna s konfiguracijskim podacima, a druga s podacima o kupcu. Datoteka s konfiguracijskim podacima (npr. konf.txt) sadrži: 1. red: subvencija za studente iz Zagreba 2. red: subvencija za studente koji nisu iz Zagreba 3. red: broj grupa proizvoda za koje postoje ograničenja

(u ovom slučaju 5)

Za svaku od robnih grupa postoje po dva zapisa: - šifra robne grupe (npr. 1) - broj proizvoda iz te grupe koje student može dnevno kupiti (u

ovom slučaju je to za grupu sa šifrom 1 – 6 kom, šifrom 2 – 7 kom …)

Slika 9.3. Primjer konfiguracijske datoteke

Page 68: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

65

Datoteka s podacima o kupcu (npr. kupac1.txt) sadrži podatke: 1. red: datum kupnje (radi jednostavnijeg uspoređivanja datum se pohranjuje

kao broj ggmmdd – u ovom slučaju 040907 označava datum 07.09.2004.)

2. red: ukupan iznos računa (u ovom slučaju 10Kn) Za svaku od robnih grupa s ograničenjima postoje dva zapisa:

- šifra grupe - broj kupljenih proizvoda iz te grupe (u ovom slučaju za grupu 1 – 5 kom,

za grupu 2 – 3 kom, dok za ostale grupe 0 kom).

Slika 9.4. Primjer datoteke s podacima o kupcu

Program Restoran.bas za pohranjivanje podataka o broju kupljenih

proizvoda koristi datotečni sustav kartice: na kartici postoji datoteka u koju se zapisuje novo stanje (datum zadnje kupovine, broj grupa s ograničenjima, te za svaku grupu njezina šifra i količina proizvoda kupljenih u tom danu).

9.1. PRIMJER UPORABE ČITAČA-PRIVJESKA (BALANCE READER)

Trenutno je na tržištu dostupan čitač-privjesak s display-om za prikaz

do 10 znakova. Prva četiri mogu prikazivati alfanumeričke, dok posljednjih šest može prikazivati numeričke (uključujući i heksadecimalne) znakove. Može se primijeniti za sve pametne kartice koje koriste ISO-7816 kompatibilan T=1 protokol.

Čitač-privjesak komunicira s karticom tako da joj šalje naredbu (APDU) čim je ona umetnuta u čitač. Tom naredbom je kartica obaviještena o mogućnostima čitača. Kao odgovor na nju kartica mora poslati informacije o podacima koje treba prikazati. Ukoliko je potrebno, odnosno ako je to kartica

Page 69: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

66

tražila, čitač-privjesak ponavlja naredbu, čime kartica dobiva mogućnost odgovora daljnjim podacima koje treba prikazati. Da bi kartica na svaku naredbu mogla odgovoriti drugim podacima, svaka naredba sadrži redni broj koji počinje od 0 i povećava se za 1 svakim pozivom naredbe.

Kod kartica tipa BasicCard svaki APDU poziv programira se kao poziv svake druge naredbe unutar kartičnog programa. Prototipovi za te naredbe nalaze se u include datoteci \basiccrd\inc\preader.def i različiti su za Compact i Enhanced kartice [3].

Enhanced kartice: Declare Command &HC8 &H00 PRDisplay(RecordNumber as Byte, DataFormat as Byte, DigitCount as Byte, _ DecimalPoint as Byte, Delay as Byte, MoreData as Byte, _ Data as String) Compact kartice: Declare Command &HC8 &H00 PRDisplay(RecordNumber as Byte, DataFormat as Byte, DigitCount as Byte, _ DecimalPoint as Byte, Delay as Byte, MoreData as Byte, _ Data as String<=11)

Slika 9.5. Čitač-privjesak

9.1.1. PRIMJER - PRIKAZ PREOSTALOG IZNOSA ZA SUBVENCIJU NA Xici

Prilikom umetanja Xice (opisane u prethodnom poglavlju) u čitač-privjesak na display-u se ispisuje preostali iznos za subvenciju. #Include PReader.def Command &HC8 &H00 PRDisplay(RecordNumber as Byte, DataFormat as_ Byte, DigitCount as Byte, DecimalPoint as Byte, Delay as Byte,_ MoreData as Byte, Data as String) Dim BalanceData as Long Dim BalanceDataStr as String*4 at BalanceData

Page 70: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

67

select case RecordNumber case 0 DataFormat=PRNumSign ' Broj s predznakom DigitCount=0 ' Prikaži sve znamenke DecimalPoint=3 ' Decimalna točka na 3. znamenki

' (2 decimalna mjesta) Delay=0 ' Prikazuj stalno dok je kartica

' umetnuta MoreData=PRNoMoreData ' Nakon ovih podataka nema sljedećih

' podataka za prikaz BalanceData=Iznos ' Long u string konverzija

Data=BalanceDataStr ' i pošalji čitaču-privjesku case else DataFormat=PRAlpha DigitCount=0 DecimalPoint=0 Delay=1000 / PRDelayUnits ' Prikazuj 1 sekundu MoreData=PRNoMoreData Data="ERR" ' Poruka o pogrešci: ERR end select End Command

Page 71: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

68

10. TEHNIČKI OPIS

Tijekom izrade diplomskog rada korištene su Enhanced kartice, verzije ZC3.7 i ZC3.9 opisane u poglavlju 10.2. 10.1. COMPACT BasicCard Dostupna je samo jedna verzija Compact kartica: BasicCard ZC1.1 sadrži 1K korisnički programirljivog EEPROM-a,

dostupna od lipnja 1998. 10.2. ENHANCED BasicCard

Izvorne Enhanced kartice – Enhanced BasicCard Serija 2 – više nisu podržana, već su zamijenjene sadašnjima – Serija 3: BasicCard ZC3.1 2K korisnički programirljivog EEPROM-a. Dostupna

samo u velikim količinama. BasicCard ZC3.2 4K korisnički programirljivog EEPROM-a. Dostupna

samo u velikim količinama. BasicCard ZC3.3 8K korisnički programirljivog EEPROM-a. Dostupna od

prosinca 1999. BasicCard ZC3.31 Funkcijski identična BasicCard ZC3.3. BasicCard ZC3.4 16K korisnički programirljivog EEPROM-a. Dostupna od

prosinca 19999. BasicCard ZC3.5 6K korisnički programirljivog EEPROM-a, Elliptic Curve

Fast Signature Algorithm (EC-FSA). Dostupna od veljače 2000.

BasicCard ZC3.6 14K korisnički programirljivog EEPROM-a, Elliptic Curve

Fast Signature Algorithm (EC-FSA). Dostupna od veljače 2000.

Gore navedene dvije EC-FSA kartice sadrže zaštićen algoritam za generiranje potpisa korištenjem EC-161 (eliptične krivulje) u svega 1,2 s. BasicCard ZC3.7 Novija 2K verzija, ekvivalentna BasicCard ZC3.1. BasicCard ZC3.8 Novija 4K verzija, ekvivalentna BasicCard ZC3.2. BasicCard ZC3.9 Novija 8K verzija, ekvivalentna BasicCard ZC3.3.

Page 72: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

69

Navedene novije verzije izdane su zbog sklopovskih promjena na chip-u, dok je funkcionalnost ostala ista [1, 9]. 10.3. PROFESSIONAL BasicCard Kartice tipa Professional od ostalih kartica razlikuju dvije važne stvari: 1. BasicCard operacijski sustav pohranjen je u programirljivom Flash

ROM-u, tako da se nove verzije kartica mogu proizvoditi na zahtjev bez skupog procesa programiranja ROM-a.

2. Alat ZeitControl MultiDebugger alat više ne treba znati u naprijed

točnu verziju kartice jer svaka verzija Professional kartice ima svoju konfiguracijsku datoteku u kojoj su svi podaci koje tom alatu trebaju. Drugim riječima, nove verzije Professional kartica mogu se izdati a da pri tome nije potrebno mijenjati alat MultiDebugger.

Sve Professional kartice sadrže ugrađene kriptografske algoritme s

javnim ključem: serija ZC4.x podržava RSA algoritam, dok serija ZC5.x podržava algoritam EC-167. Broj verzije kartice x (ZC4.x, ZC5.x) određuje količinu korisnički programirljivog EEPROM-a: 2x kilobajta [1, 9].

Verzija kartice

EEPROM

T=0

T=1

AES

DES

RSA

EC-167

SHA-1

ZC4.5A 30K ZC4.5D 30K ZC5.4 16K

Tablica 10.1. Trenutno dostupne verzije Professional kartica …

Page 73: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

70

11. ZAKLJUČAK BasicCard je prva pametna kartica koju je moguće programirati u Basicu.

Jednostavna je za uporabu, dostupna svima, ne zahtijeva veliko predznanje kako bi se mogla koristiti i što je najvažnije od svega relativno je jeftina.

Zašto je BasicCard dobar izbor? Programski jezik Basic razvijen je u

vrijeme dok računala nisu imala veliki kapacitet. A to je upravo problem danas s pametnim karticama. Dakle, programeri su trebali jezik pogodan za ograničene kapacitete, a Basic se tu savršeno uklapa.

Naravno da postoje moderniji programski jezici, ali pitanje je koliko je to u

stvari ovdje potrebno. Najvažnija razlika između kartica tipa BasicCard i Java ili MultiOs kartica nije moderniji i programerima draži programski jezik, nego cijena. A formula kojom je ona ovdje određena je relativno jednostavna: bolji, jači smart card chip implicira višu cijenu. Java i MultiOs su resource-hungry, drugim riječima, za relativno jednostavne aplikacije trebaju dosta skupe smart card chipove (npr. 1kB RAM-a, 64 kB ROM-a i 32 kB EEProm-a), dok za Enhanced BasicCard treba 256 bajta RAM-a, 17 kilobajta ROM-a i 8 kilobajta EEPROM-a, što je 1/3 cijene iz prethodnog primjera. Ovaj rad demonstrira uporabu pametnih kartica tipa BasicCard za autentifikaciju korištenjem jednog pojednostavnjenog protokola, te Xicu ostvarenu karticom tipa BasicCard . Terminal programi pisani su u programskom jeziku ZC-Basic. BasicCard kartice moguće je uklopiti u već postojeće sustave korištenjem API naredbi (trenutno dostupni API-ji za C, C++, VB, Delphi).

Page 74: RAZVOJNO OKRUŽENJE ZA BasicCard PAMETNE KARTICEsigurnost.zemris.fer.hr/pk/2004_rus/diplomski_rus.pdf · 2.1 PAMETNA KARTICA (SMART CARD) Pametna kartica prikazana je na slici 2.1

71

12. LITERATURA [1] TONY GUILFOYLE, The ZeitControl BasicCard Family, The Compact,

Enhanced and Professional BasicCards, verzija: 4.30, 12. 02. 2002., [2] WOLFGANG RANKL, WOLFGANG EFFING, Smart Card Handbook,

treće izdanje, John Wiley & Sons, München, 2002. [3] ZeitControl Balance Reader Manual, verzija: 1.02 [4] MICHAEL PETIG, BasicCard C-API Programming Manual,

verzija: 4.30.00, 05.03.2002. [5] MICHAEL PETIG, BasicCard Crypto API C/C++ Programming Manual,

verzija: 1.01, 31.03.2000. [6] Računalna sigurnost (AES, DES, 3DES, IDEA, RSA, SHA-1):

sigurnost.zemris.fer.hr [7] Shrinking generator:

www.hack.gr/users/dij/crypto/overview/streamciphers.html [8] Eliptične krivulje:

www.world.std.com/¨~dpj/elliptic.html [9] BasicCard naslovna stranica:

www.BasicCard.com