Još po neko zapažanje

Sledeće EF sadrže X.509 sertifikate sa javnim RSA ključem:

0F 08sertifikat vlasnika izdat od strane MUPCA Gradjani
0F 10kao i prethodni, uzastopni serijski broj, javni ključ (1024bit) se razlikuje
0F 11Intermediate CA gradjani 001 (2048bit), izdat od strane Root CA MUP 001
0F 14MOI CertM1 (1024bit), izdat od strane Intermediate CA sluzbenici 001
0F 16identičan kao i prethodni

Na kartici bi trebalo da se uz oba lična X.509 sertifikata negde nalazi i izdvojen javni i tajni ključ u memoriji koja nije čitljiva spolja jer se ključevi generišu na samoj kartici i pristupa im se kroz crypto instrukcije. X.509 je standardni format za dostavljanje javnog ključa koji uključuje detalje o izdatom sertifikatu, njegovoj upotrebi i izdavaocu. Prvi par (gde je X.509 u 0F 10) se koristi za kvalifikovane potpise, dok se drugi koristi za obične potpise, na primer u e-pošti, i veb autentifikaciju. Planiram da dodam opciju u FreeSteel da izveze lični javni X.509 sertifikat sa kartice. FreeSteel 0.3 može da izveze kvalifikovani i obični lični X.509 sertifikat. Opcije su ./freesteel.py -q qualified.cer -s standard.cer.

Format je i ovde 6 bajtova za zaglavlje sa oznakom dužine. Blob počinje nekom rečju (4 bajta) kojoj ne znam značenje, nakon čega od petog bajta kreće sadržaj sertifikata.

Operativni sistem na kartici je Apollo OS izraelske firme SC2. Na njihovom sajtu piše For generic private and open source middleware, Apollo OS is available with a PKCS#15 profile.. Naravno ovde se misli da je podrška (komercijalno) dostupna klijentima koji sprovode uvođenje rešenja, kod nas je to NetSet d.o.o. iz Beograda.

FreeSteel, višeplatformski Python skript za čitanje podataka sa elektronske lične karte je dogurao do izdanja 0.2 0.3. Ako ste preuzeli jutros, ponovite. Program sada uspešno izvozi i sliku sa lične karte i čuva je u posebnu datoteku. Željko je odlično primetio da je offset dva bajta koliki i mora da bude za dostupnu veličinu slike.

Za promenu pina koriste se 0F 13, 0F A1 i 0F A3. VERIFY (0x00 0x20) instrukcija radi nad prvim ključem za poređenje. Kada se pozove bez podataka, vraća broj preostalih pokušaja. Kasnije u procesu promene šalje joj se neki niz od 8 bajtova (izgleda da ne zavisi od samog pina več od kartice, nije mi to baš najjasnije) nakon čega sledi UPDATE BINARY (0x00 0xD6) instrukcija koja ažurira 0F 13 nizom od 6 bajtova zaglavlja EF i 54 bajtova nekih podataka. Od tih 54 bajtova prvih 4 i poslednjih 5 je fiksno između različitih promena, a 45 nosi informaciju o izabranom pinu. Nema nikakve magije, nakon promene sadržaja, čitanje pročita upravo prethodno upisano. Deluje da je uvek dužina 45 bajtova i da ne zavisi od izabrane dužine pina ali treba to još jednom da proverim. Pogledaću u PKCS#15 ima li šta zanimljivo na tu temu mada nisam siguran da je to pravo mesto za traženje informacija.

Pretpostavljam da je ideja da se pročitaju neki ključevi iz 0F A1 (6+20 bajtova) i 0F A3 (6+14 bajtova), zatraže ovlašćenja sa VERIFY i tim nekim osmobajtnim nizom pa onda novi pin šifruje i zapakuje u niz koji se upiše nazad u 0F 13. Na kraju se bira MF (koreni direktorijum) verovatno kako bi se prekinula ovlašćenja ili resetovalo nešto slično.


August 23, 2010 11:23 PM | Komentari (2) | Trajna veza | elpotpis, fsn

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

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 | Komentari (11) | Trajna veza | elpotpis, fsn

PC/SC, OpenSC, NSS, kartice i elektronski potpis na Linuksu

Ovaj zapis je započeo kao lična beleška, pa poželeh da ga ipak podelim i sa drugima.

Povod je komentar na zapis o Halcomovim sertifikatima autora koji se potpisao kao John Markovic, a tiče se podrške za (kvalifikovani) elektronski potpis pod GNU/Linuksom.

Koliko mi je poznato jedino Sertifikaciono telo Pošte nudi A.E.T. SafeSign midlver za GNU/Linuks operativni sistem ali nisam imao priliku da probam rešenje u praksi. Situacija sa drugim akreditovanim sertifikacionim telima za izdavanje kvalifikovanih elektronskih sertifikata je znatno lošija.

