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:
- Gemalto Cryptoflex na Linuxu, dr Branko Milosavljević, FTN
http://informatika.ftn.uns.ac.rs/BrankoMilosavljevic/Cryptoflex - PKCS standardi, slajdovi za kurs Bezbednost u sistemima elektronskog poslovanja, dr Branko Milosavljević, FTN
http://informatika.ftn.uns.ac.rs/BSEP?action=AttachFile&do=view&target=07+pkcs.pdf - OpenSC Overview
http://www.opensc-project.org/opensc/wiki/OverView - OpenCT Overview
http://www.opensc-project.org/openct/wiki/OverView - Quick Start with OpenSC
http://www.opensc-project.org/opensc/wiki/QuickStart - OpenSC Supported smart cards and USB Tokens
http://www.opensc-project.org/opensc/wiki/SupportedHardware
(estonska, nemačka, buduća francuska, italijanska, portugalska, neke američke pametne kartice za el. potpis/lične karte, i razne opšte pametne kartice)
Primer zakrpe koja dodaje delimičnu podršku za italijansku eID, i primer kako se normalno objavljuje specifikacija kartice. - Reverse engineering smart cards, Christian M. Amsuss
carddecoders, usbmon while running middleware in the VM, pyscard over pcsc - Smart Card Applications: Design models for using and programming smart cards, Wolfgang Rankl
- pcsc-lite PC/SC API
- Apollo OS 4.03 crypto overview
2 komentara
23 avg 2010 Boe
Da li lična karta sa čipom posjeduje dva RSA ključa ili jedan ECDSA P-192/P-256 i jedan 1536bitni RSA?
Iteresuje me zato što ECDSA jos nije definisan kao RFC4880 standard od strane OpenPGP, ali označava kartice kao najnaprednije odnosno na najvišem tehnološkom nivou.
24 avg 2010 Goran
Zaista ne znam odgovor na pitanje. Nemam nikakav uvid u specifikaciju kartice.