Newsgroup: it.comp.sicurezza.crittografia
Titolo: Accesso a software tramite smartcard o token usb

Salve a tutti,
volevo chiedervi alcuni consigli sul progetto che sto iniziando: la mia
ditta produce un software ed è stato deciso che questo potrà essere
avviato solo se nel lettore di smartcard che verrà fornito ci sarà
quella dell'utente che ci accede (ora al programma si accede mediante
login e pwd memorizzati in un db oracle centralizzato).
Quindi devo scrivere l'interfaccia verso il lettore di smartcard che
una volta effettuato il  tentativo di login confermi che è inserita la
smartcard dell'utente corretto e definire le funzionalità necessarie
per chi creerà queste smartcard x gli utenti.
Sono totalmente digiuno dell'argomento per cui mi servirebbero alcuni
consigli su:
- come interfacciarmi al lettore di smartcard da integrare nel
software, con qualche libreria se esiste ed è buona, oppure api gia
presenti di windows, se ci sono?
- nel caso di smartcard (e nn token usb) le librerie per interfacciarsi
è legata al modello di smartcard?
- meglio smartcard o token usb?
Grazie 1000 in anticipo,
Matteo
http://www.memoriedalbuio.com

mefist...@yahoo.it
 ha scritto:

Tempo fa fu pubblicato questo link proprio in questo ng. Te lo rigiro,
magari ti aiuterà:
http://www.ugosweb.com/
-- 
Ciao.
Leo.
Web: 
www.leonardomiliani.com
E-mail: 
leon...@leonardomiliani.com
Scegli software opensource - Choose opensource software

quella dell'utente che ci accede (ora al programma si accede mediante
se usi la tecnologia Microsoft fa tutto lui sia a livello di web che
login macchina... dipende come vuoi farlo.
comunque esistendo la soluzione già pronta a livello di s.o. ti
conviene valutare bene se usare o fare, anche in base al costo di
licenza, nel caso di MS diventano tutte CAL
Per applicazioni serie ormai si parla solo di single signeon...
Andrea Soms

 
Direi che se proprio a digiuno ;-)
Sempre che abbia capito bene le tue intenzioni, c'č un errore
concettuale e c'č un'ingenuitŕ che rende inutile il tutto.
1) A te non interessa sapere se nel lettore c'č la corretta smartcard
(anzi, non ti interessa neanche sapere se c'č il lettore): ti interessa
sapere se l'utente dispone della chiave privata corretta.
Di per sč, potrebbe stare su un file o l'utente potrebbe ridigitarsela
tutta ogni volta.
La (ragionevole) certezza che ti da la smartcard č che, a differenza
degli altri metodi, la chiave non possa essere copiata nč dall'utente
stesso nč da enventuali software "malevoli" sul computer (questo perché
č il processore sulla carta che accede alla chiave privata e restituisce
direttamente i risultati).
Tra l'altro, gli standard delle smartcard prevedono una certa resistenza
anche alle manomissioni fisiche. Da questo punto di vista, i token USB,
che magari usano pure gli stessi chip, sono piů vulnerabili. Per il
resto non c'č molta differenza e le porte USB sono piů diffuse dei
lettori di carte.
Quindi non dovresti preoccuparti di scrivere nulla per gestire la
smarcard; quello di cui hai bisogno č un metodo per chiedere chiave e
certificato da controllare all'utente. Se vuoi lavorare solo in ambiente
Windows con le CrypoAPI e parenti, ci pensa il sistema a chiedere
all'utente la smartcard, di digitare, il PIN, ecc... Se vuoi essere un
po' piů universale, puoi usare le librerie NSS di Mozilla o quelle
OpenSSL che si interfacciano a smartcard e token via PKCS#11.
La cosa non č complicatissima, a parte scrivere la documentazione in
modo comprensibile per l'utonto ;-)
2) Qui non son sicuro di aver capito cosa vuoi dire: in un caso, non
funziona, nell'altro, diventa tutto ancora piů semplice.
Stai parlando di un'applicazione client/server? Se sě, vuoi usare la
carta per
a) l'accesso alla parte client?
b) per permettere l'accesso del client al server?
Caso a) lascia perdere: non č una cosa del tutto impossibile, e anzi ci
sono dei prodotti apposta, ma di solito chiunque abbia sufficienti
privilegi di accesso al sistema č in grado di manipolare il codice,
l'ambiente o entrambe da far partire comunque l'applicazione.
Caso b) allora č tutto piů semplice: usa SSL e ignora completamente
l'autenticazione da parte del client che deve limitarsi a fare da
tramite per gestire la connessione.
Ciao.

lettori di carte.
Credo che intendessi che meccanicamente la chiave è migliore.
Noi la abbiamo in programamzione di uso per un progetto di firma
elettronica/autenticazione proprio perché è più facile da usare sui PC
con USB frontale senza HW aggiuntivo ed è più facile da trasportare
come porta chiavi.
Il chip è lo stesso usato nelle smart card e ha la stessa
certificazione per la firma legale.
Andrea Soms


No, intendo dire proprio che, a parità di chip e scegliondo dei modelli
a caso, le chiavette USB sono meccanicamente meno sicure della smartcard:
http://www.grandideastudio.com/files/security/tokens/usb_hardware_token.pdf
Il punto è che gli standard ISO e FIPS che riguardano le smartcard
prevedono esplicitamente vari livelli di sicurezza fisica, mentre per i
token non c'è nulla del genere.
Questo non significa che se il produttore non sa fare il suo mestiere
non possa mettere in commercio modelli di carte insicuri o, viceversa,
ci siano dei token ben fatti, né che le carte ben fatte siano resistenti
a qualunque tipo di attacco.
Se poi c'è una probabilità reale che qualcuno si prenda la briga di
attaccare fisicamente una chiavetta USB quando è più facile minacciare
con un arma il suo possessore, non saprei dirti.
Ciao.

a caso, le chiavette USB sono meccanicamente meno sicure della smartcard:
Mi sembrava strano perché mi risulta che i Token compatibili con la
normativa della firma italiana in realtà sono delle smartcard con
l'elettronica di interfacciamento per l'USB. Infatti alcune versioni
hanno le mini smart card removibili con una finestrella.
Quindi la sicurezza è la medesima.
Il testo da te citato, dopo averlo letto velocemente, credo che
riguardi invece le chiavette con memoria.
Dicevo che sono più sicure perché mi è successo che le smart card
avessero dei problemi meccanici (usura) che non ho riscontrato sulle
chiavi.
Andrea

 tramite per gestire la connessione.
Questo caso tu intendi usare SSL per criptare le transazioni usando la
chiave contenuta nella smartcard, oppure qualcosa di completamente
diverso?
Grazie ancora per le risposte e la pazienza con chi sta entrando in sto
mondo e nn ne capisce molto.
Matteo
http://www.memoriedalbuio.com

 diverso?
SSL fornisce tre funzionalità:
1) il server presenta il proprio certificato: volendo (è altamente
consigliabile) puoi verificare che il client si stia collegando al
server corretto
2) (opzionalmente) il client presenta il proprio certificato e il server
decide se accettarlo o meno
3) client e server negoziano una chiave simmetrica per la sessione che
viene usata per cifrare tutto il traffico
La fase 1) è sempre presente, anche se spesso non viene fatta alcuna
verifica perché lo scopo è sfruttare la funzionalità 3).
La fase 2) viene spesso ignorata, ma in questo caso è esattamente quello
che ti serve: configuri lo strato di rete del server per accettare solo
connessioni SSL da ben determinati certificati e crei un client in grado
di leggere il certificato da qualche parte; il lavoro da fare ex novo
diventa minimo.
Che ambiente/linguaggio devi usare? Magari ho qualche esempio pronto.
Ciao.

Ciao,
io lavoro in Borland C++/Visual C++ a seconda delle esigenze, cmq ti
dico, l'utente vuole qualcosa da inserire nel pc, una smart card o un
token, non c'è verso di cambiare questo punto.
Per cui se l'implementazione di una connessione criptata con SSL è
possibile legarla all'uso di uno di questo strumenti se ne può parlare
altrimenti ti farei solo perdere tempo, per quanto possa essere il
sistema più sicuro o anche solo più logico.
Grazie x le info!
Matteo
http://www.memoriedalbuio.com


Il fatto che il token fosse da usare sul PC client mi era chiaro, non ho
invece capito se il problema è proteggere il client nel senso del codice
 o di autenticare/autorizzare l'accesso al server.
Se il problema è il primo (ad esempio, per dare un numero di licenze
limitato), ci sono dei prodotti apposta composti da un token e dall SDK.
Al momento mi viene in mente è Eutron Smartkey, ma consideralo solo uno
spunto e non un consiglio, perché non l'ho provato.
Data la complessità della questione, non credo che in un tempo
ragionevole tu (nè io o altri che non abbiano dedicato anni al problema)
 possa affrontarla con successo. Inoltre, usare un prodotto del genere
scarica le eventuali responsabilità sul produttore.
Se invece il tuo scopo è autenticare l'accesso al server, ovviamente
puoi far vedere che al client va collegata una smartcard. Questo non
vuol dire che la smartcard non sia usata proprio con SSL.
Tra l'altro, se usi le librerie client Oracle originali, Wallet può
gestire direttamente smartcard e token USB compatibili PKCS#11:
http://download-uk.oracle.com/docs/cd/B14117_01/network.101/b10772/asossl.htm
In questo caso il tuo lavoro diventa:
- dire al DBA di configurare il db per richiedere l'autenticazione via
certificato;
- spiegare come installare i driver PKCS#11 per il token che hai scelto;
- e direi basta...
Ciao.

 - e direi basta...
questa è ganzisssima come idea.
sai se queste possibilità ci sono nella standard edition di oracle o
serve l'enterpire?
M


Spiacente, non sono il il DBA, ho lavorato solo dall'altro lato...
Ciao.