|
IS21 serija čitača MIFARE kartica - Win API (Application Programming Interface) IS21 serija čitača radi sa Mifare® Classic serijom beskontakih kartica čiji je komunikacioni interfejs saglasan ISO/IEC 14443 A standardu. Budući da MIFARE® kartice imaju mnoštvo specifičnosti koje nisu podržane ni u jednom standardnom Win API, IS21 serija čitača MIFARE kartica se isporučuje sa zasebnim API interfejsom koji je sadržan u DLL biblioteci pod nazivom is21.dll |
||
|
Alternativno se sa ovim čitačima može komunicirati preko virtuelnog COM porta i upotrebom odgovarajućeg raspoloživog IS21-VCOM protokola. Na ovaj način IS21 čitači se mogu koristiti na ma kojoj platformi za koju još uvek ne postoji direktna softverska podrška (Mac OS X, Linux, Linux x86_64, Windows CE (4.2, 5.2, 6.0 za čitav spektar procesora), Windows Mobile (verzije 5 i 6 za x86), PocketPC 2003 (za x86 i ARM/XScale procesore)). Specifikacija API (posredno se odnosi i na IS21-VCOM protokol) sadrži funkcije koje: ● emuliraju linearni adresni prostor na MIFARE® karticama, Ovaj način adresiranje podataka vrši se u skladu sa adresiranjem prema dokumentaciji proizvođača MIFARE® kartica. |
|
Omogućuje 4 metoda dokazivanja autentičnosti (authentication) prilikom pristupa podacima na kartici: ● “Reader key authentication” - podrazumevani mod dokazivanja autentičnosti. Ključevi za ovaj mod su smešteni u čitač (maksimalno 32 ključa sa indeksima od 0 do 31) i odgovarajućim funkcijama se šalje indeks ključa. Kod ove metode dokazivanja autentičnosti, u slučaju funkcija koje emuliraju linearni adresni proctor podrazumeva se upotreba istog ključa za sve sektore (ili bar za one koji su u zadanom opsegu za linearno adresiranje). |
|
|
● “Automatic key mode 1” (AKM1) i “Automatic key mode 2” (AKM2) su opcioni, automatski modovi dokazivanja autentičnosti. Omogućuju automatski izbor ključeva pohranjenih u čitaču na osnovu bloka koji se adresira ili kombinacije adresa sektora i blokova u okviru sektora. Ovi modovi mogu se koristiti i kod emulacije linearnog adresnog prostora jer se nakon konverzije adresa u softveru čitača vrši automatski izbor ključa za proveru autentičnosti datog bloka odnosno sektora. Razlika između AKM1 iAKM2 je samo u načinu na koji se vrši automatski izbor ključeva A i B. |
|
Pri korišćenju AKM1 moda uzima se da indeksi ključeva u čitaču od 0 do 15 odgovaraju A ključevimaza sektore 0 do 15 i da indeksi ključeva u čitaču od 16 do 31 odgovaraju B ključevima za sektore 0 do 15. Kada se koristi AKM2 mod, parni indeksi ključeva u čitaču (0, 2, ... , 28, 30) se uzimaju kao A ključeviza sektore 0 do 15 respektivno a neparni indeksi ključeva u čitaču redom odgovaraju B ključevima za sektore 0 do 15. Ovo svakako važi za kartice MIFARE® 1k. Kod MIFARE® MINI kartica može se koristiti samo po prvih pet ključeva A i B (u AKM1indeksi ključeva 0 do 4 za A ključeve i 16 do 20 za B ključeve i u AKM2 modu za A ključeve indeksi 0, 2, 4, 6 i 8 a za B ključeve 1, 3, 5, 7 i 9) jer kartice sadrže samo toliko sektora. Kod MIFARE® 4k imamo 40 sektora te su donji i gornji adresni prostori od po 2k organizovani. Kod ovih kartica se AKM1 i AKM2 koriste tako da isti indeksi ključeva u čitaču odgovaraju sektorima 0 do 15 i 16 do 32. Za poslednjih 8 sektora (sektori 32 do 39) koriste se isti ključevi čitača koji odgovaraju sektorima 0 do 7 odn. 16 do 23. |
![]() |
Poslednji metod dokazivanja autentičnosti je “Provided key” (PK). U ovom modu se ne koriste ključevi pohranjeni u čitač već se API funkcijama ključevi prosleđuju direktno iz koda. Ovaj mod ne pruža sigurnost pa se se njegovo korišćenje ne preporučuje osim u strogo kontrolisanim uslovima ili u svrhu testiranja. |
|
Implementirana je posebna funkcija za upis sector trailer blokova na karticama, kojom je veoma uprošćen proračun vrednosti bajtova u kojima su sadržani bitovi pristupa. Ovim je izbegnuta opasnost da se trajno blokiraju celi sektori na kartici usled pogrešnog formata bitova kojima se kontroliše pristup blokovima datog sektora. Za one iskusnije, koji su već radili sa MIFARE karticama, ostavljena je tzv. unsafe varijanta za manipulisanje sektor trailer blokovima. ● Za emulaciju linearnog moda postoji metod koji, uslovno rečeno, formatira sve sector trailer blokove kartice na isti način tj. za celu karticu se postavljaju jedinstveni ključevi i bitovi pristupa. Ovim je veoma pojednostavljen postupak inicijalizacije kartica za linearni pristup. ● API sadrži skup funkcija za manipulisanje value blokovima na kartici. Podržani su upis i čitanje četvorobajtnih vrednosti pri čemu se value blokovi automatski formatiraju po odgovarajućoj specifikaciji. Takođe je podržano inkrementiranje i dekrementiranje value blokova. |
||
|
|
|
Opšte funkcije za rad sa čitačem
GetReaderType: Vraća identifikator tipa uređaja. Kod IS21 ova vrednost je 0xD1150021. GetReaderSerialNumber: Vraća serijski broj uređaja. ReaderSoftRestart: Softverski restartuje čitač. Rezultat ove funkcije je postavljanje svih radnih parametara čitača na podrazumevane vrednosti i resetovanje bliskog RF polja čime su praktično resetovane sve kartice u polju. ReaderReset: Hardverski resetuje svu digitalnu logiku u čitaču. Ovu funkciju generalno treba pozivati samo u slučaju da ReaderSoftRestart() nije dala željene rezultate. ReaderClose: Zatvara port čitača. Ovim je omogućen pristup čitaču iz drugih procesa. ReaderKeyWrite: U čitač postavlja ključeve za proveru autentičnosti prilikom čitanja i manipulacije podatacima na karticama. Ključevi se upisuju u poseban prostor EEPROM-a čitača koji se više ne može čitati čime je obezbeđena zaštita od neautorizovanog pristupa.
ReaderUISignal: Funkcija služi za kontrolu svetlosnih i zvučnih signala čitača. Postoji 4 moda svetlosne signalizacije i 5 modova zvučne
|
|
|
Funkcije za rad sa karticama Po vrsti podataka sa kojima rade funkcije su razvrszane na:
Prema načinu adresiranja podataka na kartici ove funkcije dele se na:
Funkcije za manipulaciju podataka na karticama razvrstavaju se po metodi provere autentičnosti na skupove funkcija prepoznatljivih po sufiksu (skraćenica) metoda za proveru autentičnosti:
|
|
|
Opšte funkcije za rad sa karticama GetCardId: Ova funkcija vraća identifikator tipa i serijski broj kartice koja se nalazi u polju čitača. Čitač podržava samo kartice koje imaju četvorobajtni serijski broj (UID size: single) po standard ISO/IEC 14443 A. Funkcije koje emuliraju linearni adresni prostor
Ove funkcije služe za čitanje podataka na kartici koristeći emulaciju linearnog adresnog prostora. Na osnovu sufiksa u nazivima funkcija koristi se određeni metod za dokazivanje autentičnosti:
Ove funkcije služe za upis podataka na karticu koristeći emulaciju linearnog adresnog prostora. Na osnovu sufiksa u nazivima funkcija koristi se određeni metod za dokazivanje autentičnosti:
Opis funkcija: Ove funkcije se koriste za upis novih ključeva A i B kao i access bitova u trejlere svih sektora kartice. Omogućeno je i setovanje devetog bajta trejlera (bajt opšte namene u koji se može upisati bilo koja vrednost). U sve trejlere sektora na kartici se postavljaju iste vrednosti tako da za celu karticu važe isti ključevi i prava pristupa. Kako je pre upisa u trejlere sektora neophodno prvo izvršiti dokazivanje autentičnosti na osnovu prethodnih ključeva, ove funkcije su eventualno pogodne za inicijalizaciju novih kartica (gde se autentikacija vrši transportnim ključevima odn. svi bajtovi ključa su 0xFF) ili za reinicijalizaciju kartica koje imaju iste ključeve i prava pristupa za sve sektore. Ovde se svakako uvek mora voditi računa o prethodno postavljenim pravima pristupa (access bitovima) na karticama kojima je možda onemogućena promena nekog od ključeva ili bitova za kontrolu prava pristupa. Veću fleksibilnost u iniciranju trejlera sektora pružaju funkcije iz grupe SectorTrailerWrite:
|
|
Funkcije za rad sa blokovima podataka
Opis funkcija: Ova grupa funkcija služi za čitanje sadržaja blokova kartice. Uvek se čita se ceo blok odn. 16 bajtova bloka. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63). Ovim funkcijama može se čitati i sadržaj sektor trtejlera (njegov dostupni deo za čitanje, u zavisnosti od postavljenih prava pristupa).
Ove funkcije rade isto što i grupa funkcija BlockRead i služe za čitanje sadržaja blokova kartice. Jedina razlika je što se koristi sektorsko adresiranje što podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15. Uvek se čita ceo blok odn. 16 bajtova bloka. Ovim funkcijama može se čitati i sadržaj sektor trtejlera (njegov dostupni deo za čitanje, u zavisnosti od postavljenih prava pristupa).
Opis funkcija: Ove funkcije služe za upis podataka (16 bajtova odjednom) u blokove na kartici. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd. poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63). Ovom grupom funkcija nije moguće direktano upisivati podatke u trejlere sektora. Tome služe posebne funkcije, SectorTrailerWrite i SectorTrailerWriteUnsafe.
FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER.
Opis funkcija: Ove funkcije rade isto što i grupa funkcija BlockWrite i služe za upis podataka (16 bajtova odjednom) u blokove na kartici. Jedina razlika je što se koristi sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15. Ni ovom grupom funkcija nije moguće direktano upisivati podatke u trejlere sektora, za šta su predviđene posebne funkcije, SectorTrailerWrite i SectorTrailerWriteUnsafe.
FORBIDEN_DIRECT_WRITE_IN_SECTOR_TRAILER.
Opis funkcija: Ove funkcije služe za upis podataka u trejlere sektora na kartici. Funkcije mogu koristiti i blokovsko adresiranje sektor trejlera kao i sektrosko adresiranje što se određuje parametrom ucAddressingMode. U slučaju blokovskog adresiranja prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63. Ova grupa funkcija pojednostavljuje manipulaciju bitovima za podešavanje prava pristupa blokovima (access bits) i minimalizuje mogućnost trajnog blokiranja celog sektora usled pogrešnog formatiranja ovih bitova. Formatiranje access bitova vrši čitač neposredno pre upisa. Korisnik API može da odabere odgovarajuća prava pristupa po blokovima, koja su predstavljena vrednostima 0 do 7, i da ih prosledi ovim funkcijama.
*) Ako su prava pristupa za trejler odgovarajućeg sektora postavljena tako da je moguće čitatiključ B, on ne može služiti za autentikaciju ni u jednom od slučajeva.Ovim funkcijama se takođe postavljaju novi ključevi sektora ukoliko je to dozvoljeno pravima pristupa.
Opis funkcija: Ove funkcije imaju istu namenu poput funkcija iz grupe SectorTrailerWrite s tim što se prosleđuje “sirov” sadržaj sektor trejlera i moguće su greške prilikom formatiranja vrednosti access bitova za upis. Ove funkcije su namenjene iskusnim programerima u radu sa MIFARE karticama. Sve što je navedeno za grupu funkcija SectorTrailerWrite važi i za ove funkcije izuzev opcije prosleđivanja “sirovih” podataka za upis u sektor trejler.
Kada se koristi sektorski adresni mod onda se, npr. Kod MIFARE® 1k kartice, može kretati od 0 do 15 (ova kartica ima 16 sektora). Kod istog tipa kartice se u blokovskom modu adresiranja mogu koristiti vrednosti 0 do 63 s tim što dolazi do greške ukoliko adresirani blok nije ujedno i sector trejler.
|
|
Funkcije za rad sa “value” blokovima Value odnosno vrednosni blokovi predstavljaju opcionu funkcionalnost MIFARE® kartica. To je zapravo režim u kome ceo blok podataka na kartici (16 bajtova) predstavlja jednu četvorobajtnu vrednost. U ovaj režim se može ubaciti bilo koji blok podataka na kartici (naravno osim bloka 0, nultog sektora i trejlera sektora. Vrednosti u value blokovima su formatirane na poseban način i pored zapisa same vrednosti sadrže i jednobajtnu adresu što korisnicima pruža dodatnu mogućnost da implementiraju backup sistem. D-Logic čitači kartica se staraju o pravilnom formatiranju value blokova tako da je korisnicima na raspolaganju skup funkcija koje barataju isključivo četvorobajtnim vrednostima. Treba napomenuti da korišćenje value blokova ima smisla ukoliko su za prava pristupa željenog bloka postavljene vrednosti 1, 6 ili 0 (podrazumevano na novim karticama) što omogućuje inkrementiranje i dekrementiranje vrednosti koje sadrže. Value blokovi se uvek prvo moraju inicirati odn. vrednost i pridružena adresa moraju biti saglasne odgovarajućem formatu šesnaestobajtnog zapisa. Inicijalizaciju value blokova je najbolje i najjednostavnije raditi skupom IS21 Win API funkcija ValueBlockWrite ili ValueBlockInSectorWrite.
Opis funkcija: Ove funkcije služe za čitanje četvorobajtnih vrednosti value blokova. Dodatno vraćaju i pridruženu adresu pohranjenu u value blok. Funkcije koriste blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).
Opis funkcija: Ove funkcije rade isto što i grupa funkcija ValueBlockRead i služe za čitanje četvorobajtnih vrednosti value blokova. Dodatno vraćaju i pridruženu adresu pohranjenu u value blok. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.
Opis funkcija: Ove funkcije služe za upis odn. inicijalizaciju četvorobajtnih vrednosti value blokova i pohranjuju pridruženu adresu u value blok. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).
Opis funkcija: Ove funkcije rade isto što i grupa funkcija ValueBlockWrite i služe za upis odn. Inicijalizaciju četvorobajtnih vrednosti value blokova. Dodatno pohranjenu i pridruženu adresu u value blok. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.
Opis funkcija: Ovaj skup funkcija se koristi inkrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se inkrementira value blok šalje se kao parametar ovih funkcija. Funkcije koriste tzv. blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).
Opis funkcija: Ove funkcije rade isto što i grupa funkcija ValueBlockIncrement i koriste se za inkrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se inkrementira value blok šalje se kao parametar ovih funkcija. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.
Opis funkcija: Ovaj skup funkcija se koristi dekrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se dekrementira value blok šalje se kao parametar ovih funkcija. Funkcije koriste blokovsko adresiranje (prvi blok na kartici ima adresu 0; trejler prvog sektora ima adresu 3, pa naredni 7 itd; poslednji blok na MIFARE® 1k, koji je ujedno i trejler poslednjeg sektora, ima adresu 63).
Opis funkcija: Ove funkcije rade isto što i grupa funkcija ValueBlockDecrement i koriste se za dekrementiranje četvorobajtnih vrednosti value blokova. Vrednost za koju se dekrementira value blok šalje se kao parametar ovih funkcija. Jedina razlika je što se koristi tzv. sektorsko adresiranje. Sektorsko adresiranje podrazumeva odvojeno slanje adrese sektora i adrese bloka u okviru datog sektora. Kod MIFARE® 1k kartica adresa sektora može biti u opsegu 0 do 15 a adrese blokova u okviru sektora, u opsegu od 0 do 3. Ovaj način adresiranja saglasan je sa dokumentacijom proizvođača kartica. Kod MIFARE® 4k adresa sektora može biti u opsegu od 0 do 39 a pošto je drugačija organizacija druge polovine adresnog prostora (gornjih 2 kB) adrese blokova u okviru poslednjih 8 sektora (sektori 32 do 39) može biti u opsegu od 0 do 15.
|