TORNA ALL'INDICE GENERALE DELLE SMART CARD

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

3.2 Struttura degli APDU

APDU di Comando
APDU di Risposta

3.3 File System

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.
 

I successivi Byte identificano la soluzione specifica implementata sulla carta, per esempio possono contenere il nome della azienda che utilizza (distribuisce) la carta. Un certo numero di Byte può essere lasciato a contenuto nullo, per raggiungere il numero totale di 15 Byte.
 
 

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)
 
 
 
 

3.2 Struttura degli APDU

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)
 
 
 
 

3.3 File System

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.
 

Struttura degli Elementary File

I file di tipo Elementary (elementari) possono essere di diverso tipo. La parte 7816-4 ne definisce quattro tipologie.
 

                    -     Linear Fixed
                    -     Linear Variable
                    -     Cyclic Fixed

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.
 
 
 

Tutti i Sistemi Operativi per Smart Card possiedono queste specifiche e le implementano utilizzando una combinazione di attributi e condizioni. Il meccanismo è adottato a livello dei file (MF, DF, EF), cosi che solo il possessore della carta o le applicazioni registrate possano accedere ai dati. Alcune funzionalità sulla sicurezza dei file saranno discusse nel prossimo capitolo.
 
 

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)

VAI AL CAPITOLO 4 : SISTEMI OPERATIVI PER SMART CARD

TORNA ALL'INDICE GENERALE DELLE SMART CARD