OpenOffice.org - najpopularniji slobodni kancelarijski paket; obrada teksta, tablice, prezentacije, baze podataka; preuzmite besplatno sa http://sr.openoffice.org
 

Objava: Čitač elektronske lične karte za GNU/Linuks



Pored originalne Python skripte sada su dostupni i grafički program i biblioteka (API) napisani u Javi. Posetite: http://devbase.net/jfreesteel

 

Na kraju i nije bilo tako strašno ;) Predstavljam vam slobodan čitač elektronske karte, od milja nazvan FreeSteel. Trenutno, FreeSteel je jednostavna Python skripta koji se oslanja na pyscard i PC/SC i radi na svim poznatim platformama (Linux, Windows, MacOS X). FreeSteel je potpuno sirova beta, testiran samo sa mojom ličnom kartom. Već sam pisao da nemam uvid u specifikaciju pametne kartice, tako da ne znam da li sam ispravno rastumačio granice polja. Pozivam da probate i obavezno javite da li ispravno čita podatke i sa vaše lične karte.

Kako to izgleda? Skript se poziva iz terminala, i ispisuje informacije inače vidljive kroz besplatnu aplikaciju Čitač Elektronske Lične Karte za Windows. Sledi demo programa, a ja ću iz opreza podatke za koje nisam siguran koliko su osetljivi da zamenim zvezdicama. Sa argumentom -p program čuva sliku sa lične karte u datoteku <JMBG>.jpg, moguće je i navesti posebno ime sa -p moja_slika.jpg.

$ ./freesteel.py -p
Using reader   : Gemplus GemPC Twin 00 00
ATR            : 3B B9 18 00 81 31 FE 9E 80 73 FF 61 40 83 00 00 00 DF
Header field   : 33*60*3*6*62*26**B*F*79*77*42*3*
Printed number :                   *F*79*77*42*3*
eID number     : 00***5*8*
Issued         : *4.0*.2009
Valid          : *4.0*.2014
Issuer         : PU ZA GRAD BEOGRAD SRB
JMBG           : 2412985******
Family name    : РАКИЋ
First name     : ГОРАН
Middle name    : ******
Gender         : M
Place od birth : BEOGRAD, SAVSKI VENAC, REPUBLIKA SRBIJA, SRB
Date of birth  : 24.12.1985
Street address : ************, ******
City           : *******, BEOGRAD, SRB

FreeSteel možete preuzeti iz Gitorious skladišta sa adrese http://gitorious.org/freesteel naredbom:
   git clone git://gitorious.org/freesteel/freesteel.git. Gitorious nudi i pregled skladišta kroz Veb, reč je o jednoj Python skripti pa je možete i ručno iskopirati.

FreeSteel je slobodan softver, izdat pod GNU Slabijom opštom javnom licencom (GNU LGPL) verzije 3 ili novije po vašem nahođenju. Program koristi pyscard omotač za PC/SC interfejs. Na GNU/Linuksu potrebno je instalirati pcsc-lite (na Ubuntu distribuciji paket pcscd) i drajvere za čitač (libccid paket dodaje podršku za većinu USB čitača, a tu su i neki drugi PC/SC drajveri u skladištu ili sa sajta proizvođača ako su kompatibilni sa novim izdanjima kernela). U ovom koraku ništa nije specifično za našu ličnu kartu tako da ima uputstava na Internetu.

Pre nego što pokrenete FreeSteel, možete da proverite da li je pcsc-lite prepoznao čitač naredbom pcsc-scan koja je deo pcsc-tools paketa. Na MacOS X pokrenite iz terminala program pcsctest koji je podrazumevano instaliran.

    $ pcsc_scan -n
    PC/SC device scanner
    V 1.4.16 (c) 2001-2009, Ludovic Rousseau 
    Compiled with PC/SC lite version: 1.5.3
    Scanning present readers...
    0: Gemplus GemPC Twin 00 00
    
    Mon Aug 23 04:27:04 2010
     Reader 0: Gemplus GemPC Twin 00 00
      Card state: Card inserted, Shared Mode, 
      ATR: 3B B9 18 00 81 31 FE 9E 80 73 FF 61 40 83 00 00 00 DF

Windows i MacOS X dolaze uz PC/SC (jabuka koristi pcsc-lite, stiže uz sistem). Na Windowsu vam treba Python, MacOS X ga već ima instaliranog. Preostaje još instalacija pyscard omotača i FreeSteel može da radi.

U odnosu na Čelik, FreeSteel se uz očiglednu mogućnost da radi na Linuksu i Meku, razlikuje i po tome što vuče po 255 bajtova podataka sa kartice u jednom zahtevu umesto 96, ne resetuje karticu između čitanja različitih polja i ne povlači dva puta jedan blob od zanemarljivih 6 bajtova, ali eto red je da napišem i to.