Evo i komentara koji sam pomenuo:

... kako može da se koristi lična karta u potpisivanju dokumenata ali tako da to radi na Linuks i drugim slobodnim sistemima.

Po prepisci koju sam imao sa MUP početkom godine, postoji rešenje za Linuks na ETF i koristi se ali ne stavljaju ga na raspolaganje na svojim stranama jer ne razumeju da nije potrebno da pakuju pakete za sve distribucije (rpm, deb itd)

Ne otvaraju kod jer to „nemaju u praksi“ a za specifikaciju pristupa kartici i uslugama koje pruža, bilo bi dobro da pitate i vi, pošto sam stekao utisak da što se više ljudi interesuje i nudi saradnju, da će pre da to reše.

...

Moj odgovor je glasio:

... prepreka za korišćenje na GNU/Linuksu je da se za slobodan pružalac PKCS#11 interfejsa, konkretno OpenSC, emulira format pametne kartice na kojoj se nalazi X.509 sertifikat tako da se ona predstavi u PKCS#15 standardu. Nije mi poznata ta priča o MUP-ETF, moguće da imaju deo slagalice, ali lično u to ne verujem. Ne znam kakav kod bi to trebalo da otvaraju ...

 

Pre izvesnog vremena kada sam u Ljermontovoj preuzeo kvalifikovani sertifikat zainteresovao sam se koje su prepreke da ga zapravo i koristim, i počeo da sastavljam belešku, koju sada objavljujem. Ako imate više detalja, specifikaciju, alatke za razumevanje formata kartice ili iskustva kako se programira OpenSC emulacija za specifičnu karticu, ostavite poruku. Većina softvera slobodnog koda nastane baš onda kada neko poželi da sebi pomogne i napravi nešto novo.

Dakle, opšti ifdhandler drajver za razne USB čitače dolazi u pcsc-lite/libccid potprojektu. Drugi (PC/SC ifdhandler) drajveri su dostupni sa Interneta u izvornoj ili binarnoj formi. OpenCT nudi ifdhandler drajver sa podrškom za neke dodatne modele čitača kartice.

pcsc-lite (program i paket pcscd) koristi ifdhandler drajvere za čitače pametnih kartica i obezbeđuje PC/SC API za komunikaciju sa karticom kakav se koristi i na Windowsu (winscard).** Drajver i pcsc-lite čine „midlver“. Tu se završava priča oko čitača kartica, i prelazi na samu pametnu karticu.

OpenSC se lepi preko pcsc-lite (i nekog njegovog ifdhandler drajvera) ili direktno na OpenCT i daje PKCS#11 interfejs za komunikaciju sa karticom.

Čitači koje na sistemu vidi OpenSC prikazuju se naredbom "opensc-tool -l", a isti program može da prikaže tip i elemente kartice. OpenSC mora da podržava format kartice (struktura direktorijuma). Standardan je PKCS#15 format. Inicijalizacija kartice (format), zadavanje PIN koda i generisanje RSA ključeva na kartici u PKCS#15 formatu radi se pomoću "pkcs15-init". Naredba "pkcs15-tool" lista sadržaj objekata na kartici.

Naredba "openssl" može da od generisanog javnog ključa napravi CSR za potpisivanje od strane CA (našeg lokalnog ili "pravog"), ili da napravi samopotpisani sertifikat. Sertifikat se sa "pkcs15-init" upisuje nazad na karticu. Format PKCS#15 se retko koristi na već inicijalizovanim karticama koje traže poseban omotač za OpenSC.

Za samu komunikaciju se koristi drajver za karticu, gde postoji ISO 7816 kao standard. Najčešće međutim treba napisati poseban drajver za libopensc koji će da sa karticom razmenjuje APDU naredbe.

Mozilla NSS ili OpenSSL učitavaju OpenSC PKCS#11 modul (engine_pkcs11.so) i nude usluge aplikacijama kroz crypto API višeg nivoa i integraciju sa okruženjem. Ovo je mesto gde se umesto OpenSC koji je slobodan softver može koristiti neki vlasnički softver koji radi sa karticom (na primer kroz PC/SC koji daje pcsc-lite) i pruža PKCS#11 modul.

Drugi programi mogu da koriste PKCS#11 modul kroz neku biblioteku (Java nudi standardan API) ili da pozivaju NSS (Firefox, Evolution, OpenOffice.org). Za prijavu na sistem pametnom karticom koristi se pam_pkcs11, a za grafičku prijavu potreban je i gdm-plugin-smartcard. NSS nudi naredbu "certutil" za upravljanje sertifikatima ili grafički kroz Mozilla Firefox.

