VAI AL CAPITOLO 4 : SISTEMI OPERATIVI PER SMART CARD
CAPITOLO 3 : Comunicazione ed Organizzazione delle Informazioni
3.1 Comunicazioni tra Smart Card e Dispositivi Lettori
Protocollo T=0
Protocollo T=1
ATR (Answer To Reset)
Struttura di un I-block
Struttrura del WTX Request
APDU di Comando
APDU di Risposta
Metodo di accesso ai File
Struttura degli Elementary File
Profili per Smart Card
Struttura dei dati (TLV)
Sicurezza del File System
Domini di sicurezza
CAPITOLO 3 Comunicazione ed Organizzazione delle
Informazioni
3.1 Comunicazioni tra Smart Card e Dispositivi Lettori
Una Smart Card comunica con l’esterno attraverso dati
incapsulati in APDU (Application Protocol Data Unit), che rappresenta il
blocco minimo di Byte scambiati tra carta e dispositivo lettore.
Il processore della carta assume un ruolo passivo (inizialmente)
in cui aspetta un messaggio di Reset da parte del terminale cui è
collegato (attraverso il lettore). Dopo tale segnale la carta risponde
inviando un messaggio particolare, definito come ATR (Answer To Reset),
poi aspetta ulteriori comandi. Sono definiti due protocolli di comunicazione,
T=0 e T=1.
Protocollo T=0
Questo è un protocollo di trasmissione, orientato
al Byte, che controlla la parità del Byte subito dopo averlo ricevuto
e ne chiede la ritrasmissione se riscontra un errore. Il terminale invia
un Byte e la carta controlla che la parità del Byte ricevuto sia
uguale a quella contenuta nel messaggio, poi invia un bit di risposta (ACK)
settato a zero o uno in funzione della correttezza riscontrata. Questo
metodo risulta molto lento per via delle limitate dimensioni della RAM
sulla carta. In caso di trasmissione di lunghe sequenze di Byte il Sistema
Operativo della carta deve operare letture e scritture sulla EEPROM (come
avviene per un disco rigido per PC) che rendono lenta la comunicazione.
Protocollo T=1
Questo protocollo è più sofisticato del
precedente e permette la trasmissione di blocchi di Byte in numero specificato,
definito come I-block. La comunicazione inizia con un Reset della carta
ed un ATR di risposta, continua con comandi e risposte contenenti I-block
e con WTX (Waiting Time Extension). Il messaggio WTX request indica una
richiesta di tempo, da parte della carta, per portare a termine l’elaborazione
del comando ricevuto; WTX response contiene la risposta del lettore a tale
richiesta. Una tipica sessione di comunicazione è indicata di seguito.
ATR (Answer To Reset)
Dopo un reset della carta o l’inserimento in un lettore
è inviato un messaggio speciale composto da 24 Byte che definiscono
il tipo di carta ed il modo di comunicare con essa. I primi 8 Byte sono
una sezione prefisso (intestazione) e sono seguiti da 15 Byte definiti
come Historical Byte (descrivono le caratteristiche della carta). Un ultimo
Byte svolge la funzione di carattere di controllo. Possono trovarsi soluzioni
con ATR più corti nei casi in cui è sono richiesti tempi
di comunicazione brevi (pochi Byte). Un tipico messaggio di ATR è
mostrato di seguito.
Intestazione dell’ATR (8 Byte) è definita da
"Lunghezza, TS, T0, TB1, TC1, TD1, TD2, TA3, TB3".
Esempio : la stringa di 8 Byte espressa in esadecimale
(17 3B EF 00 FF 81 31 66 45) ha il seguente significato:
Esadec. Byte
17 Lunghezza dell’ATR è di 23 Byte (in esadecimale 17=23) senza il carattere di controllo
3B
TS : convenzione logica "B" oppure "F"
3B = Diretta, High=Logic 1
3F = Inversa, High=Logic 0
(EMV raccomanda la convenzione ??B?)
EF
T0 : indicazione T=1.
“E” indica T=1. “6” indica T=0 .
“E” indica inoltre che seguono TB1, TC1, TD1 con caratteristiche di T=1
“F” indica 15 historical Byte.
00 TB1 : VPP non richiesto (Per programmazione EEPROM)
FF TC1 : tempo da attendere tra due caratteri
81 TD1 : Ulteriori indicazioni in TD2
31 TD2 : Ulteriori indicazioni in TA3, TB3
66 TA3 : dimensione del campo informazioni (66 esadecimale = 102 Byte)
45 TB3 : tempo di attesa per Blocco/Carattere
“4” per il tempo di attesa del blocco
“5” per il tempo di attesa del carattere
Historical Data : 15 Byte definiscono le caratteristiche
della carta, i primi tre sono descritti sotto.
Struttura di un I-block
A livello di protocollo di comunicazione un I-block (blocco
di informazioni) contiene alcuni campi da un Byte, mostrati di seguito,
ed un campo INF di dimensione variabile (campo informazione).
I-block:
NAD | PCB | LEN | INF | LRC |
NAD : Node Address Byte. Indica il
nodo logico del destinatario e del recipiente a cui sono indirizzati i
messaggi
PCB : Protocol Control Byte assume valori compresi tra 00 e 40 ed è utilizzato per controllare la correttezza di serie di I-block
LEN : Indica la lunghezza del campo
informazioni in Byte dello specifico blocco, il valore massimo per questo
parametro è quello specificato nell’ATR. Messaggi con lunghezza
superiore devono essere suddivisi in una catena di più blocchi.
INF : Campo informazioni. Contiene
i dati del blocco.
LRC : Longitudinal Redundancy Check.
Questo Byte contiene la semplice Xor dei Byte precedenti.
Struttrura del WTX Request
Nell’ATR era contenuto il Byte TB3 che specificava il
tempo di attesa di un blocco/carattere. Tale indicazione serve al dispositivo
lettore per capire quanto tempo attendere un generico blocco di risposta,
ossia per impostare un time out. Se la carta prevede un tempo di elaborazione
superiore può avvertire il lettore e richiedere un’attesa prolungata.
La struttura delle WTX Request e Response è indicata di seguito.
WTX request:
NAD | PCB=C3 | LEN=01 | INF | LRC |
Il Campo informazioni è composto da un solo Byte e contiene il numero di BTW (unita temporale di attesa blocco, circa 1 secondo). Le richieste non sono cumulative e all’arrivo di una nuova WTX il conteggio viene reimpostato al nuovo valore.
WTX response:
NAD | PCB=E3 | LEN=01 | INF | LRC |
Il WTX di risposta ha una struttura uguale a quello di
richiesta ed anche il Campo INF è lo stesso (serve a confermare
alla carta il buon esito della richiesta).
TORNA ALL'INDICE DEL CAPITOLO ATTUALE
(CAP 3 : COMUNICAZIONE ED ORGANIZZAZIONE DELLE INFORMAZIONI)
Il formato di tali APDU è standardizzato dalla
normativa ISO 7816-4 ed universalmente utilizzato. Esistono due tipi di
APDU, aventi diversa struttura: APDU di comando e APDU di risposta.
APDU di Comando
Sono composti da un Header (intestazione) di 4 Byte e da un Body (corpo) condizionale di lunghezza variabile.
Header (4 Byte)
Body
CLA - INS - P1 - P2
Lc - Data - Le
CLA | INS | P1 | P2 | Lc | DATA | Le |
C0 | 0A | hi | lo | 02 | length(2 Byte) | 02 |
Il primi due Byte identificano il tipo di comando, i successivi due sono parametri
CLA: rappresenta la classe del comando
INS: rappresenta l’istruzione di una data classe
P1: parametro 1 (in figura 9 hi rappresenta
il byte alto dell’indirizzo hi:lo)
P2: parametro 2 (in figura 9 lo rappresenta
il byte basso dell’indirizzo hi:lo)
Lc: rappresenta la lunghezza dei dati di comando
(2 Byte nell’esempio)
Data: sono i Byte dati del comando (lengh indica
il numero di Byte della memoria da testare)
Le: rappresenta la lunghezza dei dati in risposta
al comando
APDU di Risposta
Sono messaggi mandati su risposta ad un APDU di comando (solitamente da parte della carta) ed hanno la seguente struttura:
Data – SW1 – SW2
ODATA | SW1 | SW2 |
CRC(2 Byte) | 90 | 00 |
OData: dati effettivi di risposta
SW1: primo Byte di una parola di stato
SW2: secondo Byte di una parola di stato
Il valore associato a SW1 è solitamente il valore
90 e a SW2 il valore 00 (numerazione esadecimale), con significato di
comando effettuato con successo. In caso si fosse verificato un errore,
il valore di questi due Byte è modificato da parte del Sistema Operativo
della carta o (se presente) dall’interprete della macchina virtuale. Una
lista completa di valori è standardizzata e permette di riconoscere
il tipo di risposta attraverso il numero esadecimale contenuto in SW1 e
SW2. In particolare il valore di SW1 indica un insieme di eventi simili
(o lo stesso errore), ma derivanti da cause diverse. Alcuni valori di particolare
interesse sono indicati di seguito (con terminologia SW2=XX si indica l’esistenza
di differenziazioni associate a tale valore).
SW1= 62 e SW2= XX : Memoria non volatile (EEPROM) non cambiata
SW2=00 : nessuna informazione associata
SW2=81 : parte dei dati di risposta possono essere corrotti
SW2=82 : fine del file/record raggiunta prima prima di
leggere Le
SW2=83 : file selezionato invalido
SW1= 63 e SW2= XX : Memoria non volatile (EEPROM) cambiata
SW2=00 : nessuna informazione associata
SW2=81 : file pieno dopo l’ultima scrittura
SW2=CX : contatore fornito da X(da 0 a 15)
SW1= 65 e SW2= XX : Memoria non volatile (EEPROM) cambiata
SW2=00 : nessuna informazione associata
SW2=81 : errore di memoria
SW1=66 e SW2=XX : riservate per scopi relativi alla
sicurezza
SW1=67 e SW2=00 : lunghezza errata
SW1=68 e SW2=XX : funzione non supportata in CLA
SW2=00 : nessuna informazione associata
SW2=81 : nessun canale logico associato
SW2=82 : messaggi sicuri non supportati
SW1=69 e SW2=XX : comandi non permessi
SW2=00 : nessuna informazione associata
SW2=81 : comando incompatibile con la struttura del file
SW2=82 : stato di sicurezza non soddisfatto
SW2=83 : metodo di autenticazione bloccato
SW2=84 : dati referenziati non validi
SW2=85 : condizioni di uso non soddisfatte
SW2=86 : comando non permesso
SW2=87 : perdita dell’oggetto dati messaggio sicuro atteso
SW2=88 : oggetto dati messaggio sicuro errato
SW1=6A e SW2=XX : parametri P1 e P2 errati
SW2=00 : nessuna informazione associata
SW2=80 : parametri errati nel campo dati
SW2=81 : funzione non supportata
SW2=82 : file non trovato
SW2=83 : record non trovato
SW2=84 : insufficiente spazio di memoria nel file
SW2=85 : Lc inconsistente con la struttura dei TLV
SW2=86 : parametri P1 e P2 scorretti
SW2=87 : Lc inconsistente con P1 e P2
SW2=88 : dati referenziati non trovati
TORNA ALL'INDICE DEL CAPITOLO ATTUALE
(CAP 3 : COMUNICAZIONE ED ORGANIZZAZIONE DELLE INFORMAZIONI)
I dati della carta sono immagazzinati nella memoria EEPROM
in modo simile a quello adottato per il file system sull’Hard Disk di un
Personal Computer. Sono creati dei direttori che utilizzano un albero gerarchico
come struttura logica. Alla radice di tale albero è posto il Master
File (MF), che è obbligatorio. Dopo il Master file si trovano i
Dedicated File (DF), che rappresentano i direttori delle applicazioni,
e gli Elementary file (EF) contenenti i dati del possessore ed altre informazioni
(chiavi e password). Questa struttura è proposta dallo Standard
7816-4 e largamente utilizzato. I Dedicated file separano logicamente i
dati e permettono la definizione di diversi livelli di sicurezza dei dati
contenuti negli Elementary file. Una ulteriore separazione è fatta
sugli Elementary file che sono definiti Interni, se i dati contenuti servono
solo alla gestione e controllo della carta, ed Esterni, se accessibili
dall’esterno. In figura 11 è rappresentata una tipica struttura
di file system per Smart Card.
Metodo di accesso ai File
Lo standard ISO prevede l’accesso ai File attraverso almeno
una delle seguenti modalita.
I file di tipo Elementary (elementari) possono essere
di diverso tipo. La parte 7816-4 ne definisce quattro tipologie.
La figura 12 mostra le diverse tipologie di Elementary File.
Tipo Trasparente (Transparent)
Questo tipo di file è usato per immagazzinare informazioni in formato di dati binari e non possiede una struttura interna. Il limite teorico della lunghezza è di 64 Kbyte per processori ad 8-bit, ma tale valore supera le dimensioni della memoria EEPROM normalmente utilizzata. In realtà le dimensioni massime di tali file sono dell’ordine della decina o centinaia di byte per evitare lunghi tempi di lettura e scrittura. Le istruzioni usate per accedere a questo tipo di file sono READ_BINARY, UPDATE_BINARY, WRITE_BINARY. L’accesso ai dati avviene attraverso un offset relativo all’inizio del file (start of file). Un’applicazione è mostrata di seguito, dove il file EF_Employee contiene un campo d’identificazione, il nome ed il cognome di un impiegato. La dimensione dei campi è fissata dal programmatore e permette di accedere ai dati utilizzando un offset specifico.
EF_Employee:elementary file
Numero personale (10 Byte) | Cognome (30 Byte) | Nome |
Questo tipo di file è usato principalmente per
contenere dati quali: nome del possessore, numero personale, qualifica,
chiavi e password, ecc. Può essere usato anche per contenere estensioni
del Sistema Operativo e codice eseguibile (definito come ASC, Application
Specific Commands).
Linear fixed
Questo tipo di file è composto da record a dimensioni
fisse (uguali per tutti i record). Ogni record e` formato da una sequenza
di Byte e la dimensione massima è di 254 Byte. La sequenza di tali
record comincia con il record numero 1 e può arrivare al record
numero 254 (numero massimo di record); l’indirizzo 255 è riservato
a scopi non definiti. L’accesso al record avviene attraverso diversi parametri
come FIRST, LAST, NEXT, o numero del record. Le istruzioni utilizzate sono
READ_RECORD, WRITE_RECORD, UPDATE_RECORD. Questo tipo di file è
tipicamente usato per immagazzinare dati quali: lista delle chiavi delle
applicazioni, log per transazioni finanziarie, operazioni ripetute con
necessità di memoria ben definita.
Linear Variable
Questo tipo di file ha struttura simile a quello visto
precedentemente, ma permette di risparmiare spazio di memoria nel caso
ci siano record con lunghezze non uguali tra loro. Le istruzioni ed il
metodo d’accesso resto lo stesso del tipo precedente. Un Byte è
aggiunto per specificare la lunghezza del record, mentre i limiti sul numero
e dimensione dei record resta fissato a 254. Un tipico utilizzo di questi
file è come lista di applicazioni autorizzate o lista di numeri
telefonici.
Cyclic Fixed
Questo tipo di file ha struttura simile al Linear Fixed
poiché i record hanno dimensione fissa. Un puntatore viene incrementato
automaticamente e indirizza il record successivo all’ultimo scritto. Una
volta raggiunto il numero massimo di record disponibile nel file il puntatore
è resettato al valore iniziale (primo record). L’accesso ai dati
risulta modificato perché si assume valore 1 per il record correntemente
indirizzato dal puntatore; un offset permette di indirizzare tutti gli
altri record. Le istruzioni di lettura/scrittura/aggiornamento sono le
stesse dei tipi precedenti. Un utilizzo tipico è come lista di servizi
accessi ultimamente o numeri telefonici chiamati.
Profili per Smart Card
La ISO 7816-4 definisce un set di profili, denominati
con lettere Profile A, profile B, ecc, che specificano una struttura dati
(tipo di file e dimensioni) ed un insieme di istruzioni per tipologie di
applicazioni. Tali indicazioni erano seguite nei primi sviluppi per ovviare
a carenza di memoria e facilitare una standardizzazione delle applicazioni.
I miglioramenti tecnologici e l’introduzione di programmazione mediante
linguaggi astratti ha portato all’abbandono di tali profili e all’introduzione
di carte con piene funzionalità (intero set di istruzioni e file
disponibile).
Struttura dei dati (TLV)
I dati sono immagazzinati nei file utilizzando il formato richiesto dalle applicazioni. Una struttura statica può causare problemi di aggiornamento poiché un determinato campo potrebbe richiedere una lunghezza differente da quella definita. Una soluzione consiste nell’usare un’intestazione (header o Tag) che descrive la lunghezza dei dati ed il loro contenuto. Le BER (Basic Encoding Rules) dello standard denominato ASN.1 (Abstract Syntax Notation) sono utilizzate per creare una struttura dati chiamata TLV (Tag Length Value). Di seguito è mostrato un esempio di incapsulamento di dati in strutture TLV con diverse dimensioni.
La strutturazione con TLV e` utilizzabile con tutti i
tipi di file visti sopra e l’accesso ai dati avviene attraverso il Tag
e la lunghezza dei dati. Un esempio è dato nelle specificazioni
EMV per pagamenti e mostrato di seguito.
Tag | Length | Value |
9F01 | 6 | Identificatore acquirente (6 Byte) |
9F42 | 2 | Applicazione corrente codice (2 Byte) |
In Value (valore) sono contenuti l’identificatore dell’acquirente
ed il codice dell’applicazione corrente.
Sicurezza del File System
La sicurezza è una delle considerazioni più
importati nello sviluppo di soluzioni basate su Smart Card. Per questo
motivo la modalità di accesso ai dati deve essere trattata con attenzione.
I file possono essere protetti con attributi e condizioni d’accesso. Un
esempio, un file può avere attributo READ (sola lettura) e condizione
di verifica del possessore; questo implica che la lettura del file richiederà
l’inserimento corretto di una password. Lo standard ISO 7816-4 definisce
diversi tipi di meccanismo di sicurezza.
Domini di sicurezza
Poiché le Smart Card contengono applicazioni provenienti da diversi fornitori, è richiesta una metodologia per garantire un Fire-walling (separazione sicura) tra tali applicazioni. Questo è fatto immagazzinando un set di chiavi, uniche per ogni fornitore, che delimitano aree di controllo (definite Security Domain). Un dominio è composto da un gruppo di Elementary e Dedicated File come mostrato in figura 13.
Nella figura sopra ci sono due domini di sicurezza e due
chiavi (KEY 1 e KEY2), contenute in file. EF KEY1 è il file che
contiene la prima chiave che accede agli Elementary File EF1 ed EF2, mentre
la seconda chiave (contenuta in EF KEY2) accede a EF3 ed EF4. I file DF
(Dedicated File) non contengono dati riservati, ma svolgono la funzione
di direttori. Si sono ottenuti due domini (A e B) logicamente separati
tra loro.
TORNA ALL'INDICE DEL CAPITOLO ATTUALE (CAP 3 : COMUNICAZIONE ED ORGANIZZAZIONE DELLE INFORMAZIONI)