Home
Freesteel u javi
Kod u skladištu je podeljen na JFreesteel biblioteku (u direktorijumu /lib) i GUI aplikaciju SerbianEidViewer koja koristi biblioteku (u direktorijumu /viewer). Biblioteka je objavljena pod GNU LGPLv3 slobodnom licencom. Aplikacija je objavljena pod GNU Affero GPLv3 licencom.
Zakpre možete poslati na e-adresu grakic@devbase.net ili kao merge request kroz Gitorious, pogledati stranicu GitWorkflow. Kod se održava u Git skladištu, a svoju kopiju pravite naredbom: git clone git://gitorious.org/freesteel/jfreesteel.git. Naredbom mvn install uz instalirane JDT i Maven u novom target/ direktorijumu ćete dobiti jfreesteel.jar paket biblioteke, serbianeidviewer.jar aplikaciju, a u direktorijumu serbianeidviewer-lib sve biblioteke koje aplikacija koristi. Pogledajte i CodeStyle i CodeReview za detalje o kodu.
Veb sajt
Na adresi: http://devbase.net/jfreesteel/Slajdovi: JFreesteel - čitanje elektronske lične karte u Javi
Ideje za dalji razvoj
Ako želite da pripomognete razvoj, evo nekih ideja:- FreesteelApplet - pristup podacima sa lične karte iz veb aplikacija
- Dokumentovati nepoznate tagove 0x625 .. 0x629 u strukturi adrese prebivališta (podaci floor, entrance i houseLetter u EidInfo.java). Ako imate ove podatke zapisane u ličnoj karti, pokrenite program u terminalu (java -jar freesteelgui.jar) i ispravite kod ili samo opišite gde je šta u ispisanom izlazu.
- Implementirati asinhroni neblokirajući interfejs za čitanje podataka čije naznake postoje u komentarisanom delu EidCard.java
- Testirati i ispraviti greške u slučaju kada se biblioteka koristi sa više ReaderListenera istovremeno. Ovo će verovatno zahtevati refaktorisanje u jednu nit koja pristupa kartici (neki card transmit queue) i listenere kao klijente. To bi trebalo da spreči sve blokade iako se i sada koristi beginExclusive/endExclusive u kodu i omogući propisnu implementaciju neblokirajućeg interfejsa. Takođe ovo je bitno za mogućnost poziva čitanja iz Runnable callbackova kada se implementira GUI aplikacija.
- Proveriti najbolji način za dodavanje palete alatki (engl. toolbar) u GUIPanel, za sada je to omogućeno nasleđivanjem panela i postavkom iz konstruktora. Primer postoji u komentarisanom delu SerbianEidViewer.java
- Završiti kod koji omogućava izvoz putanje X.509 sertifikata koji se nalazi u komentarisanom delu EidCard.java. Proveriti još jednom da li se MUPCARoot sertifikat nalazi negde na kartici. Videti najzgodniji način za lep prikaz sertifikata u viewer aplikaciji.
- Završiti podršku za generisanje PDF-a sa izveštajem nalik na zvanični ČELIK, podrška za štampu i čitanje
- Omogućiti PAdES potpisivanje izveštaja na MS Windows kroz iText (korišćenjem zvaničnog CSP midlvera, za ostale sisteme trenutno nema rešenja). Potpisan izveštaj garantuje integritet, a korisnik samim potpisom potvrđuje autentičnost. Pri potpisu obavezan je prikaz podataka kako bi korisnik znao šta potpisuje.
- Napisati kod za proveru da li je lična karta istekla, i proveru validnosti i da li su sertifikati opozvani
- Dodati funkcionalnost očitavanja nepovratno nepovezujućeg jedinstvenog identifikatora zasnovanog na JMBG polju: HMAC-SHA1(APP_PREFIX, JMBG). Nepovratno nepovezujući jedinstveni identifikator može predstavljati zapis o građaninu unutar aplikacije, bez oktiravanja JMBG podatka.
- Pouzdana provera godišta na vebu bez otkrivanja identiteta. Pouzdan servis koji očitava LK kroz aplet i proverom potpisa podataka sa LK utvrđuje da je validna. Iako teorijski može, ovaj servis ne očitava identitet, a pozivaocu servisa samo saopštava status provere.
- Pronaći gde se čuva elektronski potpis podataka na ličnoj karti (verovatno PKCS7 format) i implementirati kontrolu tog potpisa iz biblioteke i aplikacije
- Sastaviti dokumentaciju o biblioteci, popularisati slobodnu biblioteku pod GNU LGPLv3 u domaćoj Java zajednici
- Napisati viki članak koji dokumentuje strukturu podataka na kartici
- Ne bi bilo loše, ako je moguće naravno, da podaci mogu da se kopiraju; negde mi treba JMBG, pa da ga ne bih kucao selektujem JMBG iz GUIa i kopiram. Da iole znam programiranje, rado bih se uključio u projekta. -- Neky
- …
Freesteel u pythonu
Python skriptica je prethodila biblioteci i programu u javi. Kod se održava u Git skladištu, a svoju kopiju pravite naredbom: git clone git://gitorious.org/freesteel/pyfreesteel.git.
Ideje za dalji razvoj
- Razdvojiti kod na biblioteku i terminalsku aplikaciju po ugledu na JFreesteel
- ...
Predlozi za druge eID projekte
- Implementirati digital identity provider preko PKI infrastrukture (OpenID, ili neki drugi federation login servis)
- Napisati programče za promenu PIN koda
Beleška: 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 PKCS15 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.
- Napisati Java Crypto Provider na nivou APDU funkcija sa PKI funkcijama kartice kao zamena za midlver. Početak: http://code.google.com/p/rsidlib/
- Razviti slobodan midlver za GNU/Linux, moguće zasnovan na OpenSC
- Saobraćajne dozvole, EvrcCard
- …