**) Windows aplikacije uglavnom koriste interfejs višeg nivoa, CryptoAPI koji kroz posebne CSP module (slično kao NSS kroz PKCS#11 module) pristupa kartici. Postoji opšti okvir Base SC CSP za implementaciju CSP modula. OpenSC za Windows od januara 2010 pored PKCS#11 modula ima modul i za ovaj okvir, a postoji i nekoliko drugih alternativnih CSP implementacija koje koriste OpenSC. OpenSC dalje koristi uključeni sistemski PC/SC midlver (winscard). Pretpostavljam da omotač sa podrškom za poseban format kartice bude isporučen kao deo posebnog CSP modula koji leži nad PC/SC, pa bi Wine po tome trebalo da implementira PC/SC deo Windowsa kroz pcsc-lite, zaobilazeći OpenSC.

***) ATR srpske pametne lične karte je "3B B9 18 00 81 31 FE 9E 80 73 FF 61 40 83 00 00 00 DF" i nalazi se u listi kartica koje vidi pcsc-lite. Reč je o ISO 7816 kompatibilnoj kartici sa operativnim sistemom Apollo OS 2.43 izraelske kompanije SC2. Ne postoji OpenSC modul za emulaciju. NetSet nudi Windows CSP modul rsidcm.dll, a ne znam da postoji javna specifikacija kartice i APDU kodova niti trenutno znam kako bih to iskoristio da napišem emulaciju.
Dragan Maksimović, pomoćnik načelnika Uprave za IT MUP-a je u decembru 2009. izjavio: "Naime, middleware (PKCS#11 standard) postoji ali ga još uvek nismo publikovali, jer još uvek nismo dobili akreditaciju za naše CA telo". Ovde je izgleda reč o rsidp11_x86.dll koji se pominje u dokumentaciji i verovatno stoji nad winscard API-jem. Da je kod ovog DLL-a dostupan možda bi bilo moguće ovaj modul portovati na pcsc-lite koji nudi isti API nakon čega bi se modul uvezao u NSS/OpenSSL i potpuno preskočio OpenSC.

 

Izvori:


August 21, 2010 3:14 PM | Komentari (2) | Trajna veza | elpotpis, fsn

Elektronsko bankarstvo na GNU/Linuksu

Do sada je već nekoliko puta u domaćoj zajednici bilo diskusija o mogućnostima za korišćenje usluge elektronskog bankarstva u preglednicima koji nisu Microsoft Internet Explorer, na operativnim sistemima koji nisu Microsoft Windows.

Srđan Pavlović, moderator EliteSecurity Linux foruma je pre par dana ponovo aktivirao ovu temu, nakon čega se došlo do najnovije liste. Pogledajte ispod ili pristupite dokumentu kroz Google dokumente.



Ovaj dokument sam kompletno priredio koristeći Google dokumente.

Mogu da kažem da ću se, makar u narednih godinu dana, nasmejati na svaku opasku kako ovo rešenje može da zameni kancelarijski paket na računaru. Sledeće godine ću probati ponovo.

Rad sa tabelom u tekstualnom dokumentu je zamoran da zamorniji ne može da bude. Nije moguće odabrati proizvoljnu grupu ćelija, nije moguće podesiti ivice za red ili kolonu ili visinu reda. Izbor pozadine ćelije se radi u prozorčetu Svojstva tabele. Ne postoji mogućnost spajanja ćelija iz dve kolone ili dva reda.

Pri kucanju ne vidi se podela na stranice, što znači da su viseći naslovi i pasusi siročići neminovni. Izvoz u PDF, pregled, pa onda nazad na dodavanje ručnih proreda.

Zgodno je što je dokument na vebu, i lako se deli sa drugima, ali lakše mi je onda da otkucam viki članak ili priredim dokument u pravom kancelarijskom paketu, i iskoristim ovaj dodatak ili ga ručno objavim na Google dokumentima. Za ozbiljnu upotrebu problem je kako čuvati dokumente tako da budu dostupni i za rad van mreže, kako obezbediti rezervnu kopiju, kako upravljati pravima pristupa, mada moguće da Google ima i neke alatke za korisnike koji plaćaju upotrebu servisa.

Sviđa mi se i što je dostupna dobra lokalizacija na srpski jezik. To samo potvrđuje stav da su strane kompanije kopiranjem svog uobičajenog nastupa sa drugih tržišta učinile više na popularizaciji upotrebe srpskog jezika na računarima nego sve domaće ustanove.

Ja sam ipak srećan sam što sada mogu da se vratim u OpenOffice.org i njegove mogućnosti za napredno uređivanje dokumenta.


August 20, 2010 12:10 PM | Komentari (1) | Trajna veza | OOo, elpotpis, fsn


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