Elementi ISO 7816-3/4
Protocolli di comunicazione
Attualmente ci sono due tipi di protocolli di comunicazione possibili:
- T=0 protocollo asincrono orientato half-duplex alla trasmissione
dei singoli caratteri (byte)
- T=1 protocollo asincrono half-duplex orientato alla trasmissione di
blocchi di dati
La card e il lettore comunicano in base ad un paradigma del tipo comando-risposta:
l’IFD invia un comando alla card, includendo eventuali dati che
la card dovrà processare per eseguire il comando, la card esegue
il comando e rimanda indietro il risultato della computazione all’IFD.
La strutture dati scambiate tra lettore e card sono dette TPDU (Transmission
Protocol Data Unit): quelle relative a T=0 sono molto differenti di quelle
relative a T=1. Chiaramente la card e il lettore devono accordarsi su
un protocollo comune: il modo in cui ciò avviene tramite un meccanismo
chiamato PTS (Protocol Type Selection). Tale metodo consiste in un comando
speciale che il lettore invia alla card dopo aver ricevuto la stringa
ATR. Per mantenere la compatibilità con dispositivi che supportano
solo il protocollo T=0 è stato introdotto un meccanismo che dà
alla card la possibilità di operare in due modalità:
- Negoziabile: il protocollo di default della card può essere
cambiato dal lettore tramite il meccanismo PTS
- Specifico: il protocollo della card non può essere cambiato
dal meccanismo PTS
Il protocollo T=0 - E’ un protocollo di trasmissione
half duplex asincrono orientato ai byte. Dal punto di vista del modello
OSI, tende a mischiare elementi dello strato “applicazione”
con elementi dello strato DLC. T=0 possiede un meccanismo, primitivo,
di rilevazione degli errori basato sul controllo di parità.
Il protocollo T=1 - E’ un protocollo di trasmissione
half duplex asincrono orientato ai blocchi. Dal punto di vista del modello
OSI, questo protocollo opera allo strato DLC. Ciò che questo protocollo
fa è di mettere un involucro intorno ad un blocco di caratteri
che permette:
- Il controllo di flusso
- Streaming dei blocchi (block chaining)
- Correzione degli errori
Vantaggi e svantaggi di T=1 rispetto a T=0 - La scelta
del protocollo di comunicazione deve tenere conto dei vantaggi forniti
dal protocollo a blocchi, rispetto a quello a byte, e il prezzo che questi
vantaggi comportano.
Il vantaggio più ovvio del protocollo T=1 è la capacità
di gestire il flusso di dati in entrambe le direzioni. Un ulteriore vantaggio
di T=1 è la capacità di frammentazione di blocchi, in virtù
del quale è possibile scambiare un blocco di dati arbitrariamente
lungo trasmettendolo in una sequenza ordinata di frames consecutivi.
Inoltre il protocollo a blocchi permette di superare la limitazione,
tipica di T=0, della politica master/slave per la quale è sempre
il lettore che produce un comando cui la card risponde. Per T=1, infatti,
il comando può essere prodotto sia dalla card che dal lettore.
T=1 ha anche un meccanismo di rilevazione degli errori molto sofisticato
basato sull’uso di un blocco detto Error Detection Code (EDC), e
la correlata capacità di ritrasmettere blocchi soggetti ad errore.
Chiaramente tutti questi vantaggi hanno un prezzo. E’ necessario,
infatti, un software di gestione, sia lato lettore che lato carta, molto
complesso a differenza di quello necessario a gestire T=0.
APDU
Una volta che card e lettore si sono accordati sul protocollo di comunicazione
da utilizzare, questo è usato per supportare i protocolli a livello
applicazione fra applicazioni software sulla card e applicazioni software
lato host. Tali applicazioni si scambiano informazioni attraverso strutture
dati chiamate APDU (Application Protocol Data Unit). Le APDU, a loro volta,
sono incapsulate all’interno delle TPDU le quali le trasportano
fisicamente.

