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.