Smart Card Elementi ISO 7816-3/4 Elementi ISO 7816

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