Figura 1 - architettura di comunicazione
L’APDU costituisce la struttura dati usata per incapsulare i comandi
dal lettore verso la card (command APDU) e i messaggi di response dalla
card verso il lettore (response APDU).
Le APDU, a loro volta, viaggiano incapsulate all’interno delle TPDU.
Command APDU
Una APDU di comando si compone di un’intestazione obbligatoria
e di un body facoltativo, ciascuno dei quali è suddiviso in ulteriori
campi.
I campi dell’intestazione hanno la dimensione di un byte e sono
:
- CLA (class): definisce la classe dell’APDU. E’
un byte nel quale:
- I due bit meno significativi indicano il canale logico utilizzato
per la comunicazione tra lettore e card
- I due bit più significativi indicano il tipo di messaggio
sicuro che deve essere utilizzato durante le trasmissione
- INS (instruction): definisce la specifica istruzione appartenente
alla classe CLA da eseguire
- P1 (parameter 1): forniscono ulteriori informazioni (se richieste)
alla istruzione INS da eseguire.
- P2 (parameter 2): Se tali informazioni non sono richieste,
il loro valore è 00

Figura 2 - formato di una command APDU
Il body è una componente a lunghezza variabile utilizzata per
comunicare ulteriori informazioni al processore delle APDU sulla card
come parte di un comando. I campi del body hanno la dimensione di un byte
tranne il campo dati che invece ha dimensione variabile. Essi sono:
- Lc (lenght of data field of the command apdu): specifica
il numero di bytes da trasferire alla card come parte di un istruzione.
Contiene la taglia del campo Dati.
- Dati: contiene i dati veri e propri che devono, eventualmente, essere
comunicati alla card per permettere la corretta esecuzione dell’istruzione
contenuta nell’APDU
- Le (length of expected data): specifica il numero di bytes
che la card dovrà rimandare indietro al lettore nell’APDU
di response, come risultato dell’elaborazione
Response APDU
Una APDU di risposta è inviata dalla card verso il lettore in
risposta ad una richiesta di elaborazione.
Si compone di un body e di un trailer.
Il body può essere vuoto o includere un campo dati (dipende a quale
comando si sta rispondendo e se esso è andato o meno a buon fine)
.
Il trailer è formato da due campi di un byte che contengono uno
status-code prodotto:

Figura 3 - formato di una response APDU
|
- SW1 (status word 1): specifica una categoria di stati
nei quali si può trovare la card dopo aver processato l'ultima
istruzione
- SW2 (stauts word 2): contiene un codice che specifica
nel dettaglio la categoria indicata da SW1
|
Nello schema riportato in fig.4 è mostrato lo schema strutturale
dei valori definiti da SW1 e SW2.

Figura 4 - codici di errore di una response APDU
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.
Negli stati "Warning" e "Errore di esecuzione" la
differenza tra figlio sinistro e destro è che nel primo, al contrario
del secondo, la carta non ha modificato lo stato della memoria. Nello
stato "Checking error" sono inclusi tutti gli errori dal codice
'6700' a '6FFF'.
Struttura del File System
La caratteristica centrale dell'ISO7816-4 è il file system. Esso
è conservato in una memoria non volatile della card (generalmente
una EEPROM) ed è, essenzialmente, una semplice struttura gerarchica
a singola radice che supporta due categorie di files:
- Dedicated Files (DF) : sono le directory e possono avere come discendenti
sia altri DF che uno o più EF
- Elementay Files (EF) : sono le foglie della gerarchia
Ciascun file di tale gerarchia è identificato tramite un selettore
a due bytes. La struttura che definisce l’organizzazione logica
dei dati è un albero i cui nodi sono DF ed EF e le cui caratteristiche
sono:
- Una DF come radice della gerarchia: questo particolare file è
detto Master File (MF), ed è identificato con 3f00. Tale file
è obbligatorio e contiene le informazioni sulla memoria allocabile.
- Nodi opzionali costituiti da altre DF ciascuna delle quali può
contenere uno o più EF
Figura 5 - File system iso7816-4
Queste note costituiscono semplicemente un’introduzione
assolutamente non esaustiva delle caratteristiche e delle funzionalità
definite dall’ISO. Per una trattazione più dettagliata
si rimanda alla lettura della specifica. |
|