Smart Card Identification
http://idpak.kibla.org/

1. Uvod

Prejekt je namenjen centralni identifikaciji uporabnikov z uporabo pametnih kartic na delovnih postajah. 

2. Opis delovanja

Na centralnem stežniku teče aplikacija, ki ob zahtevi preveri stanje na delovni postaji. Iz pomnilniške pametne kartice na delovni postaji se prebere ključ, ki se na strežniški strani premapira v uporaben podatek (npr. Username). Vsa komunikacija med deamonom in klienti poteka po XMLRPC protokolu. 

3. Avtorji

Peter Tomaž Dobrila (peco at kibla.org)
Uroš Indihar (indy at kibla.org)
Aleš Zupančič (zu at kibla.org)

4. Podatki 

Strežnik:

Dostop do različnih podatkov se dodaja med “dataConnectors” (možno brez vsakršne prekinitve delovanja deamona). Pripravljene pa so povezava 

   File.dc.py – podatki se shranjujejo v datoteko ločeno z :
   MySQL.dc.py – podatki spravljeni v MySQL bazi
   sslCert.dc.py – na kartici je spravljen podpisan SSL certifikat. Certifikat se preverja z CA. Ob uspešnem preverjanju, se kot username izbere Subject (CN...)
   test.dc.py – namenjeno samo testiranju. Ne glede na podatke iz ključa, se vedno vrne username testuser

Novo povezava mora imeti končnico .dc.py, upošteva pa se ob prvem client klicu. 

Podatki se preverjajo skozi vse povezave. Ob najdenem uporabniku se iskanje v novi povezavi ne nadaljuje. 

Odjemalci:
 
Na delovnih postajah teče service/daemon, ki zna upravljati z čitalcem pametnih kartic. Ko dobi od strežnika zahtevo za identifikacijo, prečita podatke iz kartice in jih vrne strežniku.
    Komunikacija s čitalcem pametnih kartic poteka prek PC/SC ‘middleware’ paketa, ki je v Windows okolju že del operacijskega sistema, na Linux okoljih pa se uporablja PC/SC Lite. Komunikacija s strežnikom pa poteka preko XMLRPC protokola.
    Odjemalec je napisan za Windows (XP, 2000) in Linux okolja. Zaradi uporabe jezika Python, kot razvojnega orodja, in knjižnic, ki so podprte v skoraj vseh okoljih, je koda enaka za Windows in Linux okolje, razlikuje se samo v tem, da se v Windows okolju odjemalec naloži kot ‘windows service’,  na Linux okolju pa kot deamon.

Datoteke:    
    Skupno:
        scidentSCardServer.py – odjemalec, ki čaka na xmlrpc zahtevo in se pogovarja s čitalcem
 		              kartic
        scidentConf.py – konfiguracijska datoteka	
    Windows
        scidentWinClient.py – windows service, ki nalozi odjemalca
        setup.py – datoteka za generiranje exe datoteke s pomočjo py2exe
        scidentWinClient.exe – ‘precompiled windows service’ datoteka
    
    Linux
        scidentLinuxClient.py – linux daemon, ki naloži odjemalca

5. Direktoriji

client-api/ -> klienti za dostop do serverja 
etc/ -> server konfig (ip, port)
doc/ -> navodila
server/ -> deamon (zaženi runme.py)
clients/ -> klienti za desktop računalnike

6. knjižnice in programi

python2.3
openssl
MySQL 
PC/SC Lite
pycsc
py2exe
pywin32

7. Namestitev 

- odjemalca na delovni postaji
    
    Predpogoji
        
    Windows:
1.PC/SC kompatibilen čitalec pametnih kartic
2.gonilnik
    Linux:
3.PC/SC kompatibilen čitalec pametnih kartic
4.gonilnik
5.PC/SC Lite

    Namestitev

    Windows:
instaliramo service:
# scidentWinClient.exe –install –auto
zaženemo service:
# net start scidentWinClient
	
    Linux:
1. Client se skopira v /opt/scident
2. scident skripta v /etc/init.d/ (odvisno od distribucije)
3. /etc/init.d/scident start 

- deamona

1. nastavitve v etc/server.conf
2. nastavitve v server/dataConnectors
3. start server/runme.py

8. Strežnik uporaba v shellu

# ./scidentClient.py http://127.0.0.1:8000/ 192.168.100.101
indy567

Pomeni, da je na hostu 192.168.100.101 uporabnik indy567.

9. Strežnik uporaba iz pythona 

Python 2.3.4 (#1, Jun  6 2004, 16:09:13)
[GCC 3.2.2 20030222 (Red Hat Linux 3.2.2-5)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from scidentClient import scidentClient
>>> scic=scidentClient("http://127.0.0.1:8000/")
>>> scic.getUser("192.168.100.101")
'indy567'
>>>
 
10. Zapis na kartici

<SCIDKEY>xxxxxxxxx</SCIDKEY>