Razlikuje se i što nije testiran na većem broju ličnih karti, što moguće da postoje sitne greške usled kojih će promašiti granice polja ili ispretumbati podatke, zavisno od toga da li sam uspeo da pravilno razumem kako su podaci organizovani na samoj kartici. Razlikuje se i po tome što ne uspeva da izvuče sliku iako kod koji bi trebalo da radi jeste napisan. Željko Stevanović je uočio grešku zbog koje nije radilo čuvanje slike, sada i ta opcija radi u programu. Pokretanje ./freesteel.py -p čuva sliku kao JMBG.jpg, ili se može navesti ime datoteke ./freesteel.py -p moja_slika.jpg

Ukoliko Čelik računa neki checksum da proveri verodostojnost podataka sa lične karte, FreeSteel to ne radi. Veoma je moguće da su neki od onih meni nepoznatih bajtova zapravo kontrolni.

serbian-eid-celik.png

Pametna kartica je u ISO 7816-04 formatu i za čitanje podataka koriste se instrukcije 0xA4 (SELECT FILE), 0xCA (GET DATA) i 0xB0 (READ BINARY). Pronašao sam javno dostupnu prethodnu kopiju standarda na ovoj stranici.

Podaci su smešteni u datotekama (MF) koje se biraju sa SELECT FILE nakon čega se prelazi na čitanje pomoću READ BINARY. SELECT FILE proverava potrebne dozvole i odbija pristup zaštićenim datotekama. Ne znam da rastumačim odgovor o tekućim dozvolama. Svaki odgovor završava sa dva bajta 0x90 0x00 ako je zahtev uspešan, odnosno kodom za grešku kako je definisano standardom. Omotač pyscard već radi obradu tako da FreeSteel ignoriše i preskače ove statusne bajtove u rezultatu.

Svaka datoteka se sastoji od zaglavlja veličine 6 bajtova, i sadržaja proizvoljne dužine. Dužina sadržaja zapisana je u četvrtom i petom bajtu zaglavlja kao 16bit LE int.

Koriste se četiri EF datoteke 0x0f 0x02 u kojoj su broj, datumi izdavanja i isteka i izdavalac, 0x0f 0x03 u kojoj su jmbg, ime, prezime, ime oca, pol, mesto i datum rođenja, 0x0f 0x04 u kojoj su podaci o adresi prebivališta i 0x0f 0x06 u kojoj se nalazi slika.

READ BINARY instrukcija kao prvi argument ima dvobajtni offset (16bit int LE), a potom sledi broj bajtova koji će biti pročitani (8bit int LE). Ako se kao broj bajtova dostavi 0x00 biće pročitan maksimalno dopušten broj bajtova. FreeSteel ovde ipak koristi eksplicitni broj, najviše 0xFF ili manje za manja polja.

Svi podaci su sačuvani kao ASCII/UTF-8 tekst. Sama polja sa podacima su sastavljena od jednog bajta sa labelom podatka, pa 0x06, zatim dužina polja kao 8bit LE int i 0x00 nakon čega sledi odgovarajući broj bajtova navedene dužine sa podacima.

Serijski broj čiji je heksadecimalni kod napisan na poleđini lične karte se nalazi u 16 bajtova podataka koji se čitaju sa GET DATA naredbom uz argument 0x01 0x01, počev od desetog bajta. dok ostatak tog niza bajtova ne znam da protumačim.

U datoteci u kojoj je slika podaci počinju sekvencom 10 01 BD 1B pa zatim karakteristični početak JPEG datoteke (FF D8 FF E0 00 10 4A 46 49 46). Ovo se ponavlja nekoliko puta kasnije u podacima. Prvu četvorobajtnu reč treba preskočiti, dok su ostale sastavni deo datoteke slike.

FreeSteel ima galamdžijski režim ako mu se stavi zastavica -v, --verbose kada prikazuje primljene i poslate bajtove kao heksadecimalne vrednosti. Ako program kod vas ne čita ispravno podatke, a niste voljni da sami jurite grešku, postoji i dump zastavica. Pokrenite program kao ./freesteel.py -d dump i on će u direktorijum dump istovariti binarne blobove pročitane sa lične karte. Ako mi ih dostavite privatnom poštom rado ću popraviti program, a obećavam da podatke neću da prikupljam, prodajem, ili na drugi način zloupotrebim.

Na kraju, kako i piše u zaglavlju programa, FreeSteel se isporučuje bez bilo kakve garancije, čak i one implicitne. Iako program samo čita datoteke, pa ne bi trebalo da bude problema, ne mogu da prihvatim odgovornost ako vam zapadne da morate ponovo da čekate u redu sa zahtevom za reinicijalizaicju ili za izradu nove lične karte.

 

August 23, 2010 8:21 AM | elpotpis, fsn


Komentari

Čini li mi se da za čitanje podataka uopšte nije potrebno znati PIN kartice?

Objavio Predrag Supurovic u August 23, 2010 10:00 AM

Za ove „javne“ podatke, ne treba PIN. Ako pokušam nešto drugo da pročitam dobijem grešku da nemam ovlašćenja da pristupim toj datoteci.

Nemam napisan kod koji pravi sesiju i pristupa stvarima kao što su sertifikati na kartici, to ostaje za neki drugi put.

Objavio Goran u August 23, 2010 10:02 AM

Лепо, лепо, чим узмем стари Дел Д620 лаптоп са уграђеним читачем картица ћу да испробам како ради. Знам да је тај читач радио лепо и успевао сам да извучем неке ситнице са кредитних чип картица али то је било пре једно 4-5 година.

Objavio Данило u August 23, 2010 2:25 PM

Evo ja probao i radi kako je ocekivano. Osim jedne sitnice. Ja zivim u kuci (nemam broj stana) pa na listi ima jedan elemenat manje.

patch: http://zsteva.ath.cx/0001-Fix-za-adresu-broj-stana-moze-da-nedostaje.patch

Objavio zsteva u August 23, 2010 3:41 PM

Jedno pitanje, ovo samo cita podatke, gde se vrshi validiranje tih podataka?

Zar nije ideja da se po javnom nekom javnok kljucu proverava signatura?

Objavio zsteva u August 23, 2010 3:43 PM

Hvala za zakrpu, gurnuo sam je u git stablo. Drago mi je da program zaista radi. Moguće da će se pojaviti sličan problem da ni ulični broj ne postoji, ali to ćemo rešavati kada i ako se pojavi.

Sertifikati se koriste za elektronski potpis. Ako ne grešim, a ja sa ovim stvarno nemam iskustva, javni i CA sertifikat u X.509 formatu bi trebalo da može da se preuzme sa kartice iz neke df datoteke baš kao i ovi podaci.

Za samo potpisivanje kreira se sesija, validira PIN i isporučuje hash kartici koji će ona da potpiše na samoj kartici privatnim ključem. Onda se to prilaže uz javni sertifikat i tako čuva.

Nije mi poznato da se ove javne informacije negde proveravaju. Moguće da na kartici postoji negde CA sertifikatom MUP-a potpisan checksum, ali ja to ne vidim. Ako naiđeš na to reci, pa ćemo lako da ubacimo proveru podaci su ispravni i podaci nisu ispravni. Eto, moguće da je to onaj nepoznati deo iz zaglavlja koje se dobija sa GET DATA pozivom.

Objavio Goran u August 23, 2010 4:08 PM

http://zsteva.ath.cx/0002-Fix-za-ocitavanje-fajla.patch

I sad sve radi ;)

Ocisti samo malo kod. Bug je bio gore u ucitavoanju fajla.

Objavio zsteva u August 23, 2010 6:07 PM

Jao, pa offset je dva bajta, razumljivo. Ne pazim na času. Primenio sam i ispravku za 0x90 0x00 stripping bug koji sam ispravio u međuvremenu, treba odseći dva bajta po svakom prenosu, a ne samo na kraju.

Odlično!

Objavio Goran u August 23, 2010 6:37 PM

hm, negde dve nashe izmene su donele dobru sliku, ali vidim sad da fale po 2 slova sa kraja podataka, ali da ne pravim zbrku oko mergovanja cekam da dignesh sve izmene :)

Objavio zsteva u August 23, 2010 6:42 PM

Malo me git zbunjuje, treba mi neka knjižica za to. Sada bi trebalo da je sve ok.

Promenio sam i Street address/city u Residence. Ako ima manje od tri polja ispisuje u jednom, inače u dva reda mada mi sada nešto čudno izgleda tako.

Objavio Goran u August 23, 2010 7:14 PM

obudzi izmene vec nekako, i gurni na javni repo. Ja cu posle srediti moj repo.

Objavio zsteva u August 23, 2010 7:24 PM

Pozdrav. Slucajno sam nasao ovaj program, i interesuje me, dali moze to da se uradi, da kad izcita podatke odmah i da sacuva u xml formatu?
Hvala

Objavio djusee u February 25, 2013 3:11 PM

Naravno, iskoristite Java biblioteku ili Python skript i onda samo sastavite i sačuvajte XML u vašem programu.

Objavio Goran u March 22, 2013 6:21 PM

Јел пробао неко SCard4Wine?
http://scard4wine.sourceforge.net/

Омогућава WINE-у да користи pcsc Linux-ов драјвер за Windows апликације. Firefox, Java Runtime i middleware за сертификате се успешно инсталирају под WINE-ом. Више о примени SCard4Wine:
http://forum.od.ua/s...=1#post26626240

При приступу сајту за еПорезе, читач и даље није детектован. Ево па пробајте, треба WINE да искористи Linux-ов драјвер, али му не полази за руком.

Objavio brkalivadic u February 1, 2014 12:25 AM

Objavite komentar









Zapamti lične podatke i za naredni unos?




Zbog povećane količine SPAM-a u komentarima, prinuđen sam da vas malo maltretiram... Kao što je i očekivano, upišite dve reči sa slike u polje ispod (ako su reči nejasne, kliknite na crvene strelice za novu kombinaciju):



Slanjem komentara odobravate prikazivanje i trajno arhiviranje teksta komentara na ovom blogu uz uslov navođenja unesenog imena autora i zadržavate sva ostala prava i punu odgovornost za objavljeni sadržaj.




GNOME lover
blog.goranrakic.com - Goran Rakić / Горан Ракић
Objavljeno pod uslovima licence Creative Commons Autorstvo 3.0 Srbija.
Sva prava i odgovornost za objavljene komentare zadržavaju njihovi autori.

Creative Commons License