PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux Smart card in ambiente linux Smart Card • Una smart card, nella sua versione di carta a microprocessore, è, a tutti gli effetti, un computer • L’ISO utilizza il termine ICC (Integrated Circuit Card) 53.98mm 85.6mm PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE Smart card in ambiente linux Elementi ISO 7816-3/4 • La card e il lettore comunicano in base ad un paradigma del tipo comando-risposta • La strutture dati a livello rete scambiate tra lettore e card si chiamano TPDU • I protocolli possono essere di due tipi: – T=0 • half duplex asincrono • orientato ai byte. • Meccanismo di rilevazione degli errori basato sul controllo di p arità. – T=1: Elementi ISO 7816-3/4 T=1 vs • capacità di dividere in frame le istruzioni e la conseguente possibilità di scambiare un blocco di dati arbitrariamente lungo • il comando può essere prodotto sia dalla card che dal lettore • un software di gestione molto complesso T=0 • La comunicazione è esclusivamente orientata ai byte • Il comando è sempre generato dal lettore • un software di gestione semplice e veloce • half duplex asincrono • orientato ai blocchi • Meccanismo di rivelazione degli errori basato sull’uso di un blo cco detto Error Detection Code (EDC) PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE Elementi ISO 7816-3/4 •Una APDU di comando si compone di un’intestazione e di un body Classe dell’APDU Definisce la specifica istruzione appartenente alla classe indicata in CLA Parametri dell’istruzione specificata nel campo INS Smart card in ambiente linux Elementi ISO 7816-3/4 •Le applicazioni e la card si scambiano informazioni attraverso strutture dati chiamate APDU – Struttura dati usata per incapsulare i comandi dal lettore verso la card e i messaggi di response dalla card verso il lettore – Viaggiano incapsulate all’interno delle TPDU Body CLA INS P1 P2 Lc Dati Le Dispatcher APDU Applicazione Lettore Intestazione: campi di un Byte ciascuno Protocollo a livello DLC (T=0 T=1) Comando Comando Numero di bytes di Response richiesti Comando Write Binary Select File Read Binary Taglia del campo Dati Dati da comunicare alla card 1 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux Elementi ISO 7816-3/4 Smart card in ambiente linux Elementi ISO 7816-3/4 Codice di ritorno • Una APDU di risposta è inviata dalla card verso il lettore in risposta ad una richiesta di elaborazione • E’ composta da un body e un trailer Processo completato Elaborazione normale Body: può essere vuoto Trailer :contiene lo status code Dati Processo interrotto 62XX 61XX opp 9000 Errore di esecuzione Warning 63XX 64XX 65XX Checking error 67XX a 6FXX SW1 SW2 Sono inclusi tutti i codici da 6700 a 6FFF Specifica la categoria dello stato in cui si trova la carta dopo aver processato l’ultima istruzione La differenza tra figlio sinistro e destro è che nel primo, al contrario del secondo, la carta non ha modificato lo stato della memoria Se la carta restituisce uno stato di "elaborazione normale", '61XX' indica la dimensione del buffer che la carta vuole restituire all'applicazione, mentre '9000' è restituito nel caso non ci sia un buffer di ritorno. Specifica lo stato in cui si trova la carta (all’interno della categoria indicata da SW1) PC/SC – MUSCLE Smart card in ambiente linux Elementi ISO 7816-3/4 PC/SC – MUSCLE Smart card in ambiente linux PC/SC - Introduzione •La caratteristica centrale dell'ISO7816-4 è il file system – – – – Conservato in una memoria non volatile della card Struttura gerarchica a singola radice Supporta due categorie di files Ciascun file è identificato da un selettore a due bytes •Master File (MF) •E’ la radice della gerarchia •Il suo selettore è 3F00 •E’ obbligatorio •E’ un DF •Mantiene le informazioni sulla memoria • Il consorzio PC/SC Workgroup nasce con l’obiettivo di permettere agli sviluppatori di produrre applicazioni su smart card indipendenti dal lettore e dalla card • Attualmente il supporto per PC/SC versione 1.0 è fornito con tutte le distribuzioni Windows Dedicated Files Sono le directory Possono avere come discendenti altri DF o uno o più EF EF Master File DF DF EF DF EF DF •Elementary files. •Sono le foglie della gerarchia DF EF EF PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux PC/SC - Architettura PC/SC – Architettura Smart card in ambiente linux IFD Handler Interface ICC-Aware Application ICC-Aware Application ICC-Aware Application E’ composta da tre strati software principali: Service Service Providers Service Providers Provider PC/SC Service ProviderReference Interfaces PC/SC RM Interface Resource Manager ICC-Aware Application ICC-Aware ICC-AwareApplication Application PC/SC Service Provider Reference Interfaces Service Service Service Providers Providers Provider PC/SC RM Interface PC/SC IFD Handler Interface Drivers PC/SC IFD Handler Interface Drivers Smart Card Readers Resource Manager Smart Cards IFD Handler IFD Handler IFD Handler Smart Card Readers IFD IFD IFD Smart Cards ICC ICC ICC IFD Handler IFD Handler IFD Handler IFD IFD IFD ICC ICC ICC •Stabiliscono un canale di I/O fra l’host e la card •Forniscono alimentazione elettrica alla card •Software di basso livello •Fornisce accesso alle funzionalità native del lettore •Nasconde le differenze fra i vari ICC •Drivers dei lettori •Uno per ciascun lettore installato nel sistema. •Devono nascondere ogni differenza fra i vari canali di I/O utilizzabili (PS2, USB, RS232, …) 2 PC/SC – MUSCLE PC/SC – Architettura Smart card in ambiente linux PC/SC – MUSCLE PC/SC – Architettura Smart card in ambiente linux Resource Manager Resource Manager ICC-Aware Application ICC-Aware Application ICC-Aware Application ICC-Aware Application ICC-Aware Application ICC-Aware Application PC/SC Service Provider Reference Interfaces PC/SC Service Provider Reference Interfaces Service Service Providers Service Providers Provider PC/SC RM Interface PC/SC IFD Handler Interface Resource Manager Drivers Smart Card Readers Smart Cards IFD Handler IFD Handler IFD Handler IFD IFD IFD ICC ICC ICC • Smart Card Resource Manager • E’ un vigile che si occupa di instradare l’APDU, generata dallo strato SSP, verso l’handler del lettore dove la card è inserita • Fornisce un accesso controllato al lettore e, attraverso quest ’ultimo, ad una specifica carta. • Deve essere presente e dovrebbe essere fornito dal produttore del sistema operativo • Dovrebbe essere unico all’interno di un sistema PC/SC – MUSCLE PC/SC – Architettura Smart card in ambiente linux Service Service Providers Service Providers Provider PC/SC RM Interface PC/SC IFD Handler Interface Resource Manager Drivers IFD Handler IFD Handler IFD Handler IFD IFD IFD ICC ICC ICC Smart Card Readers Smart Cards • Risolve tre tipologie tipiche di problemi: – Identificazione delle risorse (lettori installati, card supportate, eventi di inserzione e rimozione delle card da uno dei lettori – Controllo dell’allocazione delle risorse dei lettori alle applicazioni che le richiedono (accesso esclusivo o condiviso) – Supporta primitive che gestiscono la transazione sugli accessi a servizi forniti da una specifica card PC/SC – MUSCLE PC/SC – Architettura Smart card in ambiente linux Service Provider ICC-Aware Application ICC-Aware Application ICC-Aware Application PC/SC Service Provider Reference Interfaces Service Provider ICC-Aware Application ICC-Aware Application ICC-Aware Application PC/SC Service Provider Reference Interfaces Service Service Providers Service Providers Provider PC/SC RM Interface PC/SC IFD Handler Interface Resource Manager IFD Handler IFD Handler IFD Handler Smart Card Readers IFD IFD IFD Smart Cards ICC ICC ICC Drivers Service Service Providers Service Providers Provider • Leggi sulla limitazione dell’esportazione di tecnologia militare strategica • La crittografia forte è tale per molti paesi PC/SC RM Interface PC/SC IFD Handler Interface PC/SC – Architettura Smart card in ambiente linux ICC Service Provider PC/SC Service Provider Reference Interfaces ICC-Aware Application ICC-Aware Application ICC-Aware Application Service ICC Service Providers Provider • • • • IFD Handler IFD IFD IFD Smart Cards ICC ICC ICC Drivers PC/SC – Architettura Smart card in ambiente linux Cryptographic Service Provider PC/SC Service Provider Reference Interfaces PC/SC RM Interface Resource Manager IFD Handler IFD Handler IFD Handler Smart Card Readers IFD IFD IFD Smart Cards ICC ICC ICC Drivers PC/SC – MUSCLE Service Service Providers Service Providers Provider PC/SC RM Interface PC/SC IFD Handler Interface IFD Handler Smart Card Readers • Uno per ogni card supportata dal sistema • Si divide in due componenti indipendenti – ICC Service Provider – Cryptographic Service Provider (CSP) • Sono logicamente parti di un unico modulo ma nella realtà sono distinti • Interfacce di programmazione per le operazioni più comuni su una card (accesso ai file, autenticazione,...) e per fornire servizi di crittografia PC/SC – MUSCLE Resource Manager IFD Handler Fornisce i servizi comuni di accesso ai files e di autenticazione E’ estendibile con funzionalità tipiche di un determinato dominio di applicazioni (mediche, bancarie…) Non dovrebbe fornire funzionalità crittografiche Necessita di una procedura di setup all’interno del SCRM prima di poter essere utilizzato dal sistema PC/SC IFD Handler Interface ICC-Aware Application ICC-Aware Application ICC-Aware Application Service ICC Service Providers Provider Service Service Providers Service Providers Provider Cryptographic Service Providers Service Provider Resource Manager IFD Handler IFD Handler IFD Handler Smart Card Readers IFD IFD IFD Smart Cards ICC ICC ICC Drivers • Fornisce API che permettno l’accesso alle funzionalità crittografiche di una specifica card • I servizi crittografici generalmente supportati sono: –generazione di chiavi –gestione di chiavi –servizi di encrypting • E’ un componente opzionale 3 PC/SC – MUSCLE Smart card in ambiente linux PC/SC – Architettura PC/SC – MUSCLE Smart card in ambiente linux PCSClite ICC Aware Applications ICC-Aware Application ICC-Aware Application ICC-Aware Application PC/SC Service ProviderReference Interfaces Service Service Providers Service Providers Provider PC/SC RM Interface Overview • Versione minimale dello stack PC/SC implementato per macchine Linux/Unix • Implementato dal MUSCLE (Movement for the Use of Smart Card under Linux Environment) • E’ scritto in ANSI C • Il suo componente centrale, il demone pcscd Resource Manager PC/SC IFD Handler Interface Drivers Smart Card Readers Smart Cards – Gira in modalità kernel e gestisce efficientemente IFD Handler IFD Handler IFD Handler IFD IFD IFD ICC ICC • • • • ICC applicazioni concorrenti lettori con slot multipli multiutenza tipi di smart card Qualsiasi software all’interno dell’ambiente del sistema operativo che voglia utilizzare le funzionalità messe a disposizione da una o più card PC/SC – MUSCLE PCSClite Smart card in ambiente linux PC/SC – MUSCLE PCSClite Smart card in ambiente linux Overview • Quando è inizializzato, esegue i seguenti passi API • 1. alloca memoria per i lettori 2. acquisisce informazioni sui lettori statici installati (come i lettori seriali) 3. testa le connessioni hot-plug per lettori, ad esempio, USB o PCMCIA 4. setta il canale attraverso il quale le applicazioni possono fare le loro richieste 5. ascolta il canale Iinsieme di API, che le applicazioni utilizzano per utilizzare le risorse del resource manager della card • Costituiscono il livello più basso utilizzabile dalle applicazioni nello stack PC/SC • Le applicazioni si connettono al demone linkandosi alla libreria libpcsclite PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux PCSClite SCardEstablishContext • La comunicazione con ICC Resource Manager, avviene all’interno di un “Contesto” • La chiamata a questa API provoca l’assegnazione all’applicazione chiamante di un canale di comunicazione privato con il resource manager SCardListReaders • Dopo aver stabilito un contesto, è possibile interrogare il sistema sui lettori correntemente installati LONG SCardListReaders ( SCARDCONTEXT hContext, LPCSTR mszGroups, LPSTR mszReaders, LPDWORD pcchReaders LONG SCardEstablishContext (DWORD dwScope, LPCVOID pvReserved1, LPCVOID pvReserved2, LPSCARDCONTEXT phContext ); ); 4 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux PCSClite SCardConnect Il prossimo passo è quello di connettere la card inserita nel lettore e il lettore stesso • Non esiste un meccanismo plug&play permette l’interfacciamento automatico fra card e lettore SCardConnect • • Apre una connessione tra la card e il lettore • La connessione è stabilita nell’ambito di un contesto valido col card manager LONG SCardConnect (SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol ); PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE PCSClite PCSClite SCardStatus Smart card in ambiente linux SCardStatus LONG SCardStatus ( SCARDHANDLE hCard, • LPSTR szReaderName, LPDWORD pcchReaderLen, LPDWORD dwState, LPDWORD pdwProtocol, LPBYTE pbAtr, LPDWORD pcbAtrLen ); E’ possibile, in ogni momento conoscere lo stato in cui il lettore si trova nell’ambito della sessione corrente I possibili valori di ritorno sono: • • • • PC/SC – MUSCLE Smart card in ambiente linux carta assente carta presente carta presente ma resettata ….. PC/SC – MUSCLE PCSClite Smart card in ambiente linux PCSClite SCardGetStatusChange • Sia il lettore che la card si trovano, in ogni istante di una seesione, in un determinato stato – Nessuna card nel lettore – Carta presente nel lettore – Carta presente e allocata in modo esclusivo ad un’altra applicazione SCardGetStatusChange • Per interrogare i cambiamenti di stato, ad esempio per bloccare un’applicazione nell’attesa che un utente inserisca una carta nel lettore, si usa la funzione LONG SCardGetStatusChange ( SCARDCONTEXT hContext, DWORD dwTimeout, LPSCARD_READERSTATE rgReaderStates, DWORD cReaders ); 5 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux SCardTransmit LONG SCardTransmit ( SCARDHANDLE hCard, LPCSCARD_IO_REQUEST pioSendPci, LPCBYTE pbSendBuffer, DWORD cbSendLength, LPSCARD_IO_REQUEST pioRecvPci, LPBYTE pbRecvBuffer, LPDWORD pcbRecvLength ); • Utilizzata per trasmettere le APDU sulla carta • Invia l’APDU alla carta inserita nel lettore cui la carta si è connessa tramite la SCardConnect PC/SC – MUSCLE • In ambienti multitasking, è possibile che più applicazioni possano utilizzare concorrentemente la card • Anche all’interno di questi scenari, una di queste applicazioni, potrebbe voler assumere temporaneamente il controllo esclusivo delle risorse LONG SCardBeginTransaction ( SCARDHANDLE hCard ); • Realizza una sezione critica iniziando una transazione logica tra l’applicazione chiamante e la card associata al contesto referenziato da hCard PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux SCardEndTransaction • Quando l’applicazione ha terminato la sequenza di operazioni da svolgere in regime di detenzione esclusiva delle risorse, deve rilasciarle terminando la transazione LONG SCardEndTransaction ( SCARDHANDLE hCard, DWORD dwDisposition ); PC/SC – MUSCLE PCSClite Meccanismi di Autenticazione • Sono due i tipi di autenticazione utilizzati dalle schede ISO7816-4 compliant – External Authenticate: la card si accerta dell’identità dell’host – Internal Autenthicate: l’host verifica le credenziali della card PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux Supporti Utilizzati: Schlumberger • Schlunberger Cyberflex Access 16k – Non è una Java Card – Fornisce 8 identità che identificano i diversi livelli di accesso alle risorse della carta • • • • PCSClite SCardBeginTransaction default chv1 chv2 aut0-aut4 PCSClite Supporti Utilizzati: Gemplus • Gemplus GemXpresso 211PK_Is – – – – E’ una Java Card Supporta le specifiche Visa per la sicurezza delle transazioni Supporta vari algoritmi di crittografia (simmetrica e asimmetrica) Versione non USA: usa chiavi a 512 bit • Non è dotata di una Transport Key: utilizza l’External Auth per ogni tentativo di accesso • E’ dotata di una Transport Key 6 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux PCSClite Smart card in ambiente linux Installazione Delle Risorse 1/2 PCSClite Installazione Delle Risorse 2/2 • Installazione di PC/SC • Configurazione del lettore – Scaricare i driver del proprio lettore da www.linuxnet.com • Per GEMPLUS PC410 cercare gp_core-2.4.tar.gz – Compilare il file gp_core-2.4 – Scaricare la versione aggiornata della libreria pcsclite-1.x.x da www.linuxnet.com – Compilare • ./configure • make • make install – Viene creato il file /usr/local/etc/reader.conf • Viene creato il file libgp_core.so • Inserire in tale file – Creare la directory /usr/local/lib/readers/ – – – – Il lettore utilizzato La porta di comunicazione La versione dei driver Un friendly name per il lettore – Creare la directory /dev/pcsc e /tmp/pcsc – Lanciare il demone con pcscd –d stdout – Inserire la card nel lettore e….. PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE JAVA Card Smart card in ambiente linux JAVA Card L’infrastruttura • Particolari tipi di smart card che presentano una serie di caratteristiche – Indipendenza dalla piattaforma – Supporto a più applicazioni: su una stessa JavaCard possono coesistere diverse Java Card Applet indipendenti fra loro e selezionabili singolarmente run time – Caricamento di nuove applicazioni dopo la consegna all’utente finale – Flessibilità: il linguaggio utilizzato per programmarle è un subset del linguaggio Java – Compatibilità con gli standard delle SmartCard: le JavaCard sono compatibili con lo standard ISO 7816 PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE JAVA Card L’infrastruttura Forniscono le funzionalità di I/O, le funzionalità crittografiche e i servizi di allocazione della memoria Smart card in ambiente linux JAVA Card L’infrastruttura • Java Card Virutal Machine • Si occupa dell’interpretazione del bytecode Java Card • Fornisce il supporto al linguaggio Java 7 PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE JAVA Card Smart card in ambiente linux L’infrastruttura •Insieme delle classi che implementano l’API Java Card •Include i package standard e le eventuali estensioni •Provvede •alla distribuzione agli altri componenti dei comandi provenienti dall’esterno, •alla gestione delle operazioni atomiche •all’installazione delle Java Card Applet PC/SC – MUSCLE Smart card in ambiente linux L’infrastruttura Interfaccia utilizzata dalle Java Card Applet per l’accesso al JCRE e ai Metodi Nativi PC/SC – MUSCLE JAVA Card Smart card in ambiente linux L’infrastruttura •Java Card Runtime Environment •E’ l’ambiente Java Card che permette la portabilità del codice JAVA Card L’infrastruttura classi aggiuntive definite dal costruttore della Java Card, utilizzabili dalle Java Card Applet PC/SC – MUSCLE Smart card in ambiente linux JAVA Card PC/SC – MUSCLE JAVA Card L’infrastruttura Smart card in ambiente linux JAVA Card Le Applet • Le Java Card Applet devono presentare una struttura ben definita per funzionare correttamente • Tale struttura è del tutto simile alle applet Java eseguibili dai browser in ambiente PC • Nelle slide successive sono descritti i metodi necessari all’utilizzo di una Java Card Applet • Applicazioni scritte in un subset del linguaggio Java per essere eseguite su Java Card • Implementano tutte le funzionalità della Java Card accessibili dall’esterno • L’applicazione esterna di controllo può selezionarle una alla volta, in maniera esclusiva, e richiedergli certi servizi, quali la memorizzazione o l’esecuzione di operazioni 8 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux Smart card in ambiente linux JAVA Card • Questa è la struttura generale di una applet per Java Card • Richiamato dal JCRE come ultimo passo dell’installazione Applet • I metodi necessari sono descritti in seguito •Tutte le Java Card Applet sono oggetti persistenti per cui questo metodo è chiamato una sola volta nella vita della Java Card Applet import javacard. framework.*; // importazione di classi del framework ... public class <Nome JavaCard Applet> extends Applet { ... private <Nome JavaCard Applet>() { // metodo costruttore // si consiglia di creare qui tutti gli oggetti utilizzati dalla JavaCard Applet } …. // seguono metodi nelle slide successive } PC/SC – MUSCLE •Al suo interno vanno inserite - tutte le istruzioni di creazione degli oggetti l’Applet intende utilizzare - una chiamata a System.register( ) per la registrazione della Applet presso il JCRE public static void install (APDU apdu) PC/SC – MUSCLE Smart card in ambiente linux Smart card in ambiente linux JAVA Card Le Applet: il metodo select() • Richiamato dal JCRE per selezionare una Java Card Applet La Java Card Applet può accettare o rifiutare la selezione facendo restituire al metodo true o false public boolean select () • richiamato dal JCRE - immediatamente dopo la chiamata di select( ) la prima volta - ogni volta che arriva un APDU di comando dall’entità esterna successivamente • Una volta assolte le richieste, l’Applet risponde con un APDU di risposta public void process (APDU apdu) PC/SC – MUSCLE Smart card in ambiente linux JAVA Card Le Applet: il metodo process() - il JCRE ha ricevuto un APDU riportante un’istruzione di selezione della Java Card Applet • JAVA Card Le Applet: il metodo install() Le Applet PC/SC – MUSCLE JAVA Card Conclusioni • La creazione di una Java Card Applet, è un’operazione piuttosto semplice • Questo è vero per due motivi: - l’utilizzo di un linguaggio ad alto livello quale Java - la possibilità di utilizzare un approccio ad oggetti nella creazione delle funzionalità Smart card in ambiente linux MUSCLE Introduzione • Progetto per coordinare lo sviluppo di applicazioni per smart card in ambiente Linux • Crea un’interfaccia di comunicazione tra l’host e la smart card compatibile con i vari modelli di lettore e di scheda e che fornisce funzionalità di sicurezza 9 PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE MUSCLE Smart card in ambiente linux MUSCLE Introduzione • La comunicazione con la s.c. è basata su PC/SC Terminologia • Un Token è un qualsiasi tipo di card, scheda pcmcia o dispositivo crittografico in generale • Progetto sviluppato per Javacard 2.0 e 2.1 compliant • Nasce per Linux e per i sistemi Unix-like ma offre compatibilità anche con piattaforme basate su Windows (2000, 98, CE) e Macintosh (OS X) PC/SC – MUSCLE Smart card in ambiente linux • Uno Slot è il dispositivo che contiene un token (Es. lettore di smart card) • Non tutti i token e gli slot sono supportati, ma è facile verificarlo con delle funzioni fornite da MUSCLE PC/SC – MUSCLE MUSCLE Smart card in ambiente linux MUSCLE Terminologia Terminologia • L’ ACL (Access Control List) è una lista di permessi per proteggere i dati e per controllarne l’accesso • Un Oggetto Musclecard (o semplicemente oggetto) è un contenitore nel quale un’applicazione può leggere e scrivere dati • Definendo un ACL per un’applicazione, si stabilisce la condizione che deve essere soddisfatta per effettuare una determinata operazione (Es. la verifica di un PIN) • Non ha una propria struttura né tanto meno dei metodi ad esso associati • Ha un id cha va dai 2 ai 64 caratteri ed è dotato di un ACL PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE MUSCLE Smart card in ambiente linux Terminologia • Una Musclecard Key è una chiave identificata con un numero da 0 a 15 • Ogni chiave ha delle proprietà specifiche, quali il tipo e la dimensione (in bit) MUSCLE Architettura - Introduzione • Opera su due livelli differenti: – Host – Card • Un MuscleCard PIN è una stringa di caratteri decimali a cui si fa riferimento con un identificativo compreso tra 0 e 8 10 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Smart card in ambiente linux Architettura - Introduzione Il livello Host ha una struttura suddivisa in 4 strati MUSCLE Architettura – MuscleCard Plug- in • è il cuore di tutta la struttura di MUSCLE MUSCLECARD FRAMEWORK API MUSCLECARD FRAMEWORK API MUSCLECARD PLUG - IN ( CSP ) MUSCLECARD PLUG - IN ( CSP ) MUSCLE PC/SC Lite API MUSCLE PC/SC IFD Handler •Il livello Smart Card prevede il solo strato Java Card Applet CSP Applet • In questo strato è implementato il CSP che si occupa di tutte le caratteristiche legate alla sicurezza (es. generazione e gestione delle chiavi, dei PIN) MUSCLE PC/SC Lite API MUSCLE PC/SC IFD Handler CSP Applet JavaCard 2.1 Compilant Card JavaCard 2.1 Compilant Card PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Smart card in ambiente linux Architettura – MuscleCard Plug- in • MUSCLE utilizza per la comunicazione un approccio basato su una javacard applet • L’idea è la seguente: – si definiscono delle specifiche per un unico CSP a livello host – si implementa un applet, da caricare sulla card, che rispetta tali specifiche MUSCLE Architettura – MuscleCard Plug- in • I comandi forniti dal plug-in si dividono in quattro gruppi : – – – – gestione delle chiavi gestione dei PIN gestione dei Musclecard Object gestione generale • La comunicazione tra ’lhost (CSP) e la card avviene tramite l’applet che viene caricata sulla carta ed a cui si può fare riferimento con un identificatore statico predefinito chiamato application id (AID) • a questo livello di astrazione i comandi sono delle APDU PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Smart card in ambiente linux Architettura – MuscleCard Plug- in MUSCLE Architettura – MuscleCard Plug- in • Facciamo qualche esempio: GenerateKeyPair GenerateKeyPair Caratteristiche delle chiavi Codice dell’istruzione (hex) Dimensione del campo successivo GenetareKeyPair S 30 Chiave Priv Chiave Pub Size Param. Gen. Nome del comando GenetareKeyPair S 30 Chiave Priv Identificativo della chiave privata Chiave Pub Size Param. Gen. Identificativo della chiave pubblica Indica che al termine del comando la carta non restituisce un buffer di dati 11 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Plug- in Architettura – MuscleCard Plug- in VerifyPIN VerifyPIN VerifyPIN S Nome del comando 42 Num . del PIN 0x00 Size Codice PIN VerifyPIN S 42 Num . Del PIN Indica che al termine del comando la carta non restituisce un buffer di dati PC/SC – MUSCLE Smart card in ambiente linux Size Codice PIN Dimensione del campo successivo Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API MUSCLECARD FRAMEWORK API MUSCLECARD PLUG - IN ( CSP ) MUSCLE PC/SC Lite API • La libreria è stata progettata per funzionare anche in ambiente multi-applicazione MUSCLE PC/SC IFD Handler • Gestisce la mutua esclusione delle applicazioni sulla card e sul lettore CSP Applet JavaCard 2.1 Compilant Card PC/SC – MUSCLE Smart card in ambiente linux 0x00 PC/SC – MUSCLE MUSCLE Architettura – MuscleCard Framework API • L’interfaccia utente dell’architettura • E’ costituito da un API scritta in C che compie una mappatura diretta dei comandi definiti nel CSP • Fornisce funzioni aggiuntive per effettuare più facilmente le operazioni più comuni della comunicazione Codice PIN da verificare Identificativo del PIN Codice dell’istruzione (hex) PC/SC – MUSCLE MUSCLE Architettura – MuscleCard Framework API • In questo strato l’ACL è definita come una serie di costanti • Le costanti si utilizzano come parametro di certe funzioni che svolgono dei compiti per i quali c’è bisogno di un’autorizzazione Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Alcune costanti ACL: MSC_AUT_NONE MSC_AUT_ALL MSC_AUT_PIN_0 MSC_AUT_KEY_0 - operazione mai permessa - operazione sempre permessa - op. permessa dopo la verifica del PIN 0 - op. permessa dopo l’autenticazione della KEY 0 12 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API #include <musclecard.h> MSCListTokens MSCListTokens ( MSCULong32 listScope, MSCLPTokenInfo tokenArray, MSCPULong32 arrayLenght ); Parametri listScope tokenArray arrayLenght Specifica il tipo di lista che si desidera leggere Array di strutture di tipo MSCTokenInfo Numero di strutture in tokenArray PC/SC – MUSCLE • ritorna la lista dei token validi del sistema • arrayLenght è una variabile “INOUT” – usata come IN specifica Il numero di strutture allocate dall’applicazione – usata come OUT restituisce il numero di strutture ritornate – Se tokenArray o arrayLenght sono NULL la funzione restituisce il numero delle strutture nell’array PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux MSCListTokens MSCListTokens • Struttura MSCTokenInfo: • Possibili valori di listScope: MSC_LIST_KNOWN MSC_LIST_ALL MSC_LIST_SLOTS MUSCLE Architettura – MuscleCard Framework API – Contiene le informazioni su un token. – E’ usata per ricevere informazioni e per gestire la connessione Lista solo i token supportati Lista tutti i token Lista tutti gli slot se non vi è inserito un token PC/SC – MUSCLE • MSCLPTokenInfo è un puntatore a MSCTokenInfo PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API #include <musclecard .h> Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API MSCEstablishConnection MSCEstablishConnection ( MSCLPTokenInfo tokenStruct, ); Parametri tokenStruct sharingMode applicationName nameSize pConnection MSCULong32 sharingMode, MSCPUChar8 applicationName, MSCULong32 nameSize, MSCLPTokenConnection pConnection Puntatore alla struttura ritornata dalla MSCListToken Determina se il token deve essere condiviso Nome dell’applicazione o applet ID Lunghezza del nome dell’applicazione “ Gestore” della connessione • stabilisce una connessione con un token che è stato restituito dalla MSCListTokens • applicationName può essere l’applet ID (AID) o il nome stesso dell’applicazione • nameSize può essere settato a NULL indicando che si intende usare l’applicazione di default 13 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API MSCEstablishConnection MSCEstablishConnection • Possibili valori di sharingMode: MSC_SHARE_SHARED Permette a questo token di essere condiviso MSC_SHARE_EXCLUSIVE Permette a questo token di non essere condiviso MSC_SHARE_DIRECT Stabilisce una connessione diretta con il lettore (condivisa) PC/SC – MUSCLE • Struttura MSCTokenConnection: – è usata come gestore della connessione • MSCLPTokenConnection è un puntatore a MSCTokenConnection PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API #include <musclecard.h> MSCVerifyPin MSCVerifyPIN ( MSCLPTokenConnection pConnection, MSCUChar8 pinNum, MSCPUChar8 pPinCode, MSCULong32 pinCodeSize • Verifica un PIN per ottenere privilegi di autenticazione per compiere una determinata operazione ); Parametri pConnection pinNum pPinCode pinCodeSize Gestore della connessione precedentemente aperta Identificatore del PIN Codice PIN da verificare Dimensione del codice PIN PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE MUSCLE Architettura – MuscleCard Framework API #include <musclecard.h> MUSCLE Architettura – MuscleCard Framework API MSCCreateObject MSCCreateObject ( MSCLPTokenConnection pConnection, MSCString objectID, MSCULong32 objectSize, MSCLPObjectACL pObjectACL ); Parametri pConnection objectID objectSize pObjectACL Smart card in ambiente linux • Crea un oggetto vuoto di dimensione variabile su una javacard • L’oggetto è identificato dalla stringa specificata dal parametro objectID • Dopo la creazione è possibile accedere in lettura e/o scrittura, rispettando le costanti ACL ad esso associate Gestore della connessione precedentemente aperta Identificatore dell’oggetto Dimensione dell’oggetto (in 16 bit) ACL dell’oggetto 14 PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux #include <musclecard .h> MSCCreateObject • La struttura MSCObject specifica nei suoi campi le costanti ACL associate all’oggetto per la lettura, scrittura e cancellazione MSCWriteObject( MSCLPTokenConnection pConnection, MSCString objectID, MSCULong32 offset, MSCPUChar8 pInputData, MSCULong32 dataSize, LPRWEventCallback rwCallback, MSCPVoid32 addParams ); • MSCLPObject è un puntatore alla struttura MSCObject PC/SC – MUSCLE PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux • MUSCLE Architettura – MuscleCard Framework API MSCWriteObject Parametri pConnection objectID offset pInputData dataSize rwCallback addParams MUSCLE Architettura – MuscleCard Framework API MSCWriteObject Gestore della connessione precedentemente aperta Identificatore dell’oggetto Posizione (byte)da cui iniziare a scrivere Dati da scrivere Dimensione dei dati da scrivere Funzione di callback (opzionale) Parametri della funzione di callback (opzionale) • Scrive nell’oggetto specificato dall’ObjectID • L’applicazione che usa questa funzione deve essersi già autenticata precedentemente Per la gestione delle funzioni di callback fare riferimento alle specifiche MuscleCard Framework API disponibili sul sito www.linuxnet.com PC/SC – MUSCLE Smart card in ambiente linux PC/SC – MUSCLE MUSCLE Architettura – MuscleCard Framework API Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API #include <musclecard .h> MSCReadObject MSCReadObject( MSCLPTokenConnection pConnection, MSCString objectID, MSCULong32 offset, MSCPUChar8 pOutputData, MSCULong32 dataSize, LPRWEventCallback rwCallback, MSCPVoid32 addParams ); Parametri pConnection objectID offset pOutputData dataSize rwCallback addParams Gestore della connessione precedentemente aperta Identificatore dell’oggetto Posizione (byte)da cui iniziare a scrivere Dati da leggere Dimensione dei dati da scrivere Funzione di callback (opzionale) Parametri della funzione di callback (opzionale) 15 PC/SC – MUSCLE Smart card in ambiente linux MUSCLE Architettura – MuscleCard Framework API MSCReadObject • Legge nell’oggetto specificato dall’ObjectID • L’applicazione che usa questa funzione deve essersi già autenticata precedentemente 16