smartcard

Transcript

smartcard
MODUGNO-impaginato
29-04-2004
12:03
Pagina 26
TUTORIAL
SMARTCARD:
UN’INTRODUZIONE TEORICA
di Giuseppe Modugno
[email protected]
Questo primo articolo approfondisce gli aspetti teorici che sono alla base delle
smartcard, ampiamente diffuse ed utilizzate da tutti (al Bancomat, nel cellulare,
al lavoro, ecc.). Nel corso delle altre puntate, analizzeremo in dettaglio gli aspetti
tecnici delle smartcard a memoria e delle smartcard a microprocessore, realizzeremo
un lettore universale di smartcard e lo utilizzeremo in due interessanti applicazioni
(gestione crediti e gestiore rubrica/SMS delle SIM).
FACCIAMO UNA PARTITA A
CARTE?
Uno sguardo superficiale alle tessere in nostro possesso
Oggigiorno è difficile trovare una
sola persona che non abbia, nel suo
portafogli o in tasca, una carta (o,
Figura 1:
per dirla all'inglese, una card). Non
si sta ovviamente parlando di assi o
picche ma di tessere plastificate
della dimensione di una carta di credito, utilizzate un po' dappertutto:
controllo presenze dei dipendenti,
bancomat, carte di credito, raccolta
In questa foto si possono osservare vari tipi di carte, comunemente usate e che riempiono
il mio portafogli
26 TUTORIAL
punti del supermercato sotto casa,
crediti per l'ingresso in palestra,
patente, SIM per il cellulare, carta
d’identità, carta della salute.
Ovviamente questi sono solo alcuni
esempi… l'elenco potrebbe essere
molto più lungo.
Per iniziare a conoscere questi piccoli ma utilissimi oggetti, apriamo il
nostro portafogli e distribuiamo le
carte su un tavolo. Così ho fatto io
ed il risultato è mostrato nella foto
in figura 1.
Se ad una prima vista possono sembrarci tutte uguali, a parte qualche
differenza di dimensione per le SIM
dei cellulari, in realtà un’analisi più
accurata ci può svelare molte diversità. Nel corso di questi articoli
impareremo a conoscerle nel dettaglio e ad utilizzarle a nostro piacimento.
Per prima cosa, però, cerchiamo di
fare un po’ d’ordine…
DIVIDIAMO LE ROSSE
DALLE NERE
Le tessere magnetiche
Se raccogliamo tutte le carte in
MODUGNO-impaginato
29-04-2004
12:03
Pagina 27
TUTORIAL
nostro possesso, possiamo fare una
prima classificazione in due grandi
gruppi: carte a banda magnetica e
smartcard.
Le carte a banda magnetica sono
quelle contraddistinte da una banda
nerastra sul retro, di circa 1 cm di
altezza. Per esempio, la maggior
parte delle tessere per il controllo
presenze sono di tipo magnetico,
così come le tessere utilizzate nelle
prime cabine telefoniche pubbliche
di Telecom Italia, la maggior parte
dei bancomat e delle carte di credito
circolanti in Italia. Nella foto in figura
2 è mostrata una scheda per il rilevamento presenza in un’azienda privata.
Figura 2: Foto di una carta a banda magnetica
utilizzata per il controllo presenze
Al di sotto della banda nerastra,
coperto da uno strato protettivo, è
presente del materiale magnetico
che può essere utilizzato per memorizzare alcuni dati numerici, dell’ordine delle decine di byte. Per esempio, è possibile memorizzare un
numero seriale che individua una
carta (e quindi l’utente) univocamente nel nostro gruppo, un credito in denaro o in punti, ecc. I dati
memorizzati possono essere letti da
un apposito dispositivo dotato
generalmente di una fessura, all’interno della quale l’utente fa scorrere
(striscia) la carta, facendo in modo
che la parte magnetica passi vicino
ad una testina di lettura. È lo stesso
principio delle vecchie musicassette,
con l’unica differenza che, per queste ultime, il nastro magnetico viene
trascinato automaticamente da un
motorino, mentre nel caso delle
carte è l’utente che deve effettuare il
movimento. Quanti di voi compio-
no l’azione di “strisciare”, ogni mattina entrando nell’ambiente di lavoro, per comunicare l’ora d’arrivo? In
alcuni casi, come nelle vecchie cabine telefoniche o nei moderni bancomat, la tessera viene solo leggermente inserita in una fessura ed
automaticamente
“risucchiata”,
quindi letta, dalla circuiteria interna,
senza che l’utente faccia alcun
movimento meccanico.
Questa tecnologia è stata la prima a
comparire sul mercato commerciale
ed è attualmente molto economica,
anche se presenta numerosi punti
deboli. Per esempio, la bassa capacità di memoria e la smagnetizzazione
dovuta a campi elettromagnetici
esterni.
Le smartcard
Proprio per far fronte a questi problemi, è nata una nuova tecnologia
di carte, definite smartcard. In realtà, il termine smartcard è molto
generico e di difficile traduzione
diretta in italiano. Potrebbe essere
tradotto, abbastanza liberamente,
come "carta intelligente".
Oltre alla parola smartcard, possono
essere usati altri termini, come:
chipcard, IC-card, memory card,
carte a microprocessore, ecc. Alcuni
di questi termini indicano dei tipi di
smartcard ben precisi, ma spesso
vengono usati, erroneamente, per
indicare generalmente tutte le
smartcard. Nel seguito dell’articolo
cercheremo di fare chiarezza sui vari
termini.
Anziché essere dispositivi magnetici, le smartcard sono dispositivi
elettronici e si distinguono facilmente dalla presenza di 6-8 contatti elettrici ravvicinati a forma rettangolare sul lato superiore (naturalmente, è assente la banda magnetica sul retro, anche se sono previste
carte ibride). In figura 3 è mostrata
una nuova scheda telefonica, una
smartcard appunto.
Spesso vengono chiamate IC-card
Figura 3: Una smartcard: scheda telefonica
utilizzata da Telecom Italia
poiché integrano all'interno della
plastica (spesso PVC) dei veri e propri circuiti integrati, come le memorie (RAM, ROM, EPROM, EEPROM,
FLASH), porte logiche, microprocessori general-purpose (PIC, Atmel) o
specifici (ST, Atmel).
A differenza delle carte a banda
magnetica, le smartcard:
• Essendo elettroniche non vanno
incontro al fenomeno della smagnetizzazione.
• Possono memorizzare un maggior
numero di informazioni.
• Essendo elettroniche possono
interfacciarsi più facilmente con
gli attuali apparecchi che ne fanno
uso (telefoni cellulari, set-top-box,
cabine telefoniche, ecc.).
• Presentano delle protezioni contro
la lettura/scrittura non voluta (per
esempio, mediante l'utilizzo di
PIN).
• Possono implementare degli algoritmi, più o meno complessi, al
loro interno (per esempio, crittografia per rendere più sicure le
transazioni).
• Possono essere multiapplicazione,
cioè una singola carta può essere
usata contemporaneamente in più
contesti (per esempio, per registrarsi alla rete cellulare del proprio provider ed effettuare delle
transazioni commerciali in tutta
sicurezza).
A fronte di questi vantaggi, l'unico
svantaggio che attualmente ha
senso considerare è probabilmente
il maggior costo (delle carte e dei
TUTORIAL
27
MODUGNO-impaginato
29-04-2004
12:03
Pagina 28
TUTORIAL
lettori) dovuto alla tecnologia più
evoluta, anche se è già alla portata
di tutti (hobbisti e professionisti).
DIVIDIAMO I CUORI DAI QUADRI
Tipologie di smartcard: una prima
classificazione
Una prima classificazione che si può
operare sulle smartcard è tra le carte
a contatto (contact-card) e carte
senza contatto (contactless-card). Le
prime vanno inserite all'interno di un
apposito dispositivo (chiamato comunemente lettore) che comunica con
esse mediante contatto elettrico dei
pin che si trovano sulla smartcard.
Le contactless-card, invece, hanno
un'antenna integrata che permette,
quando viene avvicinata ad una
certa distanza dal dispositivo di lettura, sia l'alimentazione dei circuiti
integrati interni, sia la comunicazione wireless dei dati. Queste tipologie di carte si differenziano a seconda della distanza massima dal lettore alla quale devono trovarsi per un
corretto funzionamento (pochi centimetri o alcuni metri).
Naturalmente, le contact-card
vanno incontro ad una maggiore
usura soprattutto se devono essere
inserite/disinserite molte volte all'interno di un lettore. Inoltre sono più
scomode da usare poiché l'utente
deve necessariamente impiegare del
tempo per inserire e disinserire la
carta dal dispositivo, cosa che non
avviene con le contactless-card.
Avete idea della differenza tra
Viacard e Telepass per il pagamento
del pedaggio autostradale?
In commercio sono di gran lunga
più diffuse le smartcard a contatto,
soprattutto perché più economiche,
anche se è possibile trovare soluzioni contactless e addirittura ibride.
Nel futuro, comunque, si prevede
un aumento delle carte contactless.
Tipologie di smartcard: una
seconda classificazione
Oltre a raggruppare le smartcard a
28 TUTORIAL
contatto e quelle senza contatto, è
possibile dividerle in smartcard a
memoria e smartcard a microprocessore, in funzione dei circuiti integrati presenti all’interno.
Le smartcard a memoria contengono internamente delle semplici
memorie a cui si può accedere in
lettura/scrittura mediante i contatti
presenti sulla carta. Per esempio, è
possibile integrare in una smartcard
una memoria seriale I2C, come le
diffusissime 24LCxx della Microchip.
In questo caso, i pin della smartcard
rappresentano le alimentazioni della
memoria (Vcc e GND) e le linee di
comunicazione del bus I2C (DATA e
CLOCK). In altre parole, il chip, anziché essere integrato nei classici package dual-in-line o SMD, viene integrato in una carta plastificata.
Queste smartcard, in cui è possibile
accedere al contenuto senza protezione, sono chiamate a memoria
libera (free memory card). Se una
tessera di questo tipo viene rubata o
persa, può essere usata senza difficoltà da un'altra persona, anche non
autorizzata. C’è da dire, comunque,
che questo tipo di carte sono poco
diffuse.
Molto più diffuse sono le smartcard
a memoria protetta che integrano
non solo una zona di memoria
(generalmente EEPROM) ma anche
della logica aggiuntiva che permette la protezione del contenuto agli
utenti non accreditati.
Normalmente lo scopo viene raggiunto memorizzando all'interno
della carta, in una zona di memoria diversa da quella utilizzata per i
dati, un PIN non leggibile dall'esterno. Per poter leggere e/o scrivere il contenuto della memoria
dati sarà necessario presentare correttamente il PIN alla carta che,
solo dopo averlo confrontato con
quello memorizzato al suo interno,
permette il libero accesso al contenuto della memoria.
Infine, esistono le smartcard a
microprocessore, dette anche chipcard o IC-card. Sono dei sistemi
elettronici integrati nella tessera
plastificata e possono essere anche
molto complessi. Normalmente
all'interno si trova una zona di
memoria non volatile per la memorizzazione dei dati anche a carta
scollegata (EEPROM e/o Flash), una
memoria volatile per l'elaborazione
dei dati durante l'uso (RAM), un
microprocessore più o meno complesso che gestisce sia il protocollo
di comunicazione con l'esterno, sia
l'elaborazione dei dati (si possono
trovare degli economici PIC della
Microchip oppure dei microprocessori dedicati più complessi prodotti, per esempio, da Atmel e ST).
La presenza di una piccola (ma
anche grande) capacità di elaborazione assicura un livello di sicurezza impossibile da raggiungere con
le normali smartcard a memoria.
Spesso vengono implementati
degli algoritmi di crittografia complessi, che aumentano il grado di
sicurezza di transazioni commerciali, permettendo al sistema di
riconoscere un determinato utente
con un alto grado di affidabilità.
Infatti, la clonazione di questo tipo
di carte è molto complicata (anche
se non impossibile, come dimostrano la pirateria satellitare e i
recenti tentativi di clonazione delle
SIM GSM).
Esternamente le smartcard a
memoria e le smartcard a microprocessore sono identiche sia in
termini di dimensioni che in termini di contatti elettrici. Solo un’attenta analisi del comportamento
elettrico della scheda (protocollo
di trasmissione usato e dati effettivamente scambiati) può rivelarci la
natura della carta.
A CHE GIOCO GIOCHIAMO?
Le applicazioni delle smartcard
Col tempo le smartcard hanno invaso il tradizionale campo delle bande
MODUGNO-impaginato
29-04-2004
12:03
Pagina 29
TUTORIAL
magnetiche e si stanno diffondendo
in numerose altre applicazioni,
prima impensabili.
Per quanto riguarda le smartcard a
memoria, esse sono molto usate
nelle raccolte punti dei supermercati
o distributori di benzina. Per esempio, le tessere utilizzate dalla AGIP
appartengono a questa categoria di
smartcard. Tali carte vengono anche
usate da strutture che prevedono
l’accesso della clientela a certi servizi.
Per esempio, può essere usata per
l’ingresso nelle palestre e per l’utilizzo delle docce a pagamento in un
campeggio. Ad ogni ingresso l’utente inserisce la carta nell'apposito dispositivo ed il numero di ingressi (o
crediti) memorizzato viene decrementato, magari aprendo automaticamente l'accesso agli spogliatoi o
abilitando l’erogazione dell’acqua.
Anche le ultime schede telefoniche
per le cabine pubbliche appartengono a questa categoria di smartcard.
In alcuni casi possono essere usate
per il controllo accessi: in ogni carta
viene memorizzato un codice identificativo dell’utente che, inserendola
nel dispositivo di lettura, magari
digitando l’opportuno codice segreto (PIN), comunica il proprio accesso
al sistema.
Molto usate sono anche le carte a
microprocessore che hanno subito
nel corso degli anni una notevole
diminuzione di costo. La maggiore
applicazione per queste carte (la
cosiddetta killer application) è sicuramente la telefonia cellulare GSM.
Tutti noi sappiamo, infatti, che il
sistema GSM prevede l’utilizzo di
una scheda SIM (Subscriber Identity
Module) personale, da inserire nel
telefonino, che si preoccupa di
autenticarci alla rete (comunica al
provider chi siamo, dal quale si può
risalire al contratto e all’eventuale
credito residuo) e quindi abilita l’accesso ai servizi di telefonia mobile a
cui abbiamo diritto. Le SIM sono
schede molto diffuse (sicuramente
più di un lettore sarà in possesso di
diverse schede SIM, qualcuna ormai
non più usata, altre usate addirittura
contemporaneamente) ma non tutti
sanno che sono delle smartcard a
microprocessore. Una grande differenza con le smartcard a cui siamo
abituati a pensare è la dimensione.
Infatti una scheda SIM ormai viene
distribuita in un formato più piccolo, che permette di ingombrare
molto poco all’interno del telefonino, un oggetto che tende sempre
più alla miniaturizzazione. In figura
4 è mostrata una SIM del provider
Wind.
Figura 4: Una scheda SIM altro non è che una
smartcard a microprocessore
Il formato piccolo delle SIM è relativamente recente, poiché i primi
telefonini (chi non si ricorda il
Motorola 8700?) avevano l’alloggio
per schede della normale dimensioni di una carta di credito. Solo con la
necessità di miniaturizzare il telefonino, sono comparse sul mercato
SIM del formato ridotto. Cosa succede se qualcuno ha la necessità di
utilizzare una “SIM ridotta" in un
telefonino di vecchio tipo? Esistono
in commercio degli adattatori che
servono proprio allo scopo (sono
molto utili se volete utilizzare la
vostra SIM nel lettore universale di
smartcard che costruiremo in uno
degli articoli successivi).
L'altra applicazione tipica delle
smartcard a microprocessore è la TV
digitale. Oggi è possibile usufruire
solo della TV digitale satellitare
(DVB-S) ma nell'immediato futuro
non è escluso di poter utilizzare
delle smartcard per il digitale terrestre (DVB-T). Come per il GSM, tali
carte vengono usate dal provider
per accertare che l'utente sia effettivamente un suo cliente e abbia i
diritti per la visione dei canali su cui
si sintonizza (in parole povere, abbia
pagato).
Le applicazioni del futuro (non
tanto lontano!)
Nell'immediato futuro, le smartcard
a microprocessore potranno essere
utilizzate anche per firmare elettronicamente documenti ufficiali e validi a tutti gli effetti di legge, alla stessa stregua dei documenti manoscritti. In questo settore l'Italia è particolarmente attiva ed ha già iniziato le
sperimentazioni
sulla
Carta
d'Identità Elettronica e sulla Carta
Nazionale dei Servizi. Questo sistema di sottoscrizione prende il nome
di firma digitale. Attraverso la firma
digitale sarà possibile firmare elettronicamente un documento pubblico garantendo la veridicità (documento non alterato), l’autenticità
dell’autore, la non ripudiabilità (l’autore non può sostenere di non aver
scritto il documento in futuro), la
confidenzialità (nessuno, fuorché il
destinatario, potrà leggere quel
documento).
Potete ben capire come queste carte
siano molto importanti e delicate e
devono garantire una certa sicurezza. Per questo sono dotate di un PIN
segreto, noto solo al legittimo titolare della carta, che deve essere ogni
volta inserito per accedere al servizio
della firma digitale.
Ma vi fidereste di sottoscrivere un
atto pubblico con una smartcard?
La coppia carta/PIN garantisce un
certo grado di sicurezza sull'autenticità dell'individuo, ma questa non è
assoluta. La carta può essere rubata
o persa ed il PIN può essere ritrovato (per esempio, scritto su un
foglietto all'interno del portafogli
oppure memorizzato all'interno
della rubrica del nostro cellulare,
oppure semplicemente scritto dietro
TUTORIAL
29
MODUGNO-impaginato
29-04-2004
12:03
Pagina 30
TUTORIAL
la carta) o rubato anch'esso (attraverso spycam o POS/ATM fraudolentemente modificati). È per questo che attualmente la coppia
carta/PIN non è più sintomo di elevata sicurezza e si sta sperimentando la possibilità di memorizzare,
all'interno della carta, caratteristiche
biometriche dell'individuo (impron-
te digitali, scansione della retina o
dell'iride, voce, volto). In questo
modo sarà possibile aumentare il
grado di sicurezza sull’autenticità
dell’individuo poiché i dati biometrici appartengono al nostro corpo e
non possono essere clonati così
facilmente (oggi, almeno, ciò non è
possibile… un domani chissà).
Parte 1
Caratteristiche fisiche (dimensioni, resistenza meccanica, radiazioni elettromagnetiche, ecc.)
Parte 2
Numero, posizione e dimensione dei contatti elettrici e relativo
significato.
Parte 3
Tensioni e correnti massime per ciascun contatto. Descrizione
del protocollo asincrono di comunicazione.
Parte 4
Comandi standard per la gestione dei dati (lettura e scrittura) in
tutta sicurezza.
Parte 8
Aggiunge sistemi di crittografia (a chiave simmetrica ed asimmetrica) ai comandi definiti nella Parte 4.
Parte 10
Definisce il protocollo di comunicazione per le smartcard sincrone.
Tabella 1: Elenco degli standard più importanti facenti capo all’ISO7816.
Numero Nome Direzione Descrizione
C1
VCC
I
Alimentazione della smartcard, normalmente
a 5V, anche se sono previste alimentazioni a
tensioni inferiori (3V o meno).
C2
RST
I
Linea di reset utilizzata dal dispositivo di
lettura per inizializzare la scheda, prima di un
qualsiasi trasferimento di dati.
I
Linea utilizzata per fornire il clock ai circuiti
sequenziali integrati nella smartcard (carte
asincrone), oppure per lo scambio dei dati
(carte sincrone).
C3
CLK
C4
RFU
C5
GND
Riservata per usi futuri.
I
Massa.
C6
VPP
I
Tensione di programmazione, eventualmente
utilizzata per la programmazione (cancellazione/scrittura) della memoria non volatile
integrata nella smartcard (EEPROM, Flash).
C7
I/O
I/O
Linea bidirezionale utilizzata per lo scambio
dei dati tra smartcard e dispositivo di lettura.
C8
RFU
Tabella 2:
Riservata per usi futuri.
Descrizione di tutti i contatti eventualmente presenti su una smartcard. Il numero è relativo alla
figura 5, mentre la direzione (I=Input, O=Output, I/O=Input/Output) è relativa alla carta
30 TUTORIAL
Un'altra applicazione molto interessante, che sicuramente utilizzeremo
spesso in un prossimo futuro, è la
Carta della Salute (health card). In
questa smartcard saranno memorizzati tutti i nostri dati anagrafici insieme alla nostra storia da un punto di
vista medicale. Per esempio è possibile memorizzare il gruppo sanguigno, allergie, malattie o disturbi
gravi, interventi, cura farmaceutica
abituale, ecc. A cosa può servire
tutto ciò?
Immaginate di aver bisogno di cure
mediche immediate, per esempio in
un pronto soccorso. Supponete di
essere soli o, magari, in viaggio in
un paese straniero in cui non conoscete bene la lingua o impossibilitati a parlare (per esempio, perché
svenuti). Avendo a disposizione la
vostra Carta della Salute, il medico
potrà avere un quadro dettagliato
sulla vostra condizione fisica e potrà
intervenire in modo tempestivo con
cure efficaci. Naturalmente i dati
memorizzati sulla card non saranno
consultabili da tutti, ma solo da enti
e personale autorizzato, magari a
più livelli di accessibilità. Ecco che
una futura Carta della Salute dovrà
necessariamente ricorrere a tecnologie sofisticate di protezione dei dati
e autenticazione dell'utente, e forse
sono questi gli ostacoli più difficili
da superare. Infatti, la più veloce
accessibilità di una grande quantità
di dati strettamente personale è in
netta contraddizione con i diritti alla
nostra privacy.
QUALI SONO LE REGOLE DEL
GIOCO?
Gli standard
Dalla discussione precedente avrete
sicuramente capito come il mondo
delle smartcard sia molto diversificato e in continua evoluzione. Per evitare la nascita di sistemi completamente diversi e non interoperabili,
sono stati pubblicati degli standard
di riferimento dai maggiori organi-
MODUGNO-impaginato
29-04-2004
12:03
Pagina 31
TUTORIAL
Figura 5: Rappresentazione della “geometria” di una smartcard secondo lo standard di riferimento ISO7816
(vista lato contatti)
smi internazionali per la standardizzazione. Il maggiore standard di riferimento è sicuramente l’ISO7816,
definito dall’ISO (International
Standard Organization). Esso è diviso in numerose sezioni, ognuna della
quali si occupa di un particolare
aspetto di una smartcard. In tabella
1 è presente un elenco delle sezioni
più importanti insieme ad una breve
descrizione del contenuto.
LE DIMENSIONI E I CONTATTI
Secondo l’ISO7816-1, una smartcard è un “rettangolo” di plastica
(generalmente PVC) della dimensione di circa 85,6x53,98 mm. Lo
spessore è di 0,78 mm. In realtà
esiste anche un’altra dimensione,
che è quella comunemente usata
dalle SIM del sistema GSM. È possibile stampare qualcosa sui due
lati della scheda, anche in rilievo
(entro certi limiti fissati). Ci sono
delle aziende specializzate che possono fornirvi delle smartcard bianche oppure prestampate. In alcuni
casi è possibile utilizzare direttamente una stampante da PC,
soprattutto quelle che hanno la
possibilità di stampare sui CDROM.
Sul lato superiore sono presenti dei
contatti elettrici, da un minimo di
4 ad un massimo di 8. La dimensione minima di ogni contatto è di
1,7x2 mm ed è definita anche la
posizione di ognuno di essi. In
figura 5 è rappresentata una schematizzazione di una smartcard e
dei suoi contatti.
Se guardassimo una smartcard in
nostro possesso e la confrontassimo con il disegno in figura, ci
accorgeremmo subito di una differenza nella forma e nella disposizione dei contatti. La carta in
nostro possesso è, comunque, con
molta probabilità, standard.
Infatti, l’ISO7816 impone solo una
dimensione minima dei contatti,
ma lascia al produttore la possibilità di modificarne la forma e la
grandezza. L’unica restrizione è
che, per ogni contatto, l’area minima definita dallo standard sia
comunque “coperta” dal contatto
corrispondente. È per questo motivo che la disposizione dei contatti
può sembrare, da carta a carta,
molto diversa. In figura 6 sono
mostrati i particolari della zona dei
contatti di due smartcard in mio
possesso.
Abbiamo detto che lo standard
prevede fino ad 8 contatti, ognuno
dei quali ha un significato ben preciso, come mostrato nella tabella 2.
OK, SIETE STANCHI DI
GIOCARE?
Cosa contiene il prossimo articolo
Dopo questa panoramica, di orientamento prettamente teorico, sulle
smartcard, nel prossimo articolo
studieremo in dettaglio un particolare tipo di carta: la smartcard a
memoria
protetta
del
tipo
SLE4442, la più diffusa tra questa
tipologia.
Impareremo a gestire la memoria
dati interna per la scrittura/lettura
di informazioni generiche.
Figura 6: Disposizione dei contatti di due
smartcard. Pur essendo diverse,
queste schede sono comunque standard
BIBLIOGRAFIA
Faq sulle smartcard (in inglese): http://www.scdk.com/atsfaq.htm
Tutorial sulle smartcard (in inglese): http://www.smartcard.co.uk/resources/tutorials/sct-itsc.pdf
Carta Nazionale dei Servizi: http://punto-informatico.it/p.asp?i=47159 - http://www.card.infocamere.it/
Health Card (in inglese): http://www.iso.ch/iso/en/commcentre/isobulletin/articles/2003/pdf/medicalcard03-06.pdf
Standard di riferimento (in inglese): http://www.iso.ch/
TUTORIAL
31
MODUGNO-impaginato
27-05-2004
16:46
Pagina 22
TUTORIAL
SMARTCARD
seconda parte
LE SMARTCARD A MEMORIA
di Giuseppe Modugno
[email protected]
Nella prima parte dell’articolo abbiamo introdotto il termine smartcard approfondendone
gli aspetti teorici: le tipologie esistenti sul mercato, le applicazioni attuali e future,
gli standard di riferimento. In questo secondo articolo, parleremo delle smartcard a
memoria dal punto di vista tecnico (caratteristiche, protocollo di comunicazione,
sicurezza, ecc.) soffermandoci sulle carte basate sul diffusissimo chip SLE4442.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti nell’ultimo
articolo
Nel precedente articolo siamo entrati nel mondo delle smartcard definendole da un punto di vista teorico
e commentandone i vantaggi a
dispetto delle tessere magnetiche,
illustrandone le caratteristiche peculiari, raggruppandole e classificandole a seconda delle funzionalità e
modalità d’uso, approfondendone i
campi d’applicazione in cui sono
attualmente utilizzate, oltre a proiettarci nell’immediato futuro dando
uno sguardo alle prossime applicazioni che le vedranno coinvolte. Per
ultimo, abbiamo iniziato l’approccio
tecnico alle smartcard analizzando gli
standard più diffusi e descrivendo i
contatti elettrici utilizzati per l’alimentazione dei circuiti integrati
interni e per lo scambio dei dati con
il mondo esterno. Come già detto,
questi oggetti possono classificarsi in
smartcard a memoria e smartcard a
microprocessore. In questo articolo
parleremo ampiamente della prima
categoria soffermandoci su un chip
molto diffuso, prodotto inizialmente
dalla Siemens e conosciuto con la
sigla SLE4442.
22 TUTORIAL
Le smartcard a memoria
Le smartcard a memoria sono delle
carte utilizzate principalmente per la
memorizzazione di dati digitali di
vario tipo (numero di punti accumulati nel nostro supermercato di fiducia, credito residuo per il noleggio di
DVD o VHS, numero di conto corrente in applicazioni bancarie, ecc).
Poiché le smartcard sono formate da
circuiti a semiconduttore, la capacità
di memorizzazione è molto più elevata rispetto alle tessere magnetiche:
attualmente è possibile raggiungere
capacità dell’ordine dei Mb (megabit, milioni di bit), anche se, nella
maggior parte dei casi, qualche Kb
(chilobit, migliaia di bit) può essere
più che sufficiente. Possiamo pensare
alle smartcard a memoria come a
delle unità di memorizzazione (tipo i
floppy-disk o i CD-ROM) che, in alcuni casi, possono offrire anche un
certo grado di sicurezza.
LE SMARTCARD A MEMORIA
LIBERA
Le più semplici smartcard a memoria esistenti sono quelle definite a
memoria libera (free-memory smartcard). Questo termine indica una
smartcard che integra soltanto una
memoria non volatile (tipicamente
una EEPROM) e nient’altro.
L’accesso in scrittura e/o lettura
avviene tramite i contatti presenti
direttamente sulla smartcard. Sono
generalmente delle memorie seriali
poiché il numero dei contatti utili
per la comunicazione dei dati,
secondo lo standard di riferimento
ISO7816, sono soltanto tre (RST,
I/O, CLK). Quindi, l’accesso ad una
parola della memoria (8, 16 o 32
bit) avviene mediante la trasmissione seriale dei singoli bit sul contatto
di I/O, sincronizzati agli impulsi di
clock sulla linea CLK. Normalmente
la linea RST non viene usata, o viene
usata solo per abilitare l’accesso alla
scheda.
Le smartcard I2C
Un protocollo molto diffuso utilizzato dalle memorie seriali non
volatili è il bus I2C, definito dalla
Philips ma utilizzato ormai da molti
altri produttori di chip a semiconduttore. L’I2C è un bus, utilizzato
molto spesso per l’interconnessione di più circuiti integrati su scheda, mediante due sole piste, definite SDA ed SCL: la prima è una linea
bidirezionale utilizzata per lo scambio dei dati, la seconda è il segnale di clock imposto da un dispositi-
MODUGNO-impaginato
27-05-2004
16:46
Pagina 23
TUTORIAL
vo master. Normalmente sul bus è
presente un solo integrato che ne
controlla l’utilizzo, detto master,
l’unico che può iniziare una comunicazione sul bus e che fornisce il
segnale di clock a tutti i chip connessi, detti slave.
Nel caso di una smartcard I2C, normalmente il bus si riduce a due soli
nodi: il master, rappresentato dal
lettore di smartcard, e uno slave,
rappresentato dalla stessa smartcard (o meglio, dalla memoria
integrata all’interno).
È evidente che la linea SDA del bus
I2C coinciderà con il pin I/O della
smartcard, mentre la linea SCL
coinciderà con il pin CLK.
Le smartcard I2C più diffuse integrano una EEPROM seriale del tipo
24LCxx, prodotte dalla Microchip.
Queste memorie partono da pochi
Kb per arrivare sino a qualche Mb.
La stessa Microchip integra le proprie EEPROM seriali I2C in smartcard plastificate: i relativi prodotti
hanno lo stessa sigla della memoria
integrata con l’aggiunta delle lettere SC in coda (per esempio,
24LC64SC).
In figura 1 è rappresentato il pinout di una smartcard a memoria
libera del tipo I2C. Come si può
osservare, in questa semplice configurazione, solo quattro pin della
smartcard sono usati.
Le smartcard I2C sono molto semplici da usare; affidabili poiché basate
Figura 1:
Associazione dei pin di una smartcard I2C.
su un protocollo, l’I2C appunto,
ormai uno standard nel mondo dei
circuiti integrati; poco costose, poiché l’elettronica da integrare nella
carta plastificata si riduce praticamente ad un singolo chip.
Le altre smartcard a memoria
libera più diffuse
Oltre a questo tipo, esistono altre
smartcard a memoria libera con
semplici funzionalità aggiuntive.
Abbastanza diffuse sono le carte che
integrano dei chip inizialmente prodotti dalla Siemens (per esempio,
SLE4418 o SLE4432): esse vengono
chiamate, dal costruttore, EEPROM
intelligenti, poiché hanno alcune
funzionalità di protezione da scrittura di alcune zone della memoria. Per
esempio, l’SLE4432 è una EEPROM
a 256 byte (parola ad 8 bit) in cui è
possibile proteggere definitivamente
in scrittura (EEPROM → ROM) i
primi 32 byte (anche singolarmente
ed isolatamente). Il resto della
memoria (256-32=234 byte) rimane
a disposizione per qualsiasi operazione di lettura e/o scrittura. Il chip
SLE4418, invece, implementa una
EEPROM intelligente di 1024 byte in
cui è possibile proteggere da scrittura in modo definitivo ogni singolo
byte. Di questi chip esistono, e sono
maggiormente diffusi, anche le controparti a memoria protetta.
Per maggiori dettagli sulle smartcard SLExxxx si veda il paragrafo
successivo sulle smartcard a
memoria protetta.
Grande diffusione, anche se non in
Italia, hanno avuto le smartcard
della Gemplus come schede telefoniche prepagate. Forse le prime
smartcard a memoria, ormai obsolete, le Gemplus GPM256 sono
state usate, per esempio, da France
Telecom. Sono memorie che possono conservare fino a 256 bit di
dati, di cui i primi 96 rappresentano un identificativo (numero di
serie della carta, identificatore del
produttore, ecc) ed i restanti 160
bit rappresentano le unità rimanenti del credito prepagato.
I punti deboli delle smartcard a
memoria libera
Il più grande svantaggio delle carte
a memoria libera, cosa per niente
trascurabile, è la loro scarsa sicurezza. A differenza di un floppydisk, il contenuto di una smartcard
è spesso molto personale: all’interno possono essere memorizzati il
numero di conto corrente, il credito accumulato per il noleggio di
VHS o il numero di ingressi in una
palestra. In alcuni casi è necessario
che questi dati rimangano segreti
per problemi legati alla privacy
(per esempio, i dati personali); in
altri casi, perché possono essere
usati per truffe ai danni del proprietario della carta (per esempio,
numero di conto corrente); in altri
ancora, perché i dati rappresentano del denaro che deve essere
usato solo dal legittimo proprietario (per esempio, il credito per il
noleggio di video o gli ingressi in
una palestra).
È ovvio che se una smartcard a
memoria libera viene persa, sarà
molto semplice, per chi ne viene in
possesso, utilizzare o leggere il
contenuto senza dover scomodare
grosse conoscenze di hacker.
Per questo motivo tali carte sono
poco diffuse, quindi non entreremo nei dettagli nella restante parte
dell’articolo. Per chi volesse approfondire l’argomento, consiglio di
consultare i datasheet delle memorie 24LCxx della Microchip e lo
standard I2C, seguendo i link in
bibliografia, oppure consultare i
siti Web dei maggiori costruttori di
smartcard a memoria (Siemens,
Infineon, Gemplus).
LE SMART CARD A MEMORIA
PROTETTA
La semplicità d’uso, la flessibilità
TUTORIAL
23
MODUGNO-impaginato
27-05-2004
16:46
Pagina 24
TUTORIAL
dei contenuti e soprattutto la facile trasportabilità, hanno portato ad
utilizzare le smartcard come contenitori tecnologicamente avanzati
di dati del tutto personali, e ciò ha
inevitabilmente portato alla risoluzione dei problemi legati alla sicurezza ed alla privacy. In parole
molto semplici, l’accesso (in scrittura e/o lettura) dei dati contenuti
all’interno della smartcard deve
essere abilitato solo dal personale
autorizzato, che può essere il titolare della carta oppure un’altra
persona (il nostro medico, il personale della nostra banca, ecc).
È per questo scopo che vengono
utilizzate le smartcard a memoria
protetta.
Il cuore dell’elettronica integrata
nell’involucro plastificato è sempre
rappresentato da una memoria
digitale non volatile (EEPROM o
Flash) ma, a differenza delle smartcard a memoria libera, in quelle a
memoria protetta è presente
anche della logica aggiuntiva che
protegge il contenuto contro gli
accessi non autorizzati. In commercio esistono diverse smartcard
a memoria protetta che hanno differenti caratteristiche. La scelta di
una smartcard dipende molto dall’applicazione e deve essere effettuata considerando tutti gli aspetti
possibili, tra cui ricordiamo:
• Capacità ROM (normalmente
scritta dal costruttore degli integrati).
• Capacità PROM (normalmente è
una zona di memoria che può
essere scritta una sola volta dall’utilizzatore).
• Capacità EEPROM (memoria non
volatile che contiene i dati utili).
• Tempi d’accesso in scrittura/lettura.
• Tensione d’alimentazione (normalmente a 5V).
• Assorbimento (parametro importante in applicazioni a batteria).
24 TUTORIAL
• Numero di operazioni di scrittura
(dell’ordine di molte migliaia).
• Tempo di conservazione dei dati
in memoria (dell’ordine dei dieci
anni).
• Modalità di protezione (solo in
scrittura o solo in lettura o in
entrambe le modalità).
• Meccanismo di protezione (PIN,
parametri biometrici, ecc.).
• Compatibilità con i dispositivi di
interfacciamento esistenti.
• Kit di sviluppo.
• Reperibilità.
• Costo.
I maggiori produttori di smartcard
a memoria protetta sono Siemens,
Infineon, Gemplus e Philips. In
realtà, le memorie per IC-card prodotte inizialmente dalla Siemens,
sono passate sotto il controllo di
Infineon, conservandone il partname. Tengo a sottolineare che
questi sono solo i produttori dei
chip. Accanto a questi nomi, ed
insieme ad essi, ci sono numerose
aziende che si occupano dell’integrazione di questi chip nella carte
plastificate, fornendo in alcuni casi
anche servizi di stampa.
In tabella 1 sono elencate le memorie protette più diffuse, insieme ad
alcune loro caratteristiche fondamentali. Ci sono altri chip molto diffusi ma solo a livello industriale e per
grossi quantitativi. In questo articolo consideriamo solo le carte più diffuse a livello hobbistico e più facilmente reperibili.
Le memorie della Gemplus seguo-
no a tutti gli effetti le caratteristiche delle più diffuse memorie della
Siemens/Infineon: la GPM2K è
equivalente alla SLE4442, così
come la GPM8K è equivalente alla
SLE4428.
Nel seguito dell’articolo, parleremo diffusamente delle smartcard a
memoria basate sul chip SLE4442,
poiché rappresenta attualmente la
soluzione migliore come rapporto
qualità/prezzo, includendo la facile
reperibilità e la facilità d’uso.
SLE4442
Caratteristiche generali
È possibile comprare da molti distributori (in Italia e all’estero) smartcard SLE4442 bianche oppure prestampate, arrivando a costare anche
meno di 1 euro per grossi quantitativi. Normalmente si possono trovare a 3 euro per poche quantità
(vedere la bibliografia per i distributori da me trovati).
Alcune delle caratteristiche di questa smartcard sono riassunte nel
seguente elenco:
• Contatti compatibili con lo standard ISO7816.
• ATR (Answer To Reset) come da
standard ISO7816.
• Protocollo di comunicazione a 2 fili.
• EEPROM organizzata in 256x8
bit (256 byte).
• Indirizzamento al byte.
• Protezione irreversibile di ogni
singolo byte tra i primi 32
(PROM).
• Tempo di programmazione pari
Nome
Produttore
Capacità PROM
Capacità EEPROM
SLE4442
Infineon
32 byte
256 byte
SLE4428
Infineon
1024 byte
1024 byte
GPM2K
Gemplus
32 byte
256 byte
GPM8K
Gemplus
1024 byte
1024 byte
Tabella 1:
Elenco delle memorie protette più diffuse in ambito smartcard
MODUGNO-impaginato
27-05-2004
16:46
Pagina 25
TUTORIAL
Numero
Nome
Direzione
Descrizione
C1
VCC
I
Alimentazione
C2
RST
I
Reset
C3
CLK
I
Clock
C4
RFU
C5
GND
I
Massa
C6
VPP
I
Non connesso
C7
I/O
I/O
Linea dati
C8
RFU
Non connesso
Non connesso
Figura 2:
Tabella 2:
•
•
•
•
Contatti nel chip SLE4442
a 2.5ms per byte.
Almeno 10.000 cicli di scrittura
garantiti.
Conservazione dei dati garantita
per almeno 10 anni.
Protezione in scrittura mediante
un PSC a 3 byte.
Blocco irreversibile in scrittura
dopo tre tentativi errati di presentazione del PSC.
Disposizione dei contatti
In figura 2 è mostrata la disposizione degli 8 contatti ISO7816 sul chip
SLE4442. L’associazione tra contatto
e funzionalità segue lo standard ISO,
riassunto in tabella 2.
Dei 6 contatti utili previsti dallo
standard ISO7816, solo 5 vengono
usati nell’integrato SLE4442, poiché non è prevista alcuna tensione
di programmazione Vpp ed il pin
relativo è non connesso.
Oltre alla disposizione, notare la
forma dei contatti che è tipica di
Parametro
Alimentazione (Vcc)
Tabella 3:
Le condizioni operative dell’integrato devono rientrare in quelle
mostrate nella tabella 3.
Organizzazione interna
L’SLE4442 ha tre diverse zone di
memoria di diversa capacità e funzionalità.
La più capiente, definita Main
Memory, è quella destinata alla
memorizzazione dei dati dell’utente. Essa è organizzata a byte e può
contenere 256 byte. I primi 32
byte possono essere resi definitivamente di sola lettura (PROM) scrivendo un opportuno bit nella
Protection Memory (vedi dopo).
Tutti i byte della Main Memory
possono essere sempre letti in qualsiasi momento, mentre possono
Minimo
Tipico
Massimo
4.75 V
5.0 V
5.25 V
3 mA
10 mA
Corrente (Icc)
Temperatura
questo integrato. Se una smartcard
ha la stessa disposizione e forma
dei contatti come in figura 2,
molto probabilmente è una smartcard SLE4442.
0 °C
Condizioni operative del chip SLE4442.
70 °C
Disposizione e forma dei contatti del chip
SLE4442
essere scritti solo dopo aver inserito il
PSC (vedi dopo). I byte protetti da
scrittura non possono comunque
essere modificati, anche inserendo
correttamente il PSC. Dopo tre
tentativi errati di presentazione del
PSC, la memoria non può più essere scritta e diventa una ROM a tutti
gli effetti.
La Protection Memory è una memoria di 32 bit (4 byte) ed ha lo scopo
di rendere irreversibilmente di sola
lettura i primi 32 byte della Main
Memory. Ogni bit della Protection
Memory rappresenta un byte della
Main Memory (dall’indirizzo 0 all’indirizzo 31). Scrivendo, per esempio,
il bit 10 della Protection Memory si
proteggerà il byte di indirizzo 10
della Main Memory da successive
operazioni di scrittura (anche dopo
aver presentato correttamente il
PSC alla scheda). È possibile sempre
leggere il contenuto della Protection
Memory, mentre è possibile scrivere
tali bit solo una volta: ciò vuol dire
che, dopo aver protetto un byte
della Main Memory, non è più possibile togliere tale protezione.
La Security Memory è una memoria
di 4 byte e contiene, partendo dall’indirizzo 0, il cosiddetto Error
Counter e il PSC (Programmable
Security Code) che occupa 3 byte.
L’Error Counter è un contatore che
TUTORIAL
25
MODUGNO-impaginato
27-05-2004
16:46
Pagina 26
TUTORIAL
memorizza il numero di tentativi
errati di inserimento del PSC, il
quale rappresenta una specie di PIN,
cioè di codice segreto che abilita l’utente alle operazioni di scrittura.
Poiché il PSC è formato da 3 byte,
cioè 24 bit, ci sono 224 (circa
16.000.000) combinazioni possibili,
troppe per poter indovinare la giusta combinazione in tre tentativi.
Oltre alle memorie, l’SLE4442 contiene la logica aggiuntiva per gestire
l’interfacciamento con l’esterno
(ATR, comandi, ecc) e l’accesso in
scrittura/lettura alle diverse zone di
memoria.
In figura 3 è rappresentata l’organizzazione interna dell’SLE4442.
Tutto quello che diremo per la
smartcard a memoria protetta
SLE4442 è valido anche per la
smartcard a memoria libera
SLE4432, con l’unica differenza che,
in quest’ultima, è assente il meccanismo della protezione in scrittura
mediante PSC (quindi, è assente la
Security Memory).
Accesso alla memoria
Come si è accennato, è sempre
possibile leggere il contenuto delle
tre zone di memoria (Main,
Security e Protection Memory),
tranne i tre byte che formano il
PSC nel caso in cui questo non sia
ancora stato presentato correttamente. È sufficiente alimentare la
scheda e utilizzare l’apposito protocollo, spiegato più avanti in questo articolo, per ottenere il contenuto della memoria, senza dover
necessariamente conoscere il PSC,
l’analogo del PIN.
Questo vuol dire che la carta non
potrà essere utilizzata per memorizzare dati che possono essere letti
solo da personale autorizzato (per
esempio, tutti i dati sensibili per la
privacy), ma solo quei dati che
devono essere protetti dalla scrittura non autorizzata.
Infatti, per poter scrivere un solo
bit di una qualsiasi zona di memoria (tranne i bit dell’Error Counter)
è necessario conoscere e presentare correttamente il PSC alla scheda, la quale abiliterà le operazioni
di scrittura.
Ciò può essere molto utile quando
vogliamo utilizzare una smartcard
per memorizzare i punti accumula-
ti da un nostro cliente o gli ingressi alla nostra struttura effettivamente pagati (palestre, docce,
ecc). In questo caso, pur avendo a
disposizione un lettore di smartcard SLE4442, sarà possibile, al
massimo, leggere il numero dei
crediti memorizzati nella scheda,
ma non modificarli, per esempio
aumentarli senza diritto. Solo chi
conosce il PSC, cioè il proprietario
della struttura/negozio, potrà
aggiornare il numero di crediti in
base agli acquisti del cliente.
Inoltre, utilizzando tecniche di crittografia, è possibile comunque cifrare le informazioni memorizzate in
modo che anche l’eventuale lettura
sia vanificata (vedere, a tal proposito, uno dei prossimi articoli).
Per la particolare tecnologia con
cui sono realizzate le memorie
dell’SLE4442, una operazione di
cancellazione (erase) può avvenire
solo su un intero byte e porta tutti
i bit ad 1 logico.
Quindi cancellare un byte vuol dire
portarlo alla combinazione 1111
1111 (FF in esadecimale).
Anche l’operazione di scrittura
avviene a byte (non è possibile
accedere direttamente ad un singolo bit di una qualsiasi zona di
memoria), in modo leggermente
più complicato. Per motivi tecnologici, il valore di un bit del byte a
cui stiamo facendo riferimento,
dopo l’operazione di scrittura sarà
uguale ad un AND logico tra il vecVecchio
Nuovo
Risultato
1
1
1
1
0
0
0
1
0
0
0
0
Tabella 4:
Figura 3:
Organizzazione interna del chip SLE4442
26 TUTORIAL
Tabella di verità dell’operazione logica
AND in relazione alle operazioni di
scrittura nella SLE4442.
MODUGNO-impaginato
27-05-2004
16:46
Pagina 27
TUTORIAL
chio valore memorizzato in quel
bit e il nuovo valore che vogliamo
scrivere. Spieghiamo meglio questo meccanismo, ricordando inizialmente la tabella di verità dell’operazione logica AND, mostrata
nella tabella 4.
Se il valore memorizzato nel bit è 1
(Vecchio=1), dalla tabella risulta che
è possibile lasciare tale bit ad 1
(Risultato=1), scrivendo sempre 1
(Nuovo=1), oppure è possibile scrivere 0 (Risultato=0) scrivendo 0
(Nuovo=0). Se, invece, il valore
memorizzato è 0 (Vecchio=0), sarà
possibile lasciare tale bit a 0
(Risultato=0) scrivendo sempre 0
(Nuovo=0) ma non sarà possibile
trasformarlo in 1, anche scrivendo 1
(Nuovo=1), come si evince dalla
terza riga nella tabella 4. In quest’ultimo caso, cioè se dobbiamo scrivere 1 in un bit in cui è memorizzato
0, sarà necessario cancellare (operazione di erase) inizialmente l’intero
byte, portando tutti i bit ad 1, da cui
è possibile scrivere sia 0 che 1.
In tabella 5 sono mostrati alcuni
esempi di scrittura, evidenziando,
per ognuno, se è necessario procedere con una operazione di erase.
Nel primo e nel secondo caso, non
è necessaria alcuna operazione di
cancellazione del byte poiché tutti
i bit rimangono ad 1 logico, oppure passano dal valore 1 al valore 0.
Nel terzo ed ultimo esempio, un
solo bit del byte deve passare dal
valore 0 al valore 1 e, quindi, è
necessaria un’operazione di erase.
Ricordando che questa operazione
avviene su un intero byte, si capisce come il byte 0000 0010 diventa, dopo la cancellazione, 1111
1111 e, successivamente, dopo l’operazione di scrittura, 1000 0010.
Il meccanismo è relativamente
complicato ma la buona notizia è
che la logica interna del chip
SLE4442 si occupa di tutto, in
modo completamente trasparente.
In altre parole, se un’operazione di
scrittura prevede il passaggio di
almeno un bit dal valore 0 al valore 1, il byte a cui si fa riferimento
viene prima automaticamente cancellato. Naturalmente ciò comporta un diverso tempo di completamento della procedura: nei primi
due casi sarà di circa 5ms, nell’ultimo caso sarà di circa 2.5ms.
Generalità sul protocollo di
comunicazione
L’accesso ai dati contenuti in una
smartcard è possibile tramite un
dispositivo di interfacciamento,
generalmente formato da un connettore utilizzato per l’inserimento
della carta, un microcontrollore
che si preoccupa di generare gli
opportuni segnali sulle linee I/O e
CLK, un display/tastiera oppure un
collegamento seriale con un PC.
Tale dispositivo verrà chiamato
successivamente, riprendendo la
terminologia contenuta nel datasheet dell’SLE4442, IFD (InterFace
Device, dispositivo di interfacciamento).
Il protocollo di comunicazione
dell’SLE4442 utilizza le due linee,
I/O e CLK. La linea I/O è bidirezionale e, in modalità output (direzione smartcard-IFD) lo stadio d’uscita è un open-drain. Per questo
motivo è necessario utilizzare una
resistenza di pull-up esterna su tale
linea per una corretta comunicazione (si veda uno dei prossimi
articoli sulla realizzazione di un lettore universale di smartcard). La
linea CLK è sempre un ingresso per
la smartcard e viene utilizzata
dall’IFD per fornire il necessario
segnale di clock per la sincronizzazione. Il protocollo è chiamato sincrono (e spesso anche tali smartcard vengono chiamate sincrone
per questo motivo) poiché le transizioni sulla linea di I/O sono sincronizzate con gli impulsi di clock
della linea CLK.
ATR (Answer To Reset)
Dopo aver alimentato la scheda,
Valore memorizzato
Nuovo valore
Erase
1111 1111
1001 0010
NO
1001 0010
0000 0010
NO
0000 0010
1000 0010
SI
Tabella 5:
Figura 4:
Esempi di operazioni di scrittura su un byte di memoria. Su ogni riga è indicato se è necessaria
anche una operazione di cancellazione (Erase).
Forme d’onda dei segnali durante l’operazione di reset
TUTORIAL
27
MODUGNO-impaginato
27-05-2004
16:46
Pagina 28
TUTORIAL
Byte 1
Byte 2
Byte 3
Byte 4
D7…D0
D15 ... D8
D23 ... D16
D31 ... D24
Tabella 6:
Associazione tra i byte dell’ATR ed i bit trasmessi dalla smartcard come in figura 4.
applicando una tensione di 5V tra i
contatti Vcc e GND, la scheda è
pronta per essere utilizzata. La
prima operazione da effettuare è il
Reset dell’integrato, senza della
quale non è possibile iniziare alcuna comunicazione.
Il reset della scheda viene effettuato
generando un impulso di clock
mentre la linea RST è a livello alto,
come si può osservare nella figura 4.
Successivamente, ad ogni impulso
di clock, la scheda pone sulla linea
I/O i primi 4 byte della Main
Memory, trasmettendo ogni byte a
partire dal bit meno significativo
(vedere figura 4). Poiché ogni byte è
formato da 8 bit, l’operazione di
reset della carta viene completata
dopo 33 impulsi di clock, contando
anche il primo impulso. Dopo il 33esimo colpo di clock, la smartcard si
mette in attesa di un comando
impostando la linea di I/O come
ingresso (alta impedenza).
Considerando l’ordine di trasmissione dei bit e dei byte, i 4 byte
dell’ATR sono formati dai bit trasmessi come indicato nella tabella 6.
La risposta della carta al reset, cioè
i 4 byte trasmessi con i successivi
32 colpi di clock, è detta Answer
To Reset (risposta al reset) o, brevemente, ATR. Essa rappresenta
un’informazione molto importante
per tutte le smartcard, sincrone ed
asincrone, oltre ad essere ufficializzata nello standard ISO7816.
Spesso l’analisi dell’ATR permette
di risalire al produttore, al fornitore, all’applicazione, alla capienza,
al tipo di protocollo della smartcard. Il dispositivo di interfacciamento può anche controllare la
correttezza dell’ATR e decidere di
28 TUTORIAL
scartare la smartcard in cui sia errato o non compatibile, oppure selezionare l’opportuno protocollo di
comunicazione se ne supporta
diversi.
Una smartcard SLE4442 vergine ha
un ATR già programmato e non
modificabile, uguale alla sequenza
esadecimale A2 13 10 91. Senza
entrare nei dettagli sulla composizione di un ATR di una smartcard
sincrona, tale valore di ATR indica,
tra l’altro, l’utilizzo di un protocollo di comunicazione a due fili ed
una capacità di 256 byte. Il lettore
di smartcard può controllare tale
valore e, se compatibile solo con le
SLE4442, scartare tutte le card con
diverso ATR.
Precisiamo che questi 4 byte si trovano normalmente memorizzati
nei primi 4 byte della Main
Memory, a partire dall’indirizzo 0:
tali byte sono protetti da scrittura,
mediante la Protection Memory,
dalla fabbrica. È possibile risalire
nuovamente all’ATR della scheda,
dopo l’operazione di reset, andan-
Figura 5:
do a leggere il contenuto dei primi
byte della Main Memory.
COMANDI
A parte la modalità di Reset e
Answer-to-Reset, il chip SLE4442
aspetta indefinitamente un comando utile proveniente dall’IFD
(Command Mode). Il lettore inizia
un comando mediante una condizione di start (transizione verso il
basso della linea I/O mentre la
linea CLK è alta) e prosegue con la
sua trasmissione mediante 24 successivi impulsi di clock. Infatti,
ogni comando è formato da 3
byte, trasmessi serialmente bit a
bit sulla linea di I/O a partire
dall’LSB (Least Significant Bit, bit
meno significativo). Il primo byte
rappresenta il comando vero e
proprio (lettura, scrittura, ecc), il
secondo byte rappresenta un indirizzo ed il terzo byte un dato. A
seconda del comando, il secondo
e/o terzo byte potrebbero non
essere usati (in questo caso, devono essere comunque trasmessi).
Dopo i 24 impulsi di clock, il lettore genera una condizione di stop
(transizione verso l’alto della linea
di I/O mentre la linea CLK è alta).
Durante questa fase (Command
Mode), la linea di I/O ha direzione
Forme d’onda associate ad un comando con modalità Outgoing e modalità Processing
MODUGNO-impaginato
27-05-2004
16:46
Pagina 29
TUTORIAL
lettore-smartcard, cioè il lettore
determina il valore della linea mentre il chip ne legge lo stato.
Dopo i 24 impulsi di clock e la condizione di stop, in funzione del
comando trasmesso, si entra nella
modalità trasmissione (Outgoing
Mode) oppure di elaborazione
(Processing Mode). In entrambe le
modalità, la linea di I/O cambia
direzione, cioè viene imposta dalla
smartcard e letta dall’IFD.
Nella modalità Outgoing, normalmente associata ai comandi di lettura di una zona di memoria, la
smartcard trasmette i dati richiesti
generando gli opportuni livelli
sulla linea di I/O, sincronizzandoli
con gli impulsi di clock provenienti dall’IFD. In questa fase, il lettore
dovrà fornire un numero sufficiente di impulsi di clock a seconda dei
dati che dovranno essere scambiati, i quali verranno trasmessi, come
al solito, a partire dal bit meno
significativo.
Nella modalità Processing, normalmente associata ai comandi di
scrittura, la smartcard esegue
internamente il comando ricevuto.
In questo caso, la linea di I/O è
posta a livello basso dalla smartcard mentre il lettore dovrà contemporaneamente leggere tale
livello e fornire un sufficiente
numero di impulsi di clock. Non
appena l’elaborazione termina, la
smartcard pone a livello alto il pin
di I/O.
Dopo la modalità Outgoing o
Processing, il lettore può trasmettere un successivo comando alla
smartcard.
In figura 5 sono mostrate le forme
d’onda delle due linee I/O e CLK
nel caso di un comando con
modalità Outgoing e di un comando con modalità Processing.
Tutti i comandi previsti per le
smartcard SLE4442 sono riassunti
in tabella 7. Per ognuno di essi
sono specificati i tre byte e la
modalità di funzionamento.
Ricordo che la trasmissione dei tre
byte costituenti il comando prevede la trasmissione a partire dal bit
meno significativo. Quindi, volendo trasmettere il comando READ
PROTECTION MEMORY, si dovranno trasmettere i bit nell’ordine
0010 1100, al contrario di come
sono scritti in tabella.
Nei successivi paragrafi verranno
descritti in dettaglio tutti i comandi.
VISUAL PARSIC Compilatore grafico per Microchip Picmicro
Per chi vuole scrivere un programma in Assembler senza scrivere un solo rigo di codice
Display LCD/VFD
Noritake Cristallfontz
Programmatori PIC
ICD Debugger
Programmatori Willem
originali olandesi
Gruppi di continuità
da 500 VA fino a 160 KVA
Schede PLC per PICmicro
Telecamere a colori e b/n
trasmittenti e via cavo
Display a carattere scorrevole
in offerta speciale
WWW.PARSICITALIA.IT
Via Rovereto, 13 - 48020 Savio (RA) - Tel 0544.927468 - Fax 178.6040078 - Email: [email protected]
TUTORIAL
29
MODUGNO-impaginato
27-05-2004
16:46
Pagina 30
TUTORIAL
Operazione
Byte 1
COMANDO
Byte 2
INDIRIZZO
Byte 3
DATO
Modalità
READ MAIN
MEMORY
0011 0000
Usato
Non usato
OUTGOING
UPDATE MAIN
MEMORY
0011 1000
Usato
Usato
PROCESSING
READ PROTECTION
MEMORY
0011 0100
Non usato
Non usato
OUTGOING
WRITE PROTECTION
MEMORY
0011 1100
Usato
Usato
PROCESSING
READ SECURITY
MEMORY
0011 0001
Non usato
Non usato
OUTGOING
UPDATE SECURITY
MEMORY
0011 1001
Usato
Usato
PROCESSING
COMPARE VERIFICATION
DATA
0011 0011
Usato
Usato
PROCESSING
Tabella 7:
Comandi previsti per le smartcard SLE4442 (i bit di ogni byte sono specificati dal più significativo al meno significativo).
READ MAIN MEMORY
È uno dei comandi maggiormente
usati e consente di leggere il contenuto della Main Memory, formata da 256 byte. Come si può vedere in tabella 7, questo comando
utilizza il byte di indirizzo (il secondo byte trasmesso), mentre ignora
il dato (il terzo byte). Il byte di
indirizzo viene usato come puntatore al primo byte della Main
Memory da leggere. Ad ogni
impulso di clock generato dall’IFD,
la smartcard pone un bit del byte
da leggere sulla linea di I/O, partendo come al solito dal meno
significativo. Dopo aver trasmesso
un intero byte, l’indirizzo di
memoria viene automaticamente
incrementato. Ciò permette al lettore di leggere il contenuto di
tutta la Main Memory a partire da
un dato indirizzo, mediante un
unico comando e fornendo un
numero sufficiente di impulsi di
clock. Dopo l’ultimo bit (il più
significativo del byte di indirizzo
255) sarà necessario un ulteriore
impulso di clock per riportare la
smartcard in attesa di un nuovo
comando (linea I/O in ingresso).
30 TUTORIAL
Quindi, per leggere la memoria
partendo dal byte di indirizzo N
(N=0…255), saranno necessari
(256-N)x8+1 impulsi di clock. Per
interrompere tale operazione, per
esempio quando si vuole leggere
un solo byte, è possibile generare
un evento di break, come spiegato
più avanti in questo articolo.
UPDATE MAIN MEMORY
È il comando che permette di modificare il contenuto della memoria
principale, utilizzata per la conservazione dei dati utente. Il byte di indirizzo rappresenta l’indirizzo da
modificare, mentre il byte dato rappresenta il nuovo valore da memorizzare. La logica interna della scheda procede alla cancellazione del
byte nel caso sia necessaria, se cioè
qualche bit del dato deve passare
dal valore 0 al valore 1. In questa
situazione, saranno necessari 255
impulsi di clock (corrispondenti a
circa 5 ms). Invece, nel caso in cui
non è necessaria alcuna operazione
di erase, l’elaborazione del comando impiega 123 impulsi di clock
(corrispondenti a circa 2.5 ms).
Naturalmente, la scrittura del dato
avviene effettivamente solo se il
byte da modificare è accessibile in
scrittura: nel caso della Main
Memory, ciò avviene se è stato presentato correttamente il PSC e, nel
caso di indirizzo compreso tra 0 e
31, il corrispondente bit della
Protection Memory sia al valore 1.
La scrittura viene inibita anche
quando il dato che si vuole memorizzare è identico al dato già presente nella locazione di riferimento. In
questi casi, cioè quando la scrittura
non avviene, la fase di elaborazione
del comando termina dopo soli due
impulsi di clock.
READ PROTECTION MEMORY
Mediante questo comando è possibile leggere l’intero contenuto, a
partire dal primo byte, della
Protection Memory. I due byte di
indirizzo e dato non sono usati.
Poiché la Protection Memory è formata da 4 byte, saranno necessario
4x8+1=33 impulsi di clock, di cui i
primi 32 sono necessari per la trasmissione di ogni singolo bit e l’ultimo impulso di clock è necessario
per portare la carta nella modalità di
attesa di un ulteriore comando. In
MODUGNO-impaginato
27-05-2004
16:46
Pagina 31
TUTORIAL
questo caso, i bit trasmessi rappresentano gli indirizzi 0, 1… 31 della
Main Memory.
Ricordiamo che ogni bit della
Protection Memory rappresenta
uno dei primi 32 byte della Main
Memory. Se il bit corrispondente
nella Protection Memory vale 0,
tale byte nella Main Memory non
può più essere modificato.
Ovviamente, una volta che un bit
della Protection Memory è stato
scritto (trasformato nel valore 0),
non potrà più essere cancellato
(portato al valore originario 1).
WRITE PROTECTION MEMORY
È il comando che permette di
modificare il contenuto della
Protection Memory. Il byte di indirizzo, compreso tra 0 e 3, rappresenta il byte della memoria da
modificare, mentre il byte dato
rappresenta il nuovo valore da
memorizzare. Come si è già detto,
i 32 bit dei 4 byte che formano la
Protection Memory permettono di
proteggere da scrittura i primi 32
byte della Main Memory, in maniera irreversibile. Un bit a 0 nella
Protection Memory, rappresenta
un byte protetto nella Main
Memory. Poiché questa operazione
è irreversibile, non è più possibile
cambiare il valore di un bit della
Protection Memory da 0 nuovamente ad 1. La fase di elaborazione
di questo comando termina sempre dopo 123 impulsi di clock, poiché non è possibile cancellare (portare ad FF) un byte della Protection
Memory. Se non è stato ancora
inserito il PSC corretto, oppure il
dato che si vuol scrivere prevede il
passaggio di un bit dal valore 0 al
valore 1, la scrittura non avviene e
l’elaborazione termina dopo soli 2
impulsi di clock.
READ SECURITY MEMORY
Allo stesso modo dei comandi READ
MAIN MEMORY e READ PROTEC-
TION MEMORY, questo comando
legge l’intero contenuto della
Security Memory, formata da 4
byte. I byte di indirizzo e di dato
non sono usati.
Come per la Protection Memory,
sono necessari 4x8+1=33 impulsi di
clock per ricevere l’intero contenuto di questa zona di memoria. Il
primo byte, corrispondente all’indirizzo 0, è l’Error Counter che permette di conteggiare il numero di
tentativi errati di inserimento del
PSC. Il meccanismo di presentazione del PSC è spiegato più avanti in
questo articolo.
Gli altri tre byte della Security
Memory contengono il PSC
(Programmable Security Code), che
rappresenta un codice identificativo
che permette di abilitare l’accesso in
scrittura di tutte le zone di memoria.
Questi tre byte sono gli unici a non
poter essere letti prima di un corretto inserimento del PSC: tentando di
leggere il contenuto della Security
Memory in questa condizione, la
scheda restituirà il byte corretto
dell’Error Counter ma tutti byte 00
(tutti i bit a 0) per il PSC. Dopo aver
inserito correttamente il PSC, sarà
possibile leggere e modificare lo
stesso codice.
UPDATE SECURITY MEMORY
Mediante questo comando è possibile modificare il contenuto della
Security Memory, quindi è possibile
modificare il valore dell’Error
Counter e del PSC. Il byte di indirizzo del comando rappresenta il byte
da modificare nella Security
Memory (0 per l’Error Counter, 1..3
per un byte del PSC), mentre il byte
di dato rappresenta il nuovo valore
da memorizzare. Per l’Error Counter,
è possibile modificare solo il valore
dei tre bit meno significativi, poiché
gli altri non sono fisicamente implementati e vengono completamente
ignorati.
Anche per questo comando di scrit-
tura, l’elaborazione termina in 123
impulsi di clock se la scrittura avviene effettivamente, oppure termina
dopo soli due impulsi di clock se la
scrittura viene inibita. Ciò accade
quando si vuole modificare il PSC
senza aver inserito correttamente il
precedente codice (notare che il
byte dell’Error Counter, invece, può
essere sempre modificato), oppure
quando il dato da scrivere è identico
a quello già memorizzato.
COMPARE VERIFICATION DATA
Il comando COMPARE VERIFICATION DATA, da usare sempre in
combinazione con una operazione
di scrittura dell’Error Counter (vedi il
paragrafo successivo per dettagli),
permette di verificare un byte del
PSC. Il byte di indirizzo rappresenta
il byte del PSC da verificare: 1 per il
primo byte, 2 per il secondo byte, 3
per il terzo byte. Il byte di dato,
invece, rappresenta il contenuto di
quel byte del PSC da confrontare
con quello memorizzato nella
smartcard. Dopo l’invio del comando, la smartcard entra in Processing
Mode e termina l’elaborazione
dopo due impulsi di clock.
Figura 6:
Diagramma di flusso da utilizzare per la
verifica del PSC
TUTORIAL
31
MODUGNO-impaginato
27-05-2004
16:46
Pagina 32
TUTORIAL
Presentazione del PSC
Più volte si è detto che le smartcard
SLE4442 sono protette da un codice
programmabile, definito PSC, formato da 3 byte e memorizzato nella
Security Memory, agli indirizzi 1, 2 e
3. Per poter modificare il contenuto
della Main Memory, della Protection
Memory o della Security Memory
stessa, è necessario presentare correttamente alla smartcard il PSC
attualmente memorizzato nella
scheda. In altre parole, è necessario
utilizzare tre diversi comandi COMPARE VERIFICATION DATA per confrontare ogni singolo byte del PSC.
In dettaglio, l’algoritmo da utilizzare
per inserire il codice PSC è mostrato,
attraverso il suo diagramma di flusso, in figura 6.
Come prima operazione è necessario leggere il contenuto dell’Error
Counter, mediante il comando
READ SECURITY MEMORY. In questo
byte sono implementati solo i tre bit
meno significativi, mentre gli altri
bit sono sempre letti al valore 0. I tre
bit meno significativi rappresentano
il numero dei tentativi di inserimento del PSC ancora rimasti. Se, per
esempio, l’Error Counter vale 07
(0000 0111) abbiamo ancora tre
tentativi a disposizione. Se, invece,
l’Error Counter vale 00 (0000 0000)
non è più possibile inserire correttamente il PSC e quindi il contenuto
della scheda non potrà più essere
modificato.
Se ci sono ancora tentativi disponibili, è necessario scrivere uno dei bit
dell’Error Counter, cioè cambiare il
suo valore da 1 a 0, mediante una
operazione di UPDATE SECURITY
MEMORY. Senza di questo comando, i successivi comandi di verifica
PSC non saranno accettati.
Successivamente è possibile inviare i
tre comandi COMPARE VERIFICATION DATA per confrontare ogni
singolo byte del PSC. Se il PSC inserito è corretto, sarà possibile modificare il contenuto delle varie zone di
32 TUTORIAL
memoria. Per controllare ciò, è possibile procedere ad una cancellazione dell’Error Counter, in modo da
portare nuovamente a 3 i tentativi
disponibili. Ciò è possibile utilizzando il comando UPDATE SECURITY
MEMORY con indirizzo 0 (Error
Counter) e dato 07 (0000 0111).
Inviamo, ora, il comando di READ
SECURITY MEMORY e confrontiamo
il valore di Error Counter. Se questi è
pari a 07, l’inserimento del PSC è
andato a buon fine, tant’è che
siamo riusciti a ricaricare completamente l’Error Counter.
In caso contrario, invece, la smartcard non ha accettato il PSC trasmesso ed infatti l’Error Counter
non è stato ricaricato. In questo
caso, l’operazione ha comportato
una diminuzione del numero di
tentativi a disposizione prima che
la smartcard venga completamente e definitivamente protetta da
scrittura.
Break
Generando una condizione di Break,
la smartcard interrompe eventuali
operazioni in corso, pone la linea di
I/O in alta impedenza ed aspetta un
successivo comando. Ciò può essere
utile, per esempio, se vogliamo leggere una zona limitata della Main
Memory. Come si è visto, il comando READ MAIN MEMORY permette
di leggere l’intero contenuto della
memoria, a partire da un certo indirizzo. Durante questa operazione,
non appena l’IFD riceve l’ultimo
byte della zona di memoria che ci
interessa, può generare una condizione di Break. Tale condizione si
verifica portando a livello alto la
linea RST mentre la linea CLK è a
livello basso.
STANCHI DI GIOCARE?
Cosa contiene il prossimo articolo
Nel successivo articolo, scopriremo
l’altra tipologia di smartcard, cioè le
carte a microprocessore. Anche
queste carte sono molto diffuse,
pure a livello hobbistico, e permettono di raggiungere un grado di
sicurezza ed una capacità di elaborazione impossibile rispetto alle
smartcard a memoria.
Naturalmente sono rivolte a sistemi
più complessi e delicati.
BIBLIOGRAFIA
• Home page Microchip, sezione memorie seriali I2C (in inglese):
www.microchip.com
• Home page I2C di Philips Semiconductor (in inglese):
www.semiconductors.philips.com/buses/i2c/index.html
• Smartcard a memoria della Gemplus (in inglese):
www.gemplus.com/products/card_memo.html
• Home page Infineon, sezione Product → Security + Chip Card ICs (in inglese):
www.infineon.com
• Alcuni distributori smartcard SLE4442 (l’elenco è sicuramente incompleto):
• www.vimascard.com
• www.smartcardsupply.com
• www.didya.com
• www.epm.it
• www.futuranet.it
• www.finim.com (prezzi un po’ esagerati)
• shop.blutronics.com
• www.pikappa.com
MODUGNO-impaginato
28-06-2004
18:02
Pagina 38
TUTORIAL
SMARTCARD
terza parte
SMARTCARD
A MICROPROCESSORE
di Giuseppe Modugno
[email protected]
Dopo aver discusso, nel precedente articolo, delle smartcard a memoria, in questa terza
parte del tutorial approfondiamo le smartcard a microprocessore: cosa sono, in cosa si
differenziano dalle smartcard a memoria, quali sono i loro vantaggi, dove vengono usate.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti negli articoli
precedenti
Il primo articolo ha introdotto il termine smartcard, ha fatto una panoramica sulle maggiori applicazioni che
le utilizzano e le ha classificate in base
alle loro caratteristiche interne e in
base alla modalità d’utilizzo. Un
accenno agli standard internazionali
di riferimento (ISO7816) conclude la
prima parte.
Nel secondo articolo si può trovare
una descrizione dettagliata sulle
smartcard a memoria libera e protetta, con un maggiore approfondimento sulle carte basate sul diffusissimo
chip SLE4442.
In questo articolo verranno trattate le
altre smartcard esistenti sul mercato,
definite smartcard a microprocessore.
Cosa sono le smartcard a microprocessore
A differenza delle smartcard a memoria, in quelle a microprocessore sono
presenti diversi integrati complessi tra
cui, il principale, è un microprocessore dedicato oppure di tipo generico.
Nelle prime, una memoria EEPROM e
della semplice logica digitale di
38 TUTORIAL
autenticazione rappresenta l’intero
contenuto della smartcard, quindi
molto semplice da realizzare e gestire.
Le smartcard a microprocessore, invece, sono sistemi elettronici sicuramente più complessi, poiché contengono internamente un vero e proprio
microprocessore.
Naturalmente, oltre a questo integrato, di per sé già complesso, sono presenti delle memorie volatili (RAM) e
non volatili (EPROM, EEPROM, Flash)
che permettono di gestire i dati
durante l’elaborazione e conservarli
durante il trasporto. Se nelle smartcard a memoria l’intelligenza del sistema è tutta spostata da un lato, e cioè
nel dispositivo di interfacciamento
(lettore) o nel sistema di gestione della
carta, comunque esterna alla smartcard, in quelle a microprocessore l’intelligenza e la potenza di calcolo è
presente anche, ed in alcuni casi completamente, all’interno della carta
stessa. Ciò porta a numerosi vantaggi
impossibili da raggiungere con una
semplice smartcard a memoria.
La maggiore potenza di calcolo permette di implementare all’interno
della carta degli algoritmi di crittografia avanzati a chiave simmetrica o,
come maggiormente accade, a chia-
ve asimmetrica. Ciò rende la comunicazione tra carta e sistema d’identificazione decisamente più sicura nei
confronti di tentativi di intrusione da
parte di pirati informatici. Solo per
giustificare tale affermazione, rivolgiamo la nostra attenzione alle più semplici smartcard a memoria protetta
SLE4442, di cui abbiamo ampiamente parlato nel precedente articolo.
Com’è stato detto, queste smartcard
hanno un codice segreto a tre byte,
denominato PSC, che ha la stessa
funzione di un PIN per le sole operazioni di scrittura. In parole semplici, la
logica di sicurezza interna alla carta
blocca qualsiasi operazione di scrittura se non è stato precedentemente
inserito il PSC. Per fare ciò, è necessario inviare alla carta tre comandi
COMPARE VERIFICATION DATA e, per
ognuno di questi, specificare chiaramente un byte del PSC.
Senza ricorrere a conoscenze elevate
di intrusione in sistemi di autenticazione e senza spendere milioni di
euro in macchinari sofisticati, è possibile “spiare” il corretto PSC che transita in chiaro tra il lettore di smartcard
e la carta stessa.
Basterebbe un dispositivo che legga
continuamente lo stato della linea I/O
MODUGNO-impaginato
28-06-2004
18:02
Pagina 39
TUTORIAL
e, individuati i comandi COMPARE
VERIFICATION DATA, legga e memorizzi i byte relativi che, appunto, rappresentano il PSC in chiaro. Il punto
debole di questo sistema sta nel canale di comunicazione smartcard-lettore che, almeno in alcuni casi, è insicuro: in canali di comunicazione insicuri non devono transitare in chiaro dati
sensibili, come il PSC, poiché potrebbero essere catturati per scopi fraudolenti. In sistemi di autenticazione
basati su smartcard a microprocessore, è possibile trasmettere i dati sensibili in forma criptata che la smartcard
decodifica mediante una operazione
di elaborazione ed un algoritmo di
decifrazione eseguito dal microprocessore stesso. Questa misura di sicurezza non può essere utilizzata in
semplici smartcard a memoria, seppur protetta, come le SLE4442, poiché manca la potenza di calcolo per
l’esecuzione dell’algoritmo. Due
applicazioni molto importanti di questa tecnica sono la rete di telefonia
cellulare GSM e la televisione digitale
satellitare a pagamento, sistemi in cui
sono ampiamente utilizzate smartcard a microprocessore per l’autenticazione dell’utente e per la gestione
dei diritti di utilizzo o di visione.
Oltre ai vantaggi relativi alla sicurezza
delle informazioni contenute nella
smartcard, la presenza di un microprocessore aumenta notevolmente la
flessibilità della carta.
Per esempio, è possibile creare delle
smartcard multiapplicazione utilizzate, cioè, in diverse applicazioni che
possono essere la telefonia cellulare,
l’acquisto mediante traffico prepagato, la richiesta di certificati nella pubblica amministrazione, tutte presenti
all’interno di un’unica carta. In questo
modo, il microprocessore può gestire
contemporaneamente più dati ed
applicazioni, fornendo a ciascuna di
queste l’elaborazione necessaria per
portarle a termine, oltre alla gestione
della memoria sufficiente per la conservazione dei dati. In smartcard di
questo tipo, è possibile creare o eliminare “al volo” alcune applicazioni
personalizzate e, quindi, abilitare la
scheda a certe operazioni oppure ad
altre. Per esempio, in un futuro non
molto lontano, potrebbe essere possibile ricevere dal comune di residenza
una carta d’identità elettronica, equivalente a tutti gli effetti alla carta d’identità cartacea ed utilizzabile in tutti
i contesti in cui è utilizzata quest’ultima e, successivamente, portarla alla
motorizzazione per abilitarla a “funzionare” anche come patente di
guida. In questo modo, con un unico
supporto facilmente trasportabile,
sarà possibile richiedere automaticamente il proprio stato di famiglia dall’ufficio anagrafe e comprovare il titolo di “guidatori autorizzati” ad un
controllo dei carabinieri su strada.
Naturalmente, per utilizzare questa
carta è necessario che il sistema riconosca nel portatore il legittimo proprietario, per esempio mediante la
digitazione di un codice PIN segreto
oppure mediante l’analisi di fattori
biometrici, quali le impronte digitali
o, magari, mediante entrambe le
soluzioni.
Inizialmente sono nate delle smartcard che utilizzavano dei semplici
microprocessori generici, cioè non
progettati per l’integrazione in ICcard. Successivamente, le esigenze
di elaborazione e memorizzazione si
sono così evolute da portare molti
produttori di chip a realizzare dei
microprocessori dedicati ad applicazioni per smartcard. In quest’ambito, particolarmente attivi sono
Atmel, STMicroelectronics, Philips,
Siemens, Infineon e tanti altri nomi
di minor calibro.
Come al solito, gli standard di riferimento per le smartcard a microprocessore, così come per le smartcard a
memoria, sono quelli denominati
ISO7816, in cui vengono specificati i
protocolli di comunicazione, i comandi e la gestione dei dati mediante file
system dedicato. Nel seguito dell’arti-
colo, approfondiremo le smartcard a
microprocessore di tipo standard,
dopo aver fatto una panoramica sulle
smartcard a microprocessore non
standard o “quasi standard” nel prossimo paragrafo.
D’ora in poi, per brevità, il termine
smartcard farà riferimento alle smartcard a microprocessore, tranne dove
esplicitamente indicato.
LE SMARTCARD NON STANDARD
O “QUASI STANDARD”
Iniziamo la nostra panoramica sulle
smartcard a microprocessore partendo dalle meno evolute e che ho definito “non standard” o “quasi standard”. Sottolineo che questa non è
una terminologia diffusa, ma la utilizzo in questo articolo per facilitare la
comprensione.
Con smartcard non standard intendo
una smartcard che integra un microprocessore o, in molti casi, un microcontrollore di tipo generico, non progettato esclusivamente per l’utilizzo
in carte intelligenti. Una smartcard di
questo tipo è normalmente identica
ad una smartcard ISO7816 per quanto riguarda le dimensioni e la posizione dei contatti sulla superficie superiore, ma, inglobando un microprocessore general-purpose, non implementa necessariamente delle tecniche di comunicazione identiche a
quelle definite negli standard ISO.
Normalmente i contatti VCC e GND
forniscono l’alimentazione al microprocessore, CLK fornisce il clock per il
funzionamento, RST, VPP e I/O rappresentano dei pin di I/O generici del
microprocessore (GPIO, GeneralPurpose Input Output).
Esternamente, quindi, una smartcard di questo tipo non è altro che
un microprocessore che dobbiamo
alimentare tramite due contatti, a
cui dobbiamo fornire il clock di riferimento tramite un altro contatto e
con cui possiamo comunicare
mediante tre linee.
Non essendo smartcard a micropro-
TUTORIAL
39
MODUGNO-impaginato
28-06-2004
18:02
Pagina 40
TUTORIAL
cessore standard, non dovrebbero
avere un grande mercato, ma hanno
una grande diffusione nelle applicazioni hobbistiche. Cerchiamo di capire quali sono i vantaggi e gli svantaggi nell’utilizzare una di queste carte
nelle proprie applicazioni.
Innanzitutto, integrando solo un
microprocessore per scopi generici
molto diffuso sul mercato, queste
smartcard hanno un costo relativamente basso, in molti casi simile ad
una smartcard a memoria. Oltre al
costo, un altro vantaggio è sicuramente la più facile reperibilità, anche
per piccole quantità. In applicazioni
dove il costo, piuttosto che lo standard utilizzato, è di fondamentale
importanza e, magari, dove i numeri
in gioco non sono elevati, può fare
molto comodo una smartcard di questo tipo. Naturalmente sarà necessario
scrivere un programma (firmware) per
tale microcontrollore ed avere la strumentazione necessaria per scaricarlo
nella sua memoria (normalmente, per
questo scopo, si utilizza un programmatore realizzato appositamente per il
microcontrollore utilizzato).
Com’è facile intuire, a fronte di questi
vantaggi, ci sono numerosi svantaggi
da prendere in debita considerazione,
tutti quanti derivati dal fatto che tali
smartcard non seguono gli standard
internazionali di riferimento. Quindi
questo vuol dire che, molto probabilmente, non potrò utilizzare un lettore
standard di smartcard, ma dovrò realizzarne uno personalizzato, il che
può richiedere, oltre a tempi di progettazione e realizzazione inadeguati
con la mia applicazione, dei costi
notevoli. Si pensi ad un sistema in cui
i punti di utilizzo delle smartcard
siano tanti (una catena di supermercati con tante casse in ognuna delle
quali l’operatore può gestire la “carta
fedeltà” del cliente di turno). Posso
anche decidere di utilizzare una soluzione non standard comprando, a
poco prezzo delle smartcard di questo tipo, ma devo anche realizzare
40 TUTORIAL
tanti lettori personalizzati di tali carte
piuttosto che comprare, a basso
costo, dei lettori universali. Inoltre, se
in futuro volessi cambiare il tipo di
carta per un qualsiasi motivo (capacità
di memorizzazione, reperibilità, costi,
ecc.) molto probabilmente dovrò
affrontare il costo della sostituzione di
tutti i lettori nel mio sistema o, quantomeno, la loro riprogrammazione.
Poiché il microcontrollore può essere
programmato in qualsiasi modo per
utilizzare i tre pin generici (RST, I/O,
VPP) è anche possibile “mimare” il
comportamento di una smartcard
standard soprattutto in termini di
protocollo, in modo tale che all’esterno possa apparire una vera e propria
smartcard standard. Il vantaggio di
questo metodo è che, almeno in alcuni casi, è possibile utilizzare i lettori di
smartcard standard che funzioneranno senza problemi, credendo di dialogare con una smartcard standard a
tutti gli effetti. Naturalmente la emulazione di una smartcard standard difficilmente è completa e, comunque,
potrebbe creare problemi in alcune
situazioni, da valutare caso per caso.
Sono queste le smartcard che ho definito “quasi standard”. La maggiore
“applicazione” di questa tecnica è,
purtroppo, la pirateria satellitare dove
una carta, basata su un microcontrollore generico, viene programmata in
modo che emuli, per quanto possibile, una smartcard originale, soprattutto per quello che riguarda il protocollo di comunicazione ed i dati scambiati relativi ai diritti di visione.
Le smartcard basate sui PIC
Le più diffuse smartcard di questo
tipo sono quelle che integrano uno
dei diffusissimi microcontrollori della
Microchip, i cosiddetti PIC.
È molto facile trovare, nei negozi di
elettronica e nelle fiere, carte che contengono PIC16F84, PIC16F628,
PIC16F876 e PIC16F877. Sono tutti
microcontrollori dotati di una Flash
utilizzata per la memorizzazione del
firmware (il PIC16F84 ha una Flash di
1024 istruzioni, il 16F628 di 2048, il
16F876 e il 16F877 di 8192 istruzioni). Le caratteristiche sono molto
simili tra loro, soprattutto se integrati
in una smartcard, e la scelta deve
essere fatta considerando soprattutto
la quantità di memoria programma
necessaria al nostro firmware. A differenza di altri microcontrollori di altri
produttori, questi PIC contengono
un’area di memoria Flash distinta,
dedicata solo alla conservazione del
programma, quella di cui abbiamo
appena parlato ed una EEPROM per
la memorizzazione dei dati dell’applicazione in modo non volatile (conservati, cioè, anche ad alimentazione
Figura 1: Schema di interconnessione tra il PIC, la EEPROM ed i contatti ISO7816 in una goldcard
MODUGNO-impaginato
28-06-2004
18:02
Pagina 41
TUTORIAL
assente). Il PIC16F84 ed il 16F628
hanno una EEPROM di 64 byte, mentre i PIC16F876 e 16F877 hanno una
EEPROM di 256 byte. Si può ben
comprendere come tali quantità
sono, oggigiorno, troppo limitanti: in
molti casi, anche un semplice numero di serie o una chiave crittografica
può occupare 64 byte, senza considerare i dati necessari all’applicazione, normalmente personalizzabili dall’utente o dal gestore della carta. Per
questo motivo, la maggior parte delle
smartcard basate su PIC, oltre a contenere un microcontrollore, integrano anche una EEPROM seriale I2C del
tipo 24LCxx, prodotta sempre dalla
Microchip. Le interconnessioni tra il
microcontrollore e la EEPROM esterna
sono effettuate nella smartcard dal
produttore che si preoccupa di integrare i chip sotto i contatti ISO7816.
Il programmatore del firmware,
conoscendo l’interconnessione interna tra PIC ed EEPROM esterna, può
scrivere il codice in modo da sfruttare
la capacità di questa memoria addizionale, normalmente utilizzata per la
conservazione dei dati dell’utente e/o
dell’applicazione.
Sul mercato, queste smartcard hanno
dei nomi non ufficiali ma accettati
dalla comunità degli utilizzatori: ad
ogni tipo è associato un colore diverso. La goldcard (carta d’oro) contiene
un PIC16F84 ed una EEPROM
24LC16 da 2KB. La canarycard (carta
giallo-canarino)
contiene
un
PIC16F628 ed una EEPROM 24LC16.
La silvercard (carta d’argento) contiene un PIC16F877 ed una EEPROM
24LC64 da 8KB. La greencard (carta
verde) contiene un PIC16F877 ed
una EEPROM 24LC128 da 16KB.
Poiché i nomi non sono standard, è
possibile che in alcuni casi si utilizzino
in modo diverso, soprattutto per
quello che riguarda la capacità della
EEPROM che può variare. Purtroppo
non è semplice capire, avendo una
smartcard di questo tipo, quali sono
gli integrati che si trovano internamente, soprattutto per quello che
riguarda la capacità della EEPROM,
che in alcuni casi può anche essere
assente. È bene verificare con il venditore la composizione delle smartcard
che stiamo acquistando.
In figura 1 è mostrato lo schema di
interconnessione tra il PIC16F84, la
EEPROM 24LC16 e i contatti ISO7816
della smartcard, in una goldcard,
mentre nella Tabella 1 sono descritti i
vari collegamenti.
Come si può notare, l’alimentazione
positiva Vcc viene collegata al pin di
alimentazione del microcontrollore e
della EEPROM, così come la massa
Vss. Inoltre, il pin WP (Write Protect)
della EEPROM viene messo a livello
zero per abilitare la scrittura. Anche i
pin A0, A1 e A2 della EEPROM sono
posti a zero logico, impostando così
un indirizzo I2C pari ad A0 (1010
0000) nelle operazioni di scrittura e
A1 (1010 0001) nelle operazioni di
lettura. Il pin RST è collegato diretta-
ISO7816
16F84
24LC16
1 (Vcc)
14 (Vcc)
8 (Vcc)
2 (RST)
4 (MCLR)
3 (CLK)
12 (RB6), 16 (CLKIN)
5 (Vss)
5 (Vss)
7 (I/O)
13 (RB7)
1 (A0), 2 (A1), 3 (A2), 4 (Vss), 7 (WP)
11 (RB5)
6 (SCL)
10 (RB4)
5 (SDA)
Tabella 1: Dettaglio delle interconnessioni in una goldcard.
mente all’MCLR del microcontrollore,
in modo che funzioni come un
segnale di reset (il PIC 16F84 viene
messo nello stato di reset se il suo pin
MCLR viene posto a livello basso): in
questo modo, il lettore di smartcard
può generare una condizione di reset
del microcontrollore, e quindi di tutta
la smartcard, ponendo il segnale RST
a livello basso e riportandolo a livello
alto. Il pin di I/O è collegato ad un
GPIO del 16F84, cioè l’RB7. Il segnale
CLK è collegato al pin CLKIN del
microcontrollore, cioè al pin d’ingresso utilizzato come segnale di clock.
Esso è anche collegato al GPIO RB6
del microcontrollore.
Il motivo per cui CLK è collegato
anche ad RB6 ed il pin I/O proprio al
pin RB7 deriva dalla necessità di poter
programmare il microcontrollore utilizzando i soli pin accessibili dalla
smartcard, e cioè i pin ISO7816.
Come molti sapranno, i PIC hanno
una modalità di programmazione
seriale che prevede l’utilizzo, tra gli
altri, dei due pin RB6 ed RB7. Il primo,
durante la fase di programmazione,
viene utilizzato come segnale di
clock, mentre il secondo come segnale dei dati. Tali pin sono accessibili
all’esterno mediante i contatti CLK e
I/O della smartcard e ciò rende possibile la programmazione del microcontrollore mediante un apposito
programmatore di PIC dotato di connettore per smartcard ISO7816. Ecco
perché, come pin di I/O, è stato scelto proprio il pin RB7 del 16F84 e perché il segnale CLK è collegato anche
al pin RB6 dello stesso microcontrollore. In caso contrario, non sarebbe
stato possibile programmare dall’esterno il PIC, rendendo completamente inutile la smardcard.
Infine, il collegamento tra EEPROM
seriale e microcontrollore avviene tramite il bus I2C, composto da due sole
linee denominate SCL (clock) e SDA
(dati). I pin SCL ed SDA della
EEPROM sono collegati rispettivamente ai pin RB5 e RB4 del micro-
TUTORIAL
41
MODUGNO-impaginato
28-06-2004
18:02
Pagina 42
TUTORIAL
Figura 2: Lato rame in scala 1:1 di una wafercard basata su PIC16F84 e 24LC16
Figura 3: Piano di montaggio della wafercard
controllore. Anche questa non è una
scelta casuale in quanto, per poter
funzionare correttamente, il bus I2C
prevede l’utilizzo di due resistenze di
pull-up su ogni linea. La porta B del
PIC16F84, di cui fanno parte i due pin
RB4 ed RB5, ha delle resistenze di
pull-up che è possibile abilitare trami-
Figura 4: Wafercard con gli integrati PIC16F84
e 24LC16 montati
42 TUTORIAL
te software (basta mettere a 0 il pin
RBPU del registro OPTION_REG).
Faccio notare che tali pull-up sono
per default disabilitati sulla porta B,
quindi è necessario abilitarli prima di
poter utilizzare la EEPROM esterna.
La filosofia delle altre smartcard basate sui PIC (canarycard, silvercard,
greencard e tante altre dai nomi più
strani) rimane la stessa. Quello che
cambia è il tipo di PIC integrato e la
quantità di memoria EEPROM esterna
al microcontrollore disponibile.
Le smartcard basate sui microcontrollori ATMEL
I microcontrollori della Microchip
sono molto diffusi ed economici ed
anche le smartcard basate su questi
integrati hanno subito la stessa sorte
sul mercato.
Esistono però altre smartcard non
standard basate sul microcontrollore
della ATMEL AT90S8515 ed una
EEPROM 24LC64. Generalmente
queste smartcard sono identificate
dal nome funcard. Questo microcontrollore è basato sull’architettura consolidata AVR della ATMEL. L’integrato
AT90S8515 è dotato di 8 KB di
memoria Flash e 512 byte di EEPROM
e può essere pilotato con una frequenza di clock fino ad 8 MHz (esistono due versioni di questo chip,
una con limite superiore pari a 4 MHz
ed un’altra fino ad 8 MHz).
Attualmente è un prodotto sconsigliato dalla ATMEL per nuovi progetti, poiché sostituito con altri microcontrollori più recenti della serie
ATmega. Così come per i PIC, anche
questo integrato si è molto diffuso tra
gli hobbisti per la facile reperibilità, il
basso costo e soprattutto per la possibilità di costruire facilmente un programmatore.
Le smartcard fatte in casa
Non possiamo chiudere la nostra
panoramica sulle smartcard “non
standard” ignorando la possibilità di
costruire delle carte in casa. Nella
maggior parte dei casi, una smartcard
viene inserita in un apposito dispositivo di interfacciamento, sporgendo
leggermente dalla fessura (in altri
casi, invece, la smartcard viene “risucchiata” completamente dal dispositivo per essere, alla fine delle operazioni, restituita all’utente). Questo vuol
dire che è possibile utilizzare delle
smartcard di uguale spessore e larghezza, ma più lunghe, a patto che i
contatti ISO7816 siano sempre nella
stessa posizione. È possibile, quindi,
realizzare un circuito stampato su una
basetta delle stesse dimensioni di una
smartcard standard ma, appunto, più
lunga, in modo da poter montare
degli integrati (come un microcontrollore o una memoria) che rimarranno all’esterno del lettore.
Naturalmente, dovremo utilizzare
una basetta da 0.8mm per avere uno
spessore simile a quello di una smart-
MODUGNO-impaginato
28-06-2004
18:02
Pagina 43
TUTORIAL
card standard. I contatti ISO7816,
formati da piazzole di sufficiente
dimensione e opportuna posizione,
saranno collegati ai pin degli integrati che si troveranno dall’altro lato
della smartcard, nello spazio che
sporgerà dal lettore. In questo modo,
potremo realizzare, per esempio, una
simil-goldcard (come quella schematizzata in figura 1) che funzionerà allo
stesso modo, con l’unica differenza
dovuta alle dimensioni ed all’estetica.
È ovvio che una smartcard di questo
tipo non è assolutamente standard, è
più scomoda da trasportare e può
essere utilizzata solo con i dispositivi
di lettura che non “ingoiano” completamente la carta. Utilizzando degli
zoccoli, sarà possibile programmare
gli integrati estraendoli dalla smartcard e reinserirli successivamente già
programmati. In questo modo, non è
più necessario programmare il microcontrollore in-circuit e, quindi, le connessioni in Tabella 1 possono essere
modificate a piacimento (a parte i pin
di alimentazione). Nella maggior
parte dei casi, però, le connessioni
rimangono le stesse di quelle delle
versioni plastificate per mantenere la
compatibilità tra i firmware dei microcontrollori.
Spesso, queste carte fatte in casa, che
difficilmente possono essere chiamate
smartcard per la grande differenza
che esiste con queste ultime, vengono indicate con il termine wafercard.
La figura 2 mostra il lato rame di una
goldcard su wafercard in scala 1:1
che può essere usata per la realizzazione mediante fotoincisione su una
qualsiasi basetta dello spessore di
0.8mm. In figura 3 è mostrato il semplice piano di montaggio. È possibile
trovare dei kit di montaggio di wafer
card, con il circuito stampato già realizzato: in figura 4 è mostrata una
wafercard di questo tipo con gli integrati inseriti nei relativi zoccoli.
Termino qui la discussione sulle smartcard “non standard” e “quasi stan-
dard”, passando finalmente alle smartcard a microprocessore ISO7816 a
tutti gli effetti. Con questa breve panoramica ho voluto solo informare dell’esistenza di tali carte sul mercato,
soprattutto hobbistico, ma sconsiglio
vivamente di utilizzarle in proprie
applicazioni, se non in casi eccezionali.
È sempre preferibile utilizzare uno
standard, quando esiste, soprattutto se
il mercato lo ha recepito così diffusamente come nel caso dell’ISO7816.
LE SMARTCARD STANDARD
Oltre alle caratteristiche fisiche ed
elettriche di una generica smartcard,
lo standard ISO7816, nella parte III,
specifica anche il protocollo di comunicazione tra la carta ed il mondo
esterno. Consideriamo un sistema
formato da una smartcard inserita
nell’apposito dispositivo di lettura.
Questo sistema è costituito da due
chip intelligenti, probabilmente due
microprocessori, uno integrato nella
smartcard ed uno presente nel lettore, che devono dialogare tra loro utilizzando un protocollo comune. Per
aumentare l’interoperabilità tra le
carte e i dispositivi d’interfaccia, lo
standard specifica una serie di protocolli che possono essere negoziati
durante la fase di reset ed utilizzati da
entrambe le parti. In questo modo
sarà possibile utilizzare lettori e smartcard di diversi produttori senza problemi di incompatibilità.
Il protocollo T=0
Il protocollo più semplice e maggior-
mente utilizzato è quello denominato
“T=0”. È un protocollo half-duplex
asincrono orientato al byte molto
simile allo standard RS232 utilizzato
praticamente su tutti i PC.
Esso è orientato al byte poiché il trasmettitore (la smartcard oppure il lettore) invia un singolo byte al ricevitore incapsulato in un opportuno frame
per il trasporto. Esiste anche un altro
tipo di protocollo, di cui non parleremo in questo articolo, denominato
“T=1” che è, invece, orientato a blocchi di byte.
Il protocollo T=0 è di tipo half-duplex,
cioè a domanda e risposta, poiché il
canale di comunicazione è formato
da un unico segnale, il contatto I/O
della smartcard. Per questo motivo, è
possibile trasmettere dati dalla smartcard verso il lettore oppure viceversa,
ma mai contemporaneamente.
Naturalmente questo comporta che il
pin di I/O sia bidirezionale. Questa
caratteristica differenzia il protocollo
T=0 dall’RS232 in quanto, in quest’ultima, ci sono due fili che possono
ospitare contemporaneamente trasferimenti di dati in entrambe le direzioni (full-duplex). L’hardware della
smartcard e del dispositivo di interfacciamento, dovrà essere in grado di
cambiare la direzione del pin dei dati,
cioè dovrà cambiare continuamente
da trasmettitore a ricevitore, a seconda dei dati scambiati. Ciò comporta
necessariamente un tempo di ritardo,
definito line turnaround time, tra la
domanda e la risposta, dovuto al
cambio di direzione.
Figura 5: Segnale di I/O relativo alla trasmissione di un byte nel protocollo T=0
TUTORIAL
43
MODUGNO-impaginato
28-06-2004
18:02
Pagina 44
TUTORIAL
Così come l’RS232, il protocollo T=0
è asincrono: il trasmettitore può iniziare la trasmissione di un byte in
qualsiasi momento senza dover sincronizzare questo evento con un
segnale di clock. È per questo che le
smartcard a microprocessore vengono anche chiamate comunemente
smartcard asincrone, a differenza
delle smartcard a memoria che, al
contrario, utilizzano un protocollo
sincrono (per maggiori dettagli,
vedere l’articolo precedente). Poiché
il protocollo è half-duplex e la comunicazione è asincrona, per evitare collisioni dovute alla trasmissione contemporanea dei due nodi, come
regola generale, è sempre il lettore
che inizia la trasmissione di un byte.
In funzione del protocollo utilizzato,
la smartcard risponderà ai comandi
trasmessi dal lettore. Quindi la smartcard non può mai decidere di trasferire dati al lettore autonomamente (a
parte l’ATR che si vedrà più avanti in
questo articolo).
In figura 5 è rappresentata la forma
d’onda del segnale I/O relativa alla trasmissione di un byte dalla smartcard al
dispositivo di lettura o viceversa.
Normalmente, quando non c’è alcuna trasmissione, lo stato della linea di
I/O è a livello alto (stato Z). L’invio di
un byte inizia sempre con un bit di
start S generato dal trasmettitore
imponendo un livello basso (stato A)
per un tempo di bit, definito ETU
(Elementary Time Unit).
Successivamente vengono trasmessi
gli 8 bit che formano il byte (ba, bb,
bc, bd, be, bf, bg, bh), seguiti dal bit
di parità P, ognuno dei quali dura
sempre un ETU. Il bit di parità viene
calcolato in modo tale che il numero
di bit ad 1 sia pari. Dopo il bit di parità, il trasmettitore mette il bit di I/O in
ricezione, rilasciando la linea nuovamente nello stato Z. Nessun ulteriore
invio di dati può avvenire per un
tempo di guardia (guard time) pari
almeno a 2 ETU. La distanza tempo-
44 TUTORIAL
rale tra un byte ed il successivo sarà,
quindi, di almeno di 12 ETU.
Ma quanto vale questa unità di
tempo chiamata ETU? Essa dipende
lineramente dalla frequenza di clock
che il dispositivo di interfacciamento
genera ed invia alla smartcard. La
relazione matematica è 1 ETU =
372/fi dove fi è la frequenza di clock.
Utilizzando il diffusissimo quarzo
3,579545MHz è possibile ottenere un
tempo di bit pari a circa 1/9600s, cioè
la trasmissione di 9600 bit ogni
secondo. È comunque possibile utilizzare delle frequenze di clock diverse,
con una conseguente diminuzione o
aumento della velocità di trasmissione: il limite inferiore della frequenza
di clock è pari ad 1MHz, mentre il
limite superiore è pari a 5MHz.
Cosa succede se il ricevitore si accorge di un errore di parità, cioè conta
un numero di bit ad 1 dispari?
Durante il tempo di guardia, esso può
mettere a livello basso la linea di I/O
per comunicare al trasmettitore, che
durante il tempo di guardia legge lo
stato della linea, che c’è stato un errore di trasmissione sull’ultimo byte trasmesso. In questo caso, il trasmettitore dovrà ritrasmettere lo stesso byte.
Il controllo d’errore sul bit di parità è
obbligatorio per le smartcard, mentre
il lettore può anche ignorare tale bit.
C’è da dire, comunque, che il canale
di comunicazione tra smartcard e dispositivo d’interfacciamento è sufficientemente stabile e disturbi o errori
di trasmissione sono veramente rari.
Reset
Come è stato già detto nel precedente articolo a proposito delle smartcard
a memoria, anche per le smartcard a
microprocessore, esiste una condizione di reset e una risposta al reset. La
condizione di reset deve essere sempre generata dal dispositivo di interfacciamento prima di iniziare qualsiasi comunicazione con la carta.
Esistono smartcard che hanno un
reset attivo a livello basso (active-low
reset smartcard) ed altre che hanno
un reset attivo alto (active-high reset
smartcard). Dopo aver alimentato la
smartcard e fornito un clock stabile, il
lettore aspetta una risposta dalla carta
mantenendo RST a livello basso. Se la
carta non risponde entro un periodo
di tempo (40000 cicli di clock), il
segnale RST viene posto a livello alto
ed il lettore rimane nuovamente in
ascolto. Se anche in questo caso la
smartcard non risponde, c’è sicuramente qualche problema di interfacciamento, oppure la carta non è valida ed il lettore può rifiutare la transazione.
Answer To Reset
Tutti i byte trasmessi dalla smartcard
in risposta al reset formano l’ATR
(Answer To Reset). Esso è formato da
un byte di sincronismo TS seguito da
non più di 32 byte, come si può
osservare schematicamente nella
figura 6.
Il primo byte TS è detto byte di sincronismo ed è fondamentale per una
corretta comunicazione tra lettore e
smartcard. Il lettore attento si sarà
accorto che in figura 5 non è specificata la relazione tra i bit del dato ed i
bit effettivamente trasmessi. Questa
relazione è indicata proprio nel primo
Figura 6: Struttura dell’ATR di una smartcard a microprocessore standard
MODUGNO-impaginato
28-06-2004
18:02
Pagina 45
TUTORIAL
Figura 7: Le due convenzioni possibili del byte di sincronismo TS
byte dell’ATR che può seguire due differenti convenzioni, come mostrato
in figura 7. Nella convenzione diretta,
il livello alto rappresenta un bit pari
ad 1, il livello basso un bit pari a 0.
Inoltre, il byte viene trasmesso a partire dal bit meno significativo (LSB).
Per questo motivo, il byte TS in convenzione diretta ha il valore esadecimale pari a 3B (0011 1011).
Nella convenzione inversa, invece, i
livelli sono invertiti (il livello alto corrisponde al bit 0 ed il livello basso al bit
1) e la trasmissione del byte avviene a
partire dal bit più significativo (MSB).
In questo caso, il valore esadecimale
di TS è 3F (0011 1111).
La convenzione utilizzata nel byte TS
viene seguita da tutti gli altri byte
dell’ATR e delle successive trasmissioni. Il dispositivo di interfacciamento
dovrà, quindi, riconoscere “al volo” la
convenzione utilizzata dalla smartcard, guardando il byte di sincronismo dell’ATR ed interpretare di conseguenza tutti i byte successivi ricevuti dalla smartcard. Anche i byte trasmessi dal lettore dovranno seguire la
stessa convenzione.
Il byte di sincronismo è seguito dal
byte obbligatorio T0, denominato
byte di formato. Esso indica la composizione dei successivi byte dell’ATR.
Il nibble (4 bit) meno significativo di
T0 indica il numero K, compreso tra 0
e 15, dei byte storici T1, T2… TK.
Ogni bit del nibble più significativo di
T0 indica la presenza o meno dei byte
di interfaccia TA1, TB1, TC1, TD1, trasmessi subito dopo T0: se un bit è 1,
il byte relativo è presente. Per esempio, se T0=37 (0011 0111) ci saranno
7 (0111) byte storici ed i byte d’interfaccia TA1 e TB1, mentre saranno
assenti i byte TC1 e TD1. Dopo questi byte possono essere presenti altri
byte di interfaccia: TA2, TB2, TC2,
TD2, TA3, TB3, TC3, TD3… ecc. Il
nibble più significativo di TDi indica la
presenza o meno del successivo quartetto di byte TAi+1, TBi+1, TCi+1,
TDi+1, così come il nibble più significativo di T0 indicava la presenza o
meno del quartetto di byte TA1, TB1,
TC1 e TD1. Se TDi è assente, saranno
assenti anche i successivi byte d’interfaccia. Non entriamo nei dettagli del
significato dei vari byte di interfaccia
anche perché, molto spesso, sono
codificate delle informazioni importanti solo in fase di inizializzazione
della smartcard oppure per utilizzare
dei protocolli più evoluti e con velocità più elevate rispetto al semplice protocollo T=0. Importante è il byte TD1
che indica, oltre alla presenza dei byte
TA2, TB2, TC2 e TD2 nel nibble più
significativo, il protocollo utilizzato
dalla smartcard nel nibble meno
significativo. Tale numero, indicato
comunemente con il simbolo T, può
avere diversi valore. Nel caso T=0, il
protocollo utilizzato dalla smartcard è
proprio quello spiegato in questo articolo. È anche possibile che in una
smartcard siano implementati diversi
protocolli con diverse velocità, informazioni codificate sempre nei byte
d’interfaccia dell’ATR. Il lettore potrà,
quindi, scegliere, mediante opportuni
comandi, di utilizzare uno qualsiasi di
questi protocolli.
Successivamente ai byte di interfaccia
sono trasmessi i byte storici. Il nume-
ro dei byte storici è variabile, ma è
specificato nel byte T0, come visto
precedentemente. Il significato dei
byte storici non è indicato nello standard cha lascia completa libertà al
costruttore della carta sulla codifica di
questi byte. Per esempio, potrebbero
essere usati per codificare un numero
di versione del firmware della smartcard oppure un numero di serie o
altre informazioni ancora.
L’ultimo byte TCK è utilizzato come
controllo di integrità dell’intero ATR.
Viene calcolato in modo tale che il
risultato dell’operazione booleana
XOR di tutti i byte dell’ATR, compreso il TCK, sia zero. Esso è sempre trasmesso, tranne nel protocollo T=0.
Per fare chiarezza sul formato, consideriamo un esempio di ATR ottenuto
da una SIM di un operatore telefonico olandese. Esso è 3B 85 00 87 25
01 39 00.
Il byte di sincronismo TS=3B indica
l’utilizzo della convenzione diretta.
Il byte di formato T0=85 (1000 0101)
indica la presenza del byte di interfaccia TD1 (nibble più significativo
1000) e 5 byte storici (nibble meno
significativo 0101).
Il byte di interfaccia TD1=00 indica
l’utilizzo del protocollo T=0 (nibble
meno significativo 0000) e l’assenza
degli ulteriori byte di interfaccia TA2,
TB2, TC2 e TD2 (nibble più significativo 0000).
Seguono i byte storici T1=87 T2=25
T3=01 T4=39 T5=00 che non hanno
alcun significato a livello di protocollo, ma sono usati dal gestore della
scheda per scopi specifici.
Poiché il protocollo utilizzato è T=0, è
TUTORIAL
45
MODUGNO-impaginato
28-06-2004
18:02
Pagina 46
TUTORIAL
assente il byte di controllo TCK.
Comandi
Dopo aver ottenuto un ATR corretto
dalla smartcard, il dispositivo di interfacciamento può procedere con l’invio
dei comandi (lettura, scrittura, ecc). Il
protocollo T=0 prevede l’utilizzo di
messaggi tra lettore e smartcard.
Come si è già avuto modo di dire, solo
il lettore può iniziare una comunicazione con la smartcard mediante la trasmissione di una intestazione di 5 byte
(CLA INS P1 P2 LEN). Il primo byte
CLA rappresenta la classe del comando, il byte INS il tipo di istruzione.
Normalmente il byte di classe rappresenta l’applicazione presente nella
smartcard e il byte INS il tipo di
comando. Nelle smartcard monoapplicazione, come la maggior parte
delle carte in circolazione, il byte CLA
ha sempre un determinato valore (per
esempio, nel caso delle SIM del sistema GSM, CLA=A0). I byte P1 e P2 rappresentano dei parametri che dipendono dal comando (per esempio, indirizzi di memoria o dati da scrivere). Il
byte LEN rappresenta la lunghezza dei
dati da trasferire. La direzione del trasferimento (da smartcard a lettore o
viceversa) è implicita nel tipo di
comando e ciò comporta che sia il lettore che la smartcard conoscano tutte
le possibili istruzioni e le direzioni di
trasferimento associate. Se LEN è
uguale a zero, il numero di byte scambiati è nullo nel caso la direzione del
trasferimento sia dal lettore alla smartcard; il numero di byte trasferiti dalla
smartcard al lettore è invece 256 se
LEN=0.
Dopo l’invio dell’intestazione di 5 byte
da parte del dispositivo di interfaccia,
la smartcard risponde con un procedure byte. Per mezzo di questo byte, il
dispositivo controlla la tensione di programmazione Vpp della EPROM integrata nella carta. In molte smartcard
odierne la tensione di programmazione non è usata a livello utente e il procedure byte è ridondante. Molto spesso la smartcard risponde con un procedure byte uguale al byte INS dell’intestazione del comando.
Successivamente avviene il trasferimento dei dati dalla smartcard oppure
dal dispositivo di lettura. Alla fine del
trasferimento, la smartcard risponde
con una parola di stato (status word),
formata dai due byte SW1 e SW2, che
indica l’esito positivo o negativo dell’elaborazione fornendo, in alcuni casi,
dettagli sull’eventuale problema. Nel
caso di risultato positivo, i due byte valgono rispettivamente, in esadecimale,
90 (1001 0000) 00 (0000 0000).
In figura 8 è schematizzato l’invio di un
comando completo nel caso di trasferimento dati dal dispositivo di lettura
alla smartcard e viceversa.
Lo standard ISO7816 (parti 1, 2 e 3)
specifica solo come incapsulare i dati
da trasferire nei comandi appena
descritti, ma non dice nulla sul significato di questi dati. È compito del pro-
grammatore di smartcard dare un
significato ai dati trasferiti che possono
indicare dei dati anagrafici dell’utilizzatore, numeri di serie, crediti, ecc.
Ancor di più è compito del programmatore organizzare i dati nella smartcard e accedere con opportuni
comandi. Sistemi che rispondono a
questi standard non sono definitivamente interoperabili, poiché i dati che
vengono scambiati dipendono dall’applicazione e da come è stata progettata. Per questo motivo è stato proposto
un nuovo standard, ISO7816 parte 4,
che definisce uno strato software
comune di gestione dei file (informazioni) memorizzati nella smartcard.
Rimando ad uno dei prossimi articoli,
sulla gestione delle SIM GSM, per
maggiori dettagli su questo tipo di
gestione.
STANCHI DI GIOCARE?
Cosa ci aspetta nel prossimo
articolo
Dopo aver illustrato tutti i concetti più
importanti sulle smartcard a memoria
ed a microprocessore, nel prossimo
articolo sarà presentato un progetto di
un lettore universale di smartcard
basato su PIC16F628. Mediante questo dispositivo è possibile, programmando opportunamente il PIC, gestire
un qualsiasi tipo di smartcard, sia in
modalità stand-alone che collegato ad
un PC tramite seriale. Per maggiori
dettagli, rimando ad uno dei prossim
articoli sulla gestione di una SIM GSM.
BIBLIOGRAFIA E LINK
Figura 8: Invio di un comando ad una smartcard a microprocessore standard con
trasferimento dati da lettore (a sinistra) e da smartcard (a destra)
46 TUTORIAL
• Standard di riferimento (in inglese e a pagamento):
www.iso.ch
• Estratto dello standard ISO7816 parti 1, 2, 3 (in inglese):
http://www.gsm-hacking.dk/papers/iso7816.txt
• Estratto dello standard ISO7816 parte 4 (in inglese):
http://www.cardwerk.com/smartcards/smartcard_standard_ISO7816-4.aspx
• Microchip (in inglese):
www.microchip.com
• ATMEL (in inglese):
www.atmel.com
MODUGNO-impaginato
20-07-2004
16:37
Pagina 48
TUTORIAL
SMARTCARD
quarta parte
UNIREADER: PROGETTO
DI UN LETTORE
DI SMARTCARD
di Giuseppe Modugno
[email protected]
In questo quarto articolo del nostro tutorial, verrà progettato un lettore
universale di smartcard compatibile sia con le carte a memoria, come le
SLE4442, sia con quelle a microprocessore, come le SIM dei cellulari GSM.
Il cuore di UniReader è un microcontrollore PIC 16F628 che permette di utilizzare
il lettore sia in connessione con un PC, sia in modalità standalone.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti negli
articoli precedenti
Prima di poter affrontare la progettazione e la realizzazione di
un lettore di smartcard, è necessario conoscere in dettaglio questi oggetti in tutti i loro aspetti.
Per questo motivo, potete trovare, nei precedenti articoli, una
trattazione teorica sulle smartcard che indaga sulle varie tipologie e ne discute i campi di utilizzo attuali e futuri. Inoltre,
potete trovare un articolo sulle
smartcard a memoria ed uno
sulle smartcard a microprocessore, i due tipi in cui si classificano
48 TUTORIAL
tutte le smartcard, entrambi
compatibili con UniReader. Non
mi limiterò semplicemente a
mostrare uno schema elettrico e
il suo sbroglio con le solite istruzioni per il montaggio, ma cercherò di descrivere in dettaglio
tutte le fasi di progettazione giustificando le varie scelte. Per
comprendere al meglio il contenuto di questo articolo, consiglio al lettore di leggere anche i
precedenti articoli del tutorial.
Cos’è un lettore di smartcard
Prima di lanciarci nella progettazione, è necessario riflettere sull’oggetto che dobbiamo realizzare e che abbiamo chiamato
lettore universale di smartcard.
L’attributo universale sta ad indicare che esso deve essere compatibile sia con le smartcard a
memoria, sia con le smartcard a
microprocessore: qualunque sia
la carta in nostro possesso, il lettore dovrà essere in grado di
gestirla correttamente.
Il termine lettore, invece, è sicuramente da commentare in
modo più approfondito. Se
domandiamo ad un profano
quali compiti deve eseguire un
lettore di smartcard, sicuramente ci risponderà che deve essere
in grado di leggere i dati memorizzati nella carta e presentarli
all’utente in varia forma (per
MODUGNO-impaginato
20-07-2004
16:37
Pagina 49
TUTORIAL
esempio, su carta, su display,
ecc) oppure trasmetterli ad un
altro dispositivo elettronico (per
esempio, ad un computer). Chi
ci ha seguito con attenzione sin
dalla prima parte del tutorial,
può subito capire come questa
immagine sia alquanto riduttiva.
Infatti, un lettore di smartcard
non si limita a leggere ma effettua sulla carta una serie di altre
operazioni più o meno complesse che possono andare dalla lettura dei dati presenti sulla carta
all’autenticazione dell’utente,
dalla modifica dei dati (scrittura)
all’esecuzione di algoritmi di
cifratura complessi. Per quello
che abbiamo detto, il termine
“lettore di smartcard” appare
decisamente restrittivo. Sarebbe
meglio parlare a tal proposito di
dispositivo di interfacciamento
con la smartcard o, dall’inglese,
interface device (IFD) ma, pur
nell’imprecisione, nel seguito di
questo articolo faremo riferimento al termine lettore di
smartcard poiché più comunemente usato.
A prima vista può sembrare che
un dispositivo di questo tipo,
che può compiere diverse operazioni, anche complesse, con
una qualsiasi smartcard, sia di
difficile realizzazione, soprattutto per un hobbista. In realtà,
come vedremo nel corso dell’articolo, tutte queste operazioni si
riducono, al livello più basso, alla
trasmissione e ricezione di
comandi, formati da una successione più o meno lunga di byte
verso e dalla smartcard. Il particolare comando determina l’operazione, anche complessa,
che l’utente, tramite il lettore,
vuole far eseguire alla smartcard.
Da queste considerazioni ci si
può convincere di come un lettore sia semplicemente un dispositivo di interfaccia che converte le “volontà” dell’utente o
del sistema in opportuni comandi da trasmettere o dati da ricevere dalla smartcard, mediante
un opportuno protocollo.
PROGETTAZIONE
Ovviamente, tralasciamo la
parte che dovrebbe precedere
qualsiasi progetto e che corrisponde alla documentazione e
allo studio, poiché coincide con
i nostri precedenti articoli.
Partiamo, quindi, da una panoramica generale del nostro dispositivo, cioè da un’analisi attenta del suo schema a blocchi.
Schema a blocchi
Come abbiamo già detto, il
nostro lettore di smartcard è un
dispositivo di interfacciamento
che si preoccupa di convertire le
“volontà” dell’utente o del sistema in comandi da trasmettere e
ricevere dalla smartcard. Questo
ruolo di “intermediazione” è
facilmente comprensibile guardando lo schema in figura 1.
Da una parte c’è l’utente dell’applicazione che può essere
rappresentato dalla persona al
Bancomat oppure dal telefonino
GSM. In quest’ottica, il termine
UTENTE utilizzato in Figura 1 è
un concetto molto più allargato
rispetto alla persona fisica.
Dall’altra parte è presente la
smartcard, dove sono memorizzati i dati necessari per l’esecuzione dell’operazione (per esempio, numero di conto corrente o
crediti) oppure dove è possibile
effettuare operazioni di cifratura
per l’autenticazione al sistema
(per esempio, alla rete GSM del
nostro provider). Al centro è
presente il LETTORE di smartcard che si preoccupa di convertire il flusso di operazioni provenienti dall’UTENTE in comandi
da trasmettere alla SMARTCARD
e viceversa.
L’UTENTE può comunicare con il
lettore in entrambe le direzioni e
in diversi modi, a seconda dell’applicazione. Il lettore può
gestire il flusso in input (UTENTE
‡ LETTORE) mediante una tastiera, una connessione seriale
RS232 o USB, ecc. Allo stesso
modo, in output (LETTORE >
UTENTE) il lettore può gestire
dei led, un display LCD, una
connessione RS232 o USB, dei
relé, ecc. Se, per esempio, l’ap-
Figura 1: Il lettore come dispositivo d’interfacciamento
TUTORIAL
49
MODUGNO-impaginato
20-07-2004
16:37
Pagina 50
TUTORIAL
plicazione prevede l’apertura di
un cancello all’inserimento di
una smartcard valida, utilizzeremo un relé pilotato dal lettore
che azionerà l’apricancello ad
autenticazione correttamente
avvenuta.
Per quanto riguarda il lato
SMARTCARD, l’implementazione è facilitata dal fatto che sia le
smartcard a memoria che le
smartcard a microprocessore
standard hanno lo stesso formato e la stessa disposizione dei
contatti: questo ci permette di
utilizzare un unico connettore
ISO7816 da interfacciare al lettore.
Dal lato UTENTE, invece, facciamo la scelta di implementare nel
nostro prototipo soltanto una
connessione seriale RS232 con
un eventuale PC. In questo
modo, mediante un semplice
software per computer, sarà
possibile gestire la comunicazione con il lettore in entrambe le
direzioni e, quindi, con la smartcard. Per mostrare come sia possibile far funzionare il lettore in
modalità stand-alone, è previsto
un led che può significare l’abilitazione all’utilizzazione della
risorsa nel caso di accesso consentito al titolare della smartcard.
La scelta del microcontrollore
Precisiamo subito che la presenza di un microcontrollore in un
lettore di smartcard non è
necessaria. Esistono dei semplici
lettori, chiamati generalmente
dumb (stupidi), in cui i contatti
della smartcard sono collegati ai
pin di una seriale RS232 mediante una semplice traslazione di
livello (ricordiamo che la smart-
50 TUTORIAL
card è compatibile con logica a
5V, mentre la seriale RS232 prevede segnali di circa –10V e
+10V). Ciò è possibile poiché,
come ricorderà chi ha letto l’articolo sulle smartcard a microprocessore, il protocollo T=0 è
molto simile al protocollo RS232
con 8 bit di dati, 1 bit di parità,
2 bit di stop alla velocità di 9600
bit/s. Tutta la logica di funzionamento viene quindi completamente spostata nel software del
computer. Anche le smartcard a
memoria possono essere gestite
direttamente dalla RS232 di un
PC senza un microcontrollore,
utilizzando alcuni pin della seriale (DTR, RTS, ecc) per pilotare
direttamente i segnali CLK, RST
e I/O.
La domanda è d’obbligo: perché
abbiamo utilizzato un microcontrollore nell’UniReader? Per alcuni motivi che andiamo subito a
commentare.
• La presenza di un microcontrollore ci permette di utilizzare il lettore anche in modalità
stand-alone, senza alcuna
connessione con un PC. Il
software di gestione non sarà
in esecuzione nel PC, ma nel
microcontrollore.
• Il protocollo T=0, seppur
molto simile al protocollo utilizzato nella RS232, si discosta
in alcuni punti da questo. Per
esempio, nel protocollo T=0,
utilizzato dalle smartcard a
microprocessore, è previsto
un controllo di parità “al volo”
che è impossibile implementare utilizzando la sola RS232
(per maggiori dettagli si veda
l’articolo precedente sulle
smartcard a microprocessore).
• La presenza di un microcontrollore ci permette di riutilizzare l’hardware anche per altri
tipi di smartcard e/o protocolli di comunicazione anche
molto diversi dal protocollo
RS232. In questo caso, basta
cambiare opportunamente il
firmware del microcontrollore
per gestire tali particolari
situazioni.
• Mediante il microcontrollore è
possibile gestire della circuiteria elettronica aggiuntiva che
potrebbe essere impossibile
pilotare tramite la sola connessione seriale (si pensi, per
esempio, all’eccitazione di un
relè in funzione della carta
inserita nel lettore oppure ad
un display LCD).
Dopo aver giustificato l’utilizzo
di un microcontrollore, passiamo alla sua scelta. Come abbiamo detto, si utilizzerà il PIC
16F628 della Microchip che ci è
sembrato una buona soluzione
per tanti motivi.
Innanzitutto, è un chip molto
diffuso nei negozi di elettronica
ad un prezzo sicuramente accessibile alla maggior parte degli
hobbisti. Inoltre, per la memorizzazione del firmware, è dotato
di una memoria Flash da 2048
istruzioni che permette la riprogrammazione in caso di errori o
di aggiornamenti del programma. È dotato di un oscillatore
interno a 4MHz, a differenza del
suo “fratello più piccolo” 16F84,
che semplifica ulteriormente la
complessità
del
circuito.
Internamente ha una porta
USART che permette l’interconnessione con una RS232 di un
PC in modo molto semplice sia a
MODUGNO-impaginato
20-07-2004
16:37
Pagina 51
TUTORIAL
livello hardware, ma soprattutto
a livello di programmazione (il
16F84 non è dotato di porta
USART).
Inutile puntare su microcontrollori più evoluti, poiché ciò non
giustificherebbe l’aumento del
prezzo e della complessità in
relazione ai nostri scopi. È ovvio
che, a seconda delle necessità,
sarà possibile riprogettare il lettore utilizzando un qualsiasi
altro microcontrollore.
Scegliendo, invece, il più piccolo 16F84, avremmo dovuto
rinunciare a metà della memoria Flash, con la conseguenza di
non poter creare programmi
molto complessi; alla porta
USART, con la maggiore complessità di programmazione
relativa alla gestione della connessione RS232 e quindi ad un
maggior aumento del codice,
già penalizzato da una memoria ridotta; all’oscillatore interno a 4MHz, con la conseguenza di complicare il circuito.
Pensiamo che il minor costo
del 16F84 non giustifichi tutti
questi svantaggi, anche perché
la differenza di prezzo è, in
molti casi, irrisoria o addirittura
assente.
Schema elettrico
In figura 2 è mostrato lo schema
elettrico del nostro lettore di
smartcard basato su PIC
16F628.
L’alimentazione dell’intero circuito viene fornita mediante il
connettore J1 a due contatti, a
cui è possibile applicare una tensione continua di almeno 8V. Per
esempio, è possibile collegare
direttamente una batteria da 9V,
magari sostituendo il connettore
J1 con il classico connettore per
tali batterie, oppure è possibile
utilizzare un qualsiasi alimentatore da muro che abbia una
Figura 2: Schema elettrico
TUTORIAL
51
MODUGNO-impaginato
20-07-2004
16:37
Pagina 52
TUTORIAL
uscita continua di almeno 8V
(generalmente 9V o 12V). Non è
necessario che tale tensione sia
regolata, poiché essa viene stabilizzata mediante un regolatore
lineare 7805 (IC1) che genera il
livello di 5V utilizzato per l’alimentazione della smartcard, del
microcontrollore e degli altri
integrati.
Il diodo D1 ha il solo scopo di
evitare problemi nel caso si colleghi il polo positivo e negativo
dell’alimentazione nel verso
opposto. Il led verde DL1 è collegato direttamente alla tensione di 5V, quindi si accende ogni
volta che viene alimentato il circuito e può essere usato come
test di presenza alimentazione.
L’interruttore S1 è utile per staccare l’alimentazione dal circuito.
Il cuore del nostro lettore di
smartcard è il microcontrollore
PIC 16F628 (IC3). Esso verrà
programmato in modo da utilizzare l’oscillatore interno a
4MHz, quindi i pin RA7/OSC1 e
RA6/OSC2 sono usati come pin
di input/output generici. Il pin
MCLR non viene usato, quindi
la funzionalità di reset dovrà
essere disabilitata durante la
programmazione, azzerando il
flag relativo.
I pin RX e TX sono rispettivamente i pin di ricezione e trasmissione della porta USART che
ci permette di gestire in modo
semplice la programmazione del
protocollo seriale. Lo standard
RS232 prevede livelli positivi di
circa +10V e livelli negativi di
–10V, mentre la USART del
microcontrollore gestisce segnali TTL 0-5V. Per questo motivo è
necessario utilizzare un circuito
traslatore di livello che converta
52 TUTORIAL
i livelli TTL in RS232 e, viceversa,
i livelli RS232 in livelli TTL. Il chip
maggiormente usato per questo
scopo è il MAX232 (IC2) prodotto dalla Maxim o uno dei
suoi numerosissimi equivalenti
di altri produttori, molto spesso
compatibili anche con il pinout.
Esso realizza questa conversione
di livello mediante la tecnica
definita “pompa di carica” che si
serve di quattro condensatori
esterni (C7, C8, C9, C10) per
raddoppiare la tensione da 5V a
10V e creare la tensione negativa –10V. Il connettore RS232 utilizzato è il tipico D-SUB 9 pin
femmina, in cui è usato il pin 2
per la trasmissione ed il pin 3 per
la ricezione. Il connettore
maschio a 9 poli generalmente
utilizzato nei PC come porta
seriale, utilizza, invece, il pin 3
per la trasmissione ed il pin 2 per
la ricezione. Questo ci permette
di collegare direttamente il lettore di smartcard alla porta seriale
del computer mediante un cavo
“pin to pin” maschio-femmina
dove, cioè, il pin 1 del connettore maschio è collegato al pin 1
del connettore femmina, il pin 2
del maschio è collegato al pin 2
della femmina, ecc. In realtà, la
nostra seriale utilizza soltanto tre
conduttori (RX, TX e GND),
quindi basterebbe un semplice
cavo dove siano collegati i pin 2,
3 e 5. Gli altri eventuali conduttori non sono usati e
potrebbero essere assenti nel
cablaggio senza inficiare la corretta comunicazione.
Il connettore per smartcard (J3)
utilizzato, prodotto dalla AMP,
oltre agli 8 contatti ISO7816,
presenta due contatti aggiuntivi
(SW1 e SW2) che sono normal-
mente chiusi e si aprono quando
viene inserita una carta. Tramite
la linea SC_DETECT ed il pull-up
R3, il microcontrollore può sapere se nel lettore è stata inserita
una smartcard o meno. Esistono
in
commercio
connettori
ISO7816 senza questi due contatti oppure con contatti normalmente aperti: in questi casi
basta modificare leggermente il
firmware del microcontrollore
per ignorare la linea SC_DETECT
oppure per invertirne la logica di
funzionamento. I pin RST, VPP e
I/O sono direttamente collegati
al microcontrollore ai pin RA2,
RA1 e RA4 rispettivamente. I pin
RST e VPP sono normalmente
degli ingressi per la smartcard,
quindi delle uscite per il microcontrollore. In questo prototipo
la linea VPP è stata collegata ad
un pin del microcontrollore,
anche se difficilmente verrà
gestita, in quanto generalmente
non utilizzata o, nel caso in cui
venga usata, spesso rappresenta
una tensione maggiore di 5V
che il microcontrollore non può
fornire. Queste situazioni non
possono essere gestite da
UniReader, poiché molto diverse
da caso a caso. Il pin I/O, invece,
è una linea bidirezionale, quindi
dovrà essere usata sia come
input che come output dal
microcontrollore: il pin RA4 ha
questa caratteristica. In alcuni
casi, come nelle smartcard a
memoria SLE4442, il pin di I/O è
un open-drain ed è quindi
necessario utilizzare un pull-up
(R4) per generare entrambi i
livelli 0 e 1. Il pin CLK della
smartcard può essere pilotato
direttamente dal microcontrollore (smartcard a memoria)
MODUGNO-impaginato
20-07-2004
16:37
Pagina 53
TUTORIAL
oppure direttamente da un
oscillatore (smartcard a microprocessore). Per questo motivo,
le porte NAND IC4B, IC4C e
IC4D sono collegate in modo da
formare un semplice multiplexer
a due linee di segnale e due
linee di controllo.
Mediante questo multiplexer è
possibile scegliere il segnale di
clock da fornire alla smartcard
tra quello proveniente dall’oscillatore (IC4A+Q1) a 3.579MHz e
quello proveniente direttamente
dal microcontrollore (SC_SCLK)
e precisamente dal pin RA0.
Questa selezione viene effettuata dalle linee RA6 e RA7: se
RA6=1 e RA7=0, l’uscita della
porta NAND IC4D è sempre pari
ad 1, mentre l’uscita della porta
IC4B è il negato del segnale di
clock proveniente dall’oscillatore
IC4A+Q1. Quindi, all’uscita della
porta IC4C, cioé all’ingresso del
pin CLK della smartcard, ci sarà
un clock a 3.579MHz, utilizzato
dalle smartcard a microprocessore. Viceversa, nel caso RA6=0 e
RA7=1, il segnale all’uscita della
porta IC4C, quindi all’ingresso
del pin CLK della smartcard, sarà
uguale al segnale SC_SCLK proveniente
direttamente
dal
microcontrollore ed utilizzato
nelle smartcard a memoria.
L’oscillatore basato sul quarzo
Q1 e il multiplexer sono realizzati mediante quattro porte
NAND, tutte presenti nell’inte-
grato 74HC00 (IC4).
Il led rosso DL2 è pilotato direttamente dal 16F628 e può essere usato per scopi generici che
possono variare a seconda dell’applicazione. Nel prossimo articolo, rappresenterà un utilizzatore, per esempio, un apricancello comandato dal lettore di
smartcard in funzione della carta
inserita.
REALIZZAZIONE
In figura 3 è mostrato il lato
rame del nostro prototipo, in
scala 1:1, sbrogliato su singola
faccia. Esso può essere usato per
la realizzazione del dispositivo
mediante fotoincisione o tecnica
analoga. La dimensione del cir-
PIC® Microcontroller By Example
Un CD-ROM che non può mancare alla tua collezione!
Finalmente è disponibile il CD-ROM con
il corso completo PIC® Microcontroller By Example
in formato ACROBAT
(PDF).
Tutte le lezioni pronte per la consultazione
con i sorgenti dei progetti immediatamente utilizzabili
nelle tue applicazioni.
Il modo migliore per avere sempre sottomano
la soluzione per il tuo progetto con i PICmicro®.
Il CD-ROM PIC® Microcontroller By Example contiene
una sezione “Contenuti Speciali” tutta da scoprire.
Ordinalo subito su
www.farelettronica.com/pbe
oppure telefonando allo 02.66504794
Inware Edizioni
Via Cadorna, 27/31 - 20032 Cormano (MI)
TUTORIAL
53
MODUGNO-impaginato
20-07-2004
16:37
Pagina 54
TUTORIAL
cuito è di 10x8 cm, mezza eurocard (10x16 cm).
Dopo aver realizzato il circuito
stampato, procedete con la foratura dei vari pin di tutti i componenti. I fori più grandi sono
necessari per alloggiare il connettore della seriale (J2) e della
Figura 3: Lato rame in scala 1:1
Figura 4: Schema di montaggio
54 TUTORIAL
smartcard (J3). Se volete, potete
anche fare quattro fori ai quattro
angoli per eventuale fissaggio ad
un contenitore o per montare
dei distanziatori. Tenete presente, però, che questi fori non
sono presenti in Figura 3.
Aiutandovi con lo schema di
montaggio in figura 4 e con l’elenco componenti, procedete
con la saldatura di tutti i componenti.
Per comodità, potete iniziare
con la saldatura dei componenti
a basso profilo, come i tre ponticelli, le resistenze e i diodi.
Proseguite con gli zoccoli per gli
integrati IC2, IC3 ed IC4, con i
condensatori, stando ben attenti alle polarità di quelli elettrolitici, con i led e i connettori. Il
regolatore di tensione 7805
(IC1) può essere montato tranquillamente “in piedi” senza
alcuna aletta di raffreddamento,
poiché assorbe una potenza
minima e non scalda in modo
pericoloso. È importante migliorare lo smaltimento di calore di
questo integrato se utilizzate
tensioni d’ingresso molto grandi
oppure se modificate il circuito
in modo che assorba correnti
elevate.
In figura 5 potete vedere una
foto del prototipo dell’UniReader
con una scheda Agip bianca
inserita nello slot ISO7816,, il
cavo di collegamento per il PC
ed il cavo di alimentazione.
SVILUPPO DEL FIRMWARE
L’utilizzo di un dispositivo programmabile come il microcontrollore PIC16F628, prevede la
scrittura di un firmware per tale
componente.
Nel caso dell’UniReader, è
necessario sviluppare un firmware che gestisca la eventuale connessione seriale RS232, il multiplexer per la scelta del segnale di
clock da inviare alla smartcard, il
protocollo di comunicazione
con la carta eventualmente inse-
MODUGNO-impaginato
20-07-2004
16:37
Pagina 55
TUTORIAL
rita. Il nostro prototipo prevede
anche la gestione di un led che
può rappresentare, in un’applicazione pratica, un relé o qualche altro circuito di controllo.
Il microcontrollore PIC16F628
può essere programmato diret-
tamente in assembler, poiché ha
un set di istruzioni compatto e
semplice da capire e imparare.
Tuttavia, per il prototipo
dell’UniReader, ho scelto di utilizzare il linguaggio C poiché più
intuitivo, leggibile e portabile. È
Elenco componenti
Sigla
Valore
R1, R2
330 Ω 1/4 W
R3, R4
10 KΩ 1/4 W
R5
1 MΩ 1/4 W
C1, C4, C5, C11÷C13 100 nF ceramico
C2, C3
10 µF elettrolitico
C6÷C10
1µF elettrolitico
C14, C15
22 pF ceramico
D1
1N4004 (o equivalente)
DL1
Led verde 5 mm
DL2
Led rosso 5 mm
IC1
7805
IC2
MAX232 + zoccolo 16 pin
IC3
PIC 16F628 + zoccolo 18 pin
IC4
74HC00 + zoccolo 14 pin
J1
Morsettiera a due vie
J2
Connettore D-SUB9 femmina 90° per cs
J3
Connettore ISO7816
Q1
Quarzo 3.579 MHz
S1
Deviatore
Figura 5: Foto del prototipo di UniReader
noto che un programma scritto
con un linguaggio ad alto livello,
appunto come il C, occupa sicuramente più spazio rispetto allo
stesso programma scritto direttamente in assembler. Nel
nostro caso, i compiti del microcontrollore sono molto semplici
e quindi la ridondanza aggiunta
dal compilatore non genera mai
un codice troppo grande rispetto alla memoria programma del
16F628. Se volete complicare il
firmware, aggiungendo altre
gestioni, probabilmente sarà
necessario prendere in considerazione la possibilità di scrivere il
programma direttamente in
assembler per evitare eseguibili
troppo grandi, oppure l’utilizzo
di un dispositivo con una maggiore memoria.
Come compilatore C ho scelto il
CC5X (www.bknd.com) che ha
una edizione FREE, in cui sono
assenti alcune ottimizzazioni ed
utilizzabile solo in applicazioni
non commerciali, restrizioni che
non creano alcun problema
nella nostra situazione. Per
maggiori informazioni su questo compilatore, leggete il
riquadro apposito in questo
stesso articolo.
Il firmware utilizzato per il test di
UniReader e quelli che verranno
presentati negli articoli successivi possono essere tutti scaricati
dal sito di Fare Elettronica. Essi
sono presenti sia in formato sorgente (file con estensione .C),
sia in formato eseguibile già
compilati (file con estensione
.HEX). Tutti coloro che non fossero interessati allo sviluppo del
firmware possono utilizzare
semplicemente i file eseguibili
per programmare il microcon-
TUTORIAL
55
MODUGNO-impaginato
20-07-2004
16:37
Pagina 56
TUTORIAL
trollore ed utilizzarlo subito nel
circuito. Se siete interessati a
capire il funzionamento del
firmware, oppure a modificarlo
secondo le vostre necessità,
potete consultare e modificare i
file sorgenti relativi.
COLLAUDO
Prima di dare alimentazione al
circuito, controllate eventuali
cortocircuiti fra piste, soprattutto
tra i due contatti dell’alimentazione del connettore J1.
Controllate anche che non ci
siano cortocircuiti tra l’uscita del
7805 (pin 3) e la massa. Per
maggiore sicurezza, senza montare i tre integrati IC2, IC3, IC4
nei rispettivi zoccoli, collegate
l’alimentazione e accendete il circuito mediante il deviatore S1 (se
utilizzate uno “a levetta”, spostate la levetta verso l’interno del
circuito per accendere). Il led
verde DL1 dovrebbe subito
accendersi, indicando una tensione di circa 5V all’uscita del
7805; misurate tale tensione con
un voltmetro. Controllate che
tale tensione sia presente all’integrato IC2 (pin 16), IC3 (pin 14),
IC4 (pin 14) e al connettore
ISO7816. Potete anche controllare che sia presente una tensione
di circa –10V sul pin 7 del
MAX232 (IC2) che rappresenta il
segnale di trasmissione su RS232.
TEST
Se tutto è corretto, inserite il
MAX232 e il 74HC00 nei rispettivi zoccoli, programmate il
microcontrollore con il firmware
UNIREADER_TEST.HEX ed inseritelo nello zoccolo.
Collegate il lettore alla porta
RS232 del PC mediante un cavo
“pin to pin” maschio-femmina
56 TUTORIAL
ed eseguite su PC il software
Hyperterminal, normalmente in
Start > Programmi > Accessori >
Comunicazioni > Hyperterminal
> Hypertrm.exe (se non doveste
averlo, potete installarlo in un
secondo momento dal CD di
Windows). Nel seguito faremo
riferimento a questo programma, ma tenete presente che
potete utilizzare un qualsiasi
altro software di emulazione
terminale.
Dopo
aver
eseguito
Hyperterminal, scegliete un
nome qualsiasi da dare alla connessione, per esempio “Test”.
Cliccate su OK e scegliete, dal
campo “Connetti”, la porta
seriale che avete utilizzato per il
collegamento con UniReader
(per esempio, “direttamente a
COM2” se state utilizzando la
seconda porta seriale). Cliccate
su OK ed impostate i parametri
della connessione, come in figura 6. Si tratta di un protocollo
seriale alla velocità di 19200bps,
8 bit di dati, nessuna parità, 1 bit
di stop senza controllo di flusso
(naturalmente il firmware è stato
scritto per utilizzare la porta
USART con queste impostazioni). Cliccate su File > Proprietà >
Impostazioni > Impostazioni
ASCII ed abilitate la casella di
controllo “Aggiungi avanzamento riga ad ogni ritorno a capo
ricevuto”.
Confermate la modifica.
A questo punto potete inserire
una smartcard a memoria
SLE4442 nel lettore ed accenderlo. Se tutto è corretto, dovreste visualizzare nella finestra di
Hyperterminal un messaggio del
tipo mostrato in figura 7.
Alla pressione del tasto ‘R’, inviato al lettore mediante RS232,
UniReader genera un evento di
reset e legge la risposta della
carta al reset (ATR) che viene trasmesso sempre su RS232.
STANCHI DI GIOCARE?
Il circuito che ho proposto è
solo un prototipo di lettore che
potete utilizzare per divertirvi
con le smartcard. Le modifiche
che si possono fare sono
numerosissime.
Per esempio, potete modificare
il circuito in modo da utilizzare
un PIC 16F84. In questo caso
dovete gestire il pin MCLR come
reset e aggiungere un oscillatore
per il clock. Potete anche utilizzare il segnale a 3.579MHz già
presente nel circuito come clock
del microcontrollore.
È possibile aggiungere un relé,
con relativo circuito di pilotaggio, al posto del led rosso di test,
o insieme ad esso.
Potete sostituire la connessione
RS232 con un collegamento
USB oppure utilizzare una tastiera ed un display per l’interfaccia
con l’utente.
Eseguito con successo il collaudo del lettore di smartcard,
potete divertirvi a scrivere una
bozza di programma per la
gestione di una smartcard
SLE4442: lettura e scrittura
delle diverse zone di memoria e
confronto del PSC.
Chi ha letto l’articolo su queste
smartcard dovrebbe essere in
grado di sviluppare un firmware di questo tipo senza grossi
problemi. Se non avete a disposizione una SLE4442 vergine,
potete utilizzare una tessera
telefonica digitale oppure la
MODUGNO-impaginato
20-07-2004
16:37
Pagina 57
TUTORIAL
tessera punti dell’AGIP o di
qualche altro distributore di
benzina.
Se non ci riuscite, dovete solo
aspettare il prossimo articolo…
Cosa ci aspetta nel prossimo
articolo
Nei prossimi due articoli utilizzeremo l’UniReader rispettivamente in applicazioni con smartcard
a memoria e smartcard a micro-
Figura 6: Impostazioni della connessione seriale
in Hyperterminal
processore. In entrambi i casi,
sarà necessario sviluppare un
firmware ad-hoc che gestisca la
relativa tipologia di smartcard.
Infine, faremo degli esempi concreti di utilizzo di smartcard a
memoria (raccolta punti di un
negozio e utilizzo docce a pagamento in un campeggio) e
smartcard a microprocessore
(gestione della rubrica e degli
SMS di una SIM GSM).
BIBLIOGRAFIA E LINK
Compilatore C per PIC CC5X
(in inglese): www.bknd.com
Maxim (in inglese):
www.maxim-ic.com
Amp (in inglese):
www.amp.com
Microchip (in inglese):
www.microchip.com
Figura 7: Messaggio trasmesso dal lettore all’accensione
IL COMPILATORE
Il compilatore CC5X è distribuito dalla B Knudsen Data (http://www.bknd.com/) e supporta molti microcontrollori PIC della Microchip, in particolare quelli con un core a 12 e 14 bit, tra cui il PIC 16F628 utilizzato
nell’UniReader. È possibile scaricare liberamente una versione gratuita del compilatore, alla pagina
http://www.bknd.com/cc5x/download.shtml, dove è presente anche un manuale in PDF. Per studenti o progetti
non commerciali, la versione FREE del compilatore gestisce al massimo 1024 istruzioni per modulo ed è privo della
completa ottimizzazione. Potete scaricare sia una versione a 16 bit per DOS, sia una versione a 32 bit per Windows.
Consiglio di scaricare quest’ultima versione (CC5XFREE.ZIP) che potrà essere utilizzata anche in una finestra DOS
di Windows.
Una caratteristica molto interessante di questo compilatore è la possibilità di integrarlo completamente nel sistema di sviluppo MPLAB della Microchip, con la possibilità di scrivere il programma, compilarlo e farne il debug
senza utilizzare le finestre DOS. Comunque, per brevità, nel seguito verrà illustrato il procedimento di compilazione a riga di comando.
Il pacchetto scaricato (CC5XFREE.ZIP), relativo alla versione 3.2, contiene, tra l’altro, l’eseguibile principale del
compilatore (CC5X.EXE) e il file include 16F628.H (oltre a quelli relativi agli altri PIC supportati) per poter compilare un sorgente per il microcontrollore PIC 16F628. Potete decomprimere il file scaricato CC5XFREE.ZIP, per esempio nella cartella C:\CC5X ed aggiungere questo percorso al PATH mediante il comando DOS SET
PATH=%PATH%;C:\CC5X.
TUTORIAL
57
MODUGNO-impaginato
20-07-2004
16:37
Pagina 58
TUTORIAL
Consiglio di creare un’apposita cartella dove conservare tutti i file relativi al firmware, come C:\UNIREADER nel
caso del programma per il nostro lettore. Inoltre, copiate il file 16F628.H dalla cartella C:\CC5X in C:\UNIREADER.
Per scrivere il sorgente in C si può utilizzare un qualsiasi editor di testi, come il Blocco Note di Windows. È bene
iniziare con la direttiva #pragma chip PIC16F628 per indicare al compilatore il microcontrollore per cui deve generare il file eseguibile.
Per esempio, potete scrivere il seguente programma che fa lampeggiare il led rosso dell’UniReader.
#pragma chip PIC16F628
/* Bit di configurazione. */
#define CP_OFF |= 0x3C00
/* Code Protection Program Memory OFF. */
#define CPD_OFF |= 0x0300 /* Data Code Protection OFF. */
#define LVP_OFF &= 0x3F7F /* Low Voltage Programming OFF. */
#define BOD_ON |= 0x0040
/* Brown Out Detect Disabled. */
#define MCLR_OFF &= 0x3FDF /* MCLR disabled (internally tied to Vcc). */
#define PWRT_ON &= 0x3FF7 /* Power Up Timer enabled. */
#define WDT_OFF &= 0x3FFB /* Watchdog Timer disabled. */
#define FOSC_INTRCIO |= 0x0010, &= 0x3FFC
/* Int RC without CLKOUT. */
#pragma config CP_OFF, CPD_OFF, LVP_OFF, BOD_ON, MCLR_OFF, PWRT_ON, WDT_OFF, FOSC_INTRCIO
bit LED
@ PORTB.3;
void
main( void
{
/* Metti
PORTB =
TRISB &=
/* LED collegato al PIC. */
)
in output il pin del LED spegnendolo. */
0xFF;
0xF7;
while(1) {
unsigned char i1, i2;
/* Pausa */
for( i1=1; i1<100; i1++ )
for( i2=1; i2<0xFF; i2++ )
;
/* Cambia lo stato del LED */
if (LED)
LED = 0;
else
LED = 1;
}
}
Salvate il file come C:\UNIREADER\UNIREADER.C e compilatelo in una finestra DOS mediante il comando CC5X
UNIREADER.C eseguito, naturalmente, all’interno della cartella C:\UNIREADER.
Se la compilazione è andata a buon fine, potete osservare un messaggio simile a quello in Figura 8. Tra le altre
cose, il compilatore fornisce informazioni sull’utilizzo della RAM, sull’esito dell’ottimizzazione, sul numero di
istruzioni generate, ecc. Il file eseguibile ottenuto si chiama UNIREADER.HEX e potrà essere utilizzato per pro-
58 TUTORIAL
MODUGNO-impaginato
20-07-2004
16:37
Pagina 59
TUTORIAL
grammare fisicamente il microcontrollore.
Figura 8: Risultato della compilazione in una finestra DOS
All’interno di questo file è inserita anche la parola di configurazione per il PIC, molto importante durante la fase
di programmazione del dispositivo. Se il software che utilizzate per questo scopo non gestisce la parola di configurazione memorizzata nel file .HEX, dovete specificarla
manualmente, disabilitando qualsiasi protezione (sul
codice e sui dati), la programmazione a bassa tensione,
l’MCLR, il watchdog.
Abilitate soltanto il Brown-Out-Detect e il Power-UpTimer. Inoltre, selezionate come sorgente di clock l’oscillatore interno a 4 MHz senza utilizzare il pin CLKOUT
come uscita di questo clock. In Figura 9 è presente la
schermata di programmazione, con i bit di configurazione, del diffusissimo software IcProg.
Figura 9: Schermata del software IcProg che mette in evidenza i bit di
configurazione utilizzati per la programmazione del PIC 16F628
TUTORIAL
59
MODUGNO-impaginato
15-09-2004
11:03
Pagina 54
TUTORIAL
SMARTCARD
quinta parte
APPLICAZIONI CON LE
SMARTCARD A MEMORIA
di Giuseppe Modugno
[email protected]
In questo articolo, riprendiamo tra le mani le smartcard a memoria,
in particolare le SLE4442, utilizzandole in due diverse applicazioni: carte di
fidelizzazione, con relativa gestione dei crediti e dei dati dei clienti e utilizzazione
automatica di risorse in base ai diritti dell’utente memorizzati nella carta.
In entrambi i casi, utilizzeremo UniReader, presentato nel precedente articolo di
questo tutorial, come lettore di smartcard: nel primo caso in modalità slave,
nel secondo caso in modalità stand-alone. Infine, proporremo alcune varianti per
migliorare le prestazioni del nostro sistema.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti negli articoli precedenti
In questo e nel successivo articolo, metteremo a frutto tutte le
conoscenze acquisite nei primi
tre articoli del tutorial, in cui
abbiamo parlato dettagliatamente delle smartcard da un punto di
vista teorico, delle smartcard a
memoria (in particolare le
SLE4442) e delle smartcard a
microprocessore. Tutti i concetti
presentati
precedentemente
saranno ripresi e, finalmente,
concretizzati. Oltre alle discussioni teoriche, nell’articolo precedente abbiamo avuto l’occasione
54 TUTORIAL
di realizzare l’UniReader, un lettore di smartcard universale,
compatibile sia con le smartcard
a memoria, sia con le smartcard a
microprocessore.
Naturalmente, ci serviremo di
questo hardware nelle applicazioni che mostreremo nel presente e nel successivo articolo.
Breve
panoramica
sulle
SLE4442
Nel seguito, svilupperemo due
applicazioni per smartcard
SLE4442, dettagliatamente analizzate nella seconda parte di
questo tutorial. Sono applicazioni molto comuni per tali smartcard e cioè la gestione di un siste-
ma di fidelizzazione della clientela, per esempio di un negozio o
di una catena di supermercati, e
lo sfruttamento automatico delle
risorse (docce in un campeggio)
in base ai diritti degli utenti
memorizzati nella smartcard.
Prima di iniziare, però, facciamo
una breve panoramica su questo
tipo di smartcard.
La sigla SLE4442 indica un integrato per smartcard a memoria
sviluppato inizialmente da
Siemens. La sua diffusione sul
mercato è stata così elevata da
portare anche altri produttori di
silicio, come Infineon e Philips, a
produrre integrati del tutto
equivalenti. Tali smartcard pos-
MODUGNO-impaginato
15-09-2004
11:03
Pagina 55
TUTORIAL
sono essere trovate molto facilmente a prezzi relativamente
bassi: per grossi quantitativi, si
può arrivare a spendere meno di
1€ per carta, ma normalmente
si possono trovare a 3€ per
pochi quantitativi.
Le smartcard SLE4442 contengono tre zone di memoria: Main
Memory, Protection Memory e
Security Memory. La Main
Memory è una EEPROM di 256
byte, riservata ai dati specifici
dell’applicazione (numero di
serie, numero e dati del cliente,
crediti, ecc). I primi 32 byte possono essere protetti singolarmente e permanentemente da scritture successive: la mappa dei dati
protetti si trova nella Protection
Memory, una memoria di 32 bit.
Il meccanismo di protezione è
irreversibile. Una smartcard
SLE4442 vergine può avere già
alcuni byte protetti da scrittura
(tra cui l’ATR, che occupa i primi
quattro
byte
della
Main
Memory), per cui non è detto
che si abbiano a disposizione 256
byte per la propria applicazione
(comunque non saranno meno
di 256-32=224 byte). Il contenuto della Main Memory e della
Protection Memory è protetto
solo in scrittura, mentre può
essere letto liberamente in qualsiasi momento, utilizzando un
comune lettore. La protezione da
scrittura avviene tramite la
Security Memory, un’altra zona
di memoria di 4 byte che contiene il PSC (3 byte), simile ad un
PIN ed un Error Counter (1 byte).
Per poter scrivere nelle tre zone
di memoria, è necessario inserire
il corretto PSC. Si hanno a disposizione tre tentativi consecutivi,
memorizzati nell’Error Counter.
Dopo tre tentativi consecutivi di
inserimento errato del PSC, la
smartcard diventa una ROM a
tutti gli effetti, cioè non sarà più
possibile scrivere in alcuna zona
di memoria.
Rimando il lettore alla seconda
parte del tutorial per maggiori
dettagli sul funzionamento di
queste carte.
SVILUPPO DI UN FIRMWARE
GENERICO PER UNIREADER
Prima di creare le nostre applicazioni in base alle nostre esigenze
(o assecondando la nostra fantasia), vediamo come utilizzare
UniReader per gestire, tramite
PC, una SLE4442 a basso livello.
Per fare questo, ho scritto un
firmware generico che aspetta
indefinitamente dei comandi
dalla seriale, eseguendoli di volta
in volta. I comandi hanno una
corrispondenza “uno a uno” con
i sette comandi della smartcard
SLE4442: READ MAIN MEMORY,
READ PROTECTION MEMORY,
READ SECURITY MEMORY, WRITE
MAIN MEMORY, WRITE PROTECTION MEMORY, WRITE SECURITY
MEMORY, COMPARE VERIFICATION DATA.
Per rendere l’utilizzo ancora più
semplice, anche per coloro che
non digeriscono bene la programmazione su PC, ho pensato
di utilizzare delle stringhe di
caratteri ASCII per i comandi da
trasmettere e per le risposte provenienti da UniReader. In questo
modo, è possibile utilizzare un
qualsiasi software di emulazione
terminale per gestire la comunicazione con la smartcard, senza
dover scrivere o installare software aggiuntivi. Come molti
sapranno, un software di emula-
zione terminale è già presente
nel sistema operativo Windows e
si chiama Hyperterminal: se non
doveste averlo (normalmente si
trova in Start > Programmi >
Accessori > Comunicazioni) potete installarlo successivamente
dal CD di Windows. Nel seguito
faremo
riferimento
ad
Hyperterminal, ma tenete presente che potete utilizzare un
qualsiasi altro software di emulazione terminale. Il protocollo
seriale utilizzato è del tipo
19200bps, 8 bit di dati, 1 bit di
stop, nessun bit di parità e nessun controllo di flusso (consultate l’articolo precedente per i dettagli sulla configurazione di
Hyperterminal per il corretto funzionamento con UniReader).
All’accensione di UniReader, il
firmware inizializza la porta
USART e il multiplexer per gestire correttamente le carte sincrone (il clock da fornire alla smartcard proviene direttamente dal
microcontrollore), trasmette su
seriale un messaggio iniziale ed
un prompt (“>“) ed aspetta
indefinitamente un comando
dalla seriale.
Ogni carattere inviato dal PC
all’UniReader viene ritrasmesso
dall’UniReader verso il PC (echo):
in questo modo è possibile visualizzare quello che viene scritto
sulla tastiera senza abilitare
impostazioni particolari dell’emulatore
terminale.
Ogni
comando termina con il carattere di ritorno carrello che è possibile trasmettere premendo il
tasto Invio sulla tastiera.
A questo punto, non vi rimane
altro che scaricare dal sito di Fare
Elettronica
il
firmware
UniReader_SLE4442 e program-
TUTORIAL
55
MODUGNO-impaginato
15-09-2004
11:03
Pagina 56
TUTORIAL
mare
il
microcontrollore
PIC16F628 (come al solito, oltre
all’eseguibile troverete il sorgente in C che potrete studiare e
modificare a vostro piacimento).
Interfaccia testuale
Collegate l’UniReader al PC,
inserite una SLE4442 nel lettore, eseguite e configurate
Hyperterminal su PC e alimentate l’UniReader. Il lettore si
presenta con un numero di versione (vedi figura 1) ed aspetta
un comando tra quelli elencati
in tabella 1.
Inserite normalmente i comandi
mediante tastiera direttamente
nella finestra di Hyperterminal,
rispettando le maiuscole e le minuscole. I parametri possono indicare un indirizzo di memoria (aa)
oppure dei dati (dd), entrambi
specificati in esadecimale con lettere maiuscole; se il numero esadecimale è ad una cifra, è necessario farlo precedere dallo zero in
modo che il parametro occupi
sempre due caratteri. Ogni
comando va terminato con il
tasto Invio (“↵“). Purtroppo il
firmware gestisce il prompt e i
comandi ricevuti in maniera
molto semplice, quindi non è
possibile utilizzare i tasti per l’editazione (cancellazione dei carat-
Comando
Comando SLE4442
Parametri
R
-
-
rm
READ MAIN MEMORY
aa
rs
READ SECURITY MEMORY
-
rp
READ PROTECTION MEMORY
-
wm
WRITE MAIN MEMORY
aadd
wp
WRITE PROTECTION MEMORY
aadd
ws
WRITE SECURITY MEMORY
aadd
c
COMPARE VERIFICATION DATA
aadd
Tabella 1: Elenco dei comandi disponibili per la gestione di una SLE444
Figura 1: Schermata di Hyperterminal all’accensione di UniReader
56 TUTORIAL
teri, frecce, ecc.), per cui digitate
attentamente i vari comandi sulla
tastiera. Se sbagliate, potete premere la combinazione di tasti
CTRL+Z per annullare il comando ed iniziarne uno nuovo.
Il comando “R” è l’unico che
non abbia un corrispettivo fra
quelli della SLE4442: ad esso
corrisponde una condizione di
reset e la risposta della carta a
tale evento (ATR) viene letta da
UniReader e trasmessa tramite
seriale. Prima di utilizzare una
qualsiasi smartcard, è necessario
sempre generare una condizione di reset e verificare che l’ATR
corrisponda a quello delle
SLE4442 (A2 13 10 91).
Il comando “rm” (READ MAIN
MEMORY) accetta un parametro
che identifica un indirizzo (0255). Tale comando legge il contenuto della Main Memory a partire dall’indirizzo specificato fino
alla fine della memoria (indirizzo
255). Per leggere l’intero contenuto della Main Memory è possibile usare il comando “rm00↵“.
Il comando “rp” (READ PROTECTION MEMORY), senza parametri, legge il contenuto della
Protection Memory (32 bit),
visualizzandolo sotto forma di bit
a partire dal meno significativo,
associato all’indirizzo 00 della
Main Memory.
Allo stesso modo, il comando
“rs” (READ SECURITY MEMORY),
senza alcun parametro, legge
l’intero contenuto della Security
Memory (4 byte) e cioè, in
sequenza, l’Error Counter (1
byte) e il PSC (3 byte).
In figura 2 è mostrata la schermata di Hyperterminal dopo l’esecuzione del comando di Reset
(“R↵“) e dei comandi di lettura
MODUGNO-impaginato
15-09-2004
11:03
Pagina 57
TUTORIAL
Figura 2: Schermata di Hyperterminal dopo il comando di Reset ed i
comandi di lettura.
(“rm00↵“, “rp↵“, “rs↵“) su una
SLE4442 vergine. Come si può
notare, l’ATR della carta è A2 13
10 91, tipico di queste smartcard.
Il
contenuto
della
Protection Memory indica che,
anche per una carta vergine,
alcuni byte (precisamente 12)
sono già protetti in scrittura, tra
cui i primi quattro byte che contengono l’ATR.
La Security Memory indica che ci
sono ancora 3 tentativi (07) per
l’inserimento del PSC e che quest’ultimo viene letto come 00 00
00 poiché non è ancora stato
inserito correttamente. Infine, il
contenuto della Main Memory ci
mostra come tutti i byte, dopo i
primi 32, valgono FF che è il
valore che si ottiene dopo la cancellazione di una locazione di
memoria.
I comandi di scrittura “wm”
(WRITE MAIN MEMORY), “wp”
(WRITE PROTECTION MEMORY)
e “ws” (WRITE SECURITY
MEMORY) necessitano di due
parametri, un indirizzo ed un
dato. Nel caso dei comandi
“wm” e “ws”, l’indirizzo indica il
byte da modificare ed il dato rappresenta il nuovo valore da scri-
Figura 3: Sequenza dei comandi per l’inserimento del PSC in una
carta SLE4442 vergine.
vere. Invece, il comando “wp”
protegge un byte della Main
Memory da ulteriori scritture:
l’indirizzo rappresenta il byte da
proteggere (0÷31) e il dato l’attuale contenuto di questo byte.
Se il dato specificato è diverso dal
contenuto effettivo di quel byte,
il comando viene interrotto e
quel byte non viene protetto.
Naturalmente, affinché questi
comandi abbiano successo, è
necessario aver inserito precedentemente il corretto PSC.
Il comando “c” (COMPARE VERIFICATION DATA) permette di
inserire il PSC per abilitare i
comandi di scrittura. Il PSC è formato da tre byte memorizzati
nella Security Memory a partire
dall’indirizzo 1. Sono necessari,
quindi, tre comandi “c” in cui il
parametro dell’indirizzo vale successivamente 01, 02 e 03 ed il
dato rappresenta il byte del PSC
da verificare. Per esempio, supponendo che il PSC sia 5A873F
(in esadecimale), saranno necessari i comandi “c015A↵“,
“c0287↵“ e “c033F↵“ per inserire correttamente il PSC. È necessario ricordarsi di azzerare almeno un bit dell’Error Counter (byte
di indirizzo 00 della Security
Memory) prima dei tre comandi
“c” (per maggiori informazioni si
veda la seconda parte di questo
tutorial).
In figura 3 è mostrata la sequenza dei comandi necessari per
inserire correttamente il PSC in
una carta vergine (in questo caso
il PSC vale FF FF FF).
Si controlla il numero dei tentativi a disposizione (“rs↵“), si scrive
un bit dell’Error Counter
(“ws0003↵“), si trasmettono i tre
comandi di inserimento del PSC
(“c01FF↵“,
“c02FF↵“
e
“c03FF↵“), si scrivono nuovamente tutti i bit dell’Error
Counter (“ws0007↵“), infine si
controlla che l’ultimo comando
abbia avuto esito positivo, cioè
l’Error Counter valga 07 (“rs↵“).
Se è stato inserito un PSC errato
(o la sequenza dei comandi è
diversa), l’Error Counter sarebbe
rimasto al valore 03, con l’ovvia
conseguenza di aver diminuito il
numero dei tentativi rimasti.
Dopo tre tentativi errati, la carta
non può essere più modificata.
Come si può osservare, il primo
comando di lettura della Security
Memory non ci permette di leg-
TUTORIAL
57
MODUGNO-impaginato
15-09-2004
11:03
Pagina 58
TUTORIAL
gere il valore corretto del PSC
poiché non è ancora stato inserito: in questo caso viene letto
come 00 00 00, anche se il suo
valore è un altro. L’ultimo
comando di lettura della Security
Memory, invece, ci permette di
leggere chiaramente anche il
PSC, poiché è stato appena inserito correttamente.
Interfaccia grafica
Per evitare di utilizzare l’emulatore di terminale e il meccanismo dei comandi ASCII, ho preparato un programma in Visual
Basic che gestisce le carte
SLE4442 mediante una interfaccia grafica più intuitiva e semplice da usare, rimanendo sempre
a “basso livello”. Potete scaricare sia il sorgente in Visual Basic
(SLE4442_src.zip), sia il file di
installazione del programma
(SLE4442_setup.zip). In figura 4
è mostrata la finestra del programma attraverso la quale
potete scegliere la porta seriale a
cui è collegato l’UniReader,
resettare la carta visualizzando
l’ATR e trasmettere i sette
comandi mediante gli appositi
tasti. Dopo aver cliccato sul tasto
“Reset” e successivamente sui
tutti i tasti “Leggi”, ho ottenuto
il risultato mostrato sempre in
figura 4 su una smartcard vergine. Naturalmente i risultati sono
gli stessi ottenuti mediante l’emulatore di terminale (mostrati
in figura 2), ma organizzati graficamente in modo più intuitivo.
Per rendere un po’ più semplice
l’inserimento del PSC, cliccando
sul tasto “PSC” sarà sufficiente
inserire l’intero codice di 3 byte
(sempre in esadecimale) ed automaticamente il software invierà i
58 TUTORIAL
Figura 4: Schermata del programma SLE4442 dopo la lettura di tutte le zone di memoria di una
smartcard vergine.
tre comandi COMPARE VERIFICATION DATA. Come al solito,
dovete ricordarvi di cancellare
almeno un bit dell’Error Counter
prima di inviare i comandi di verifica PSC.
Il programma SLE4442 non è
stato realizzato con lo scopo di
essere utilizzato in un’applicazione finale, poiché gestisce le
smartcard a basso livello,
mediante i singoli comandi previsti dal chip. Nel seguito, a seconda dell’applicazione, sarà realizzato un programma ad hoc
molto più semplice da gestire
anche per coloro che non sanno
quasi nulla delle carte SLE4442.
CARTA FEDELTÁ
Una tipica applicazione in cui
vengono usate le memory card è
sicuramente la “carta fedeltà” dei
clienti, per esempio di un supermercato. Una smartcard a
memoria è facile “da portare dietro” nel portafogli e permette di
conservare dei dati, tra cui, per
esempio, il numero dei punti che
il cliente ha accumulato (eventualmente, per il ritiro di un premio o per uno sconto). In questo
caso, è necessario che solo il personale autorizzato del supermercato possa modificare il numero
dei punti memorizzati nella carta,
mentre l’operazione deve essere
impossibile al cliente per evitare
che possa aumentarsi il credito
impropriamente. Le smartcard
SLE4442 rispondono a questo
requisito in quanto sono protette
in scrittura mediante il meccanismo del PSC. E’ sufficiente che
solo il personale del supermercato (in realtà, il software in suo
possesso) conosca il corretto
codice senza divulgarlo. Nella
peggiore delle ipotesi, il cliente
che abbia letto il nostro tutorial e
abbia realizzato il nostro
UniReader, potrà solo leggere il
contenuto della carta, quindi il
proprio credito, ma non potrà
modificarlo. Se cercherà di inserire un PSC casuale, dopo tre tentativi la carta sarà automaticamente bloccata.
MODUGNO-impaginato
15-09-2004
11:03
Pagina 59
TUTORIAL
Per questa applicazione, supponiamo che il personale che gestisce i punti della carta fedeltà
abbia a disposizione un PC ed il
nostro lettore UniReader. Sarà
necessario realizzare un apposito
firmware per il lettore ed un software per PC.
Il firmware
Come firmware dell’UniReader
per questa applicazione, possiamo tranquillamente utilizzare
quello generico per carte SLE4442
descritto
precedentemente
(UniReader_SLE4442.hex). Come
si è potuto vedere, questo firmware aspetta un qualsiasi comando SLE4442 dalla seriale e lo esegue immediatamente. In questa
applicazione, sarà il software su
PC che avrà il compito di inviare
gli opportuni comandi al lettore
per eseguire le varie operazioni ad
alto livello: aumento del credito,
cancellazione del credito, creazione nuova carta fedeltà, ecc.
Il software
Il software Gestione Carte,
scritto in Visual Basic, può essere
scaricato dal sito di Fare
Elettronica sia in formato sorgente (GestioneCarte_src.zip)
sia in formato eseguibile
(GestioneCarte_setup.zip).
La schermata principale del programma è mostrata in figura 5.
Utilizzando le linguette Gestione,
Nuova Carta, Impostazioni è possibile accedere a tre differenti
schermate nelle quali si può,
rispettivamente, modificare il
contenuto delle carte (punti e
dati del cliente), inizializzare una
smartcard SLE4442, modificare
le impostazioni del software.
Nella schermata Impostazioni,
visualizzata in figura 6, è possibile scegliere la porta seriale alla
quale è collegato il lettore, il
PSC scelto per le carte del
nostro circuito, il PSC di default
delle smartcard SLE4442 vergini. Ricordo che il PSC deve essere tenuto segreto, soprattutto
non divulgato ai nostri clienti
che potrebbero modificare a
loro piacimento i punti memorizzati sulla carta. Le impostazio-
ni vengono salvate nel file di
configurazione “config.dat” e
caricate automaticamente all’avvio del programma.
La schermata relativa alla linguetta Nuova Carta (figura 7) permette di inizializzare una smartcard
SLE4442 vergine per la nostra
applicazione.
Nella
Main
Memory della carta vengono
memorizzati un numero associato al cliente (da 0 a 9999), il suo
Cognome (massimo 20 caratteri)
ed il suo Nome (massimo 20
caratteri).
Cliccando sul tasto Crea, il software inserisce il PSC di default,
cambia il suo valore in quello utilizzato nella nostra applicazione
(scelto nella schermata delle
impostazioni) e memorizza i tre
dati Numero Cliente, Cognome
e Nome. Il Numero Cliente è
memorizzato come stringa di 4
caratteri ASCII a partire dall’indirizzo 20; il Cognome è memorizzato come stringa di 20 caratteri
a partire dall’indirizzo 24 (se il
cognome occupa meno spazio,
vengono aggiunti dei caratteri
TUTORIAL
59
MODUGNO-impaginato
15-09-2004
11:03
Pagina 60
TUTORIAL
Figura 5: Schermata principale del software Carta Fedeltà.
nulli); il Nome è memorizzato
come stringa di 20 caratteri a
partire dall’indirizzo 38 (stessa
cosa del Cognome se il dato
occupa meno di 20 caratteri).
Tutti gli indirizzi sono indicati in
esadecimale.
Nella
Main
Memory viene anche memorizzato un numero di Punti nullo
come stringa di 4 caratteri ASCII,
a partire dall’indirizzo 4C. Come
per il numero cliente, anche il
numero dei punti deve essere
compreso tra 0 e 9999. Per maggiore sicurezza, all’indirizzo FF
della Main Memory viene
memorizzata una checksum in
modo tale che la somma binaria
(XOR) di tutti i byte (dall’indirizzo 00 all’indirizzo FF) sia nulla.
L’ultima schermata (figura 5),
chiamata Gestione, è quella che
viene normalmente usata dal
personale del supermercato.
Mediante questa schermata è
possibile modificare i punti
memorizzati in una smartcard
precedentemente inizializzata. È
sufficiente inserire la smartcard in
UniReader e cliccare sul tasto
Aggiorna per rileggere il contenuto della carta: se la carta inserita
è valida, cioè se la checksum
60 TUTORIAL
Figura 6: Schermata delle Impostazioni del software “Carta Fedeltà”.
risulta corretta, vengono letti i
quattro dati (Numero Cliente,
Cognome, Nome, Punti) e visualizzati. E’ possibile modificare i
punti memorizzati utilizzando i
tasti + per incrementare, - per
decrementare, > per reimpostare
e Azzera per azzerare. E’ anche
possibile modificare i dati del
cliente (numero, cognome e
nome) cliccando sul tasto
Modifica.
In figura 8 è mostrato il contenuto della Main Memory di una
SLE4442 utilizzata nella nostra
applicazione. Si può notare come
i byte dall’indirizzo 20 all’indirizzo 4F sono occupati dai dati del
nostro cliente e la checksum è
memorizzata all’indirizzo FF e
vale A6.
I più bravi potranno leggere il
contenuto di questa Main
Memory e capire chi è il cliente
del supermercato a cui appartiene questa carta e quanti punti
egli ha.
Alcuni miglioramenti
Faccio notare che tutti i dati relativi ad un cliente sono memorizzati esclusivamente nella sua
smartcard, quindi è possibile rea-
lizzare ed utilizzare contemporaneamente più UniReader su
diversi computer, in ognuno dei
quali è in esecuzione il software
“Gestione Carte”.
Il software può essere utilizzato
così com’è in applicazioni reali,
ma consiglio a tutti di testarlo per
le proprie esigenze. In altre parole, non posso dare garanzie che
esso sia privo di bachi. Per questo
motivo, fornisco anche il sorgente in Visual Basic che potete
modificare a piacimento.
Il sistema che ho descritto è
molto semplice ed ha avuto l’obiettivo di mostrare la flessibilità
del lettore UniReader e la semplicità di utilizzo delle smartcard
SLE4442, ma non vuole essere
assolutamente una soluzione
finale. Numerosi sono i miglioramenti che è possibile fare.
Per esempio, potete creare un
database di clienti sul vostro
computer ogni volta che create
una nuova carta.
È possibile memorizzare altri
dati relativi al cliente oltre al
Cognome e Nome (indirizzo,
data creazione, ultimo acquisto,
ecc).
Infine, potete creare un mecca-
MODUGNO-impaginato
15-09-2004
11:03
Pagina 61
TUTORIAL
nismo per rendere segreto il PSC
utilizzato nella vostra applicazione anche al personale che userà
il software. Infatti, l’operatore
può cliccare sulla linguetta
“Impostazioni” e leggere il PSC
utilizzato, oppure leggerlo direttamente nel file config.dat. Per
evitare ciò, è possibile memorizzare il PSC in forma criptata nel
file config.dat e obbligare l’operatore ad inserire il PSC utilizzato prima di passare nella schermata Impostazioni.
CAMPEGGIO
Nella precedente applicazione
abbiamo usato il nostro lettore di
smartcard UniReader come slave
di un PC, tramite il collegamento
seriale. La flessibilità di UniReader
ci permette di utilizzarlo anche in
modalità stand-alone, uno dei
vantaggi derivanti dall’avere un
microcontrollore a bordo che
può gestire le situazioni più
diverse.
In questo esempio, supponiamo
di dover installare un sistema di
docce in un campeggio. Ogni
cliente ha un certo numero di
crediti che corrisponde al numero di docce che può effettuare,
per esempio in funzione dei giorni di permanenza. Se il cliente ha
bisogno di più utilizzazioni, può
pagare un certo quantitativo per
farsi aumentare i crediti in qualsiasi momento.
Come per la situazione precedente, anche in questo caso le
smartcard SLE4442 rispondono
ai requisiti di facile trasportabilità,
memorizzazione non volatile di
una manciata di byte, robustezza, ecc. Ad ogni nuovo cliente
possiamo fornire una smartcard
in cui memorizziamo un certo
numero di crediti iniziale, per
esempio uno al giorno. Il cliente
potrà usare la carta per abilitare
l’erogazione dell’acqua calda per
un certo periodo, decrementando automaticamente il credito di
una unità.
Per fare questo è ovviamente
necessario realizzare una versione leggermente diversa del
UniReader presentato nel precedente articolo, in quanto sarà
necessario fissare il circuito a
muro, completamente chiuso, a
parte la fessura per l’inserimento
della carta.
Naturalmente dovrebbero essere
prese delle precauzioni per evitare che l’acqua o l’umidità, sicuramente presenti in questi luoghi,
possano creare problemi (cortocircuiti o altro). Infine, il nostro
Figura 7: Schermata “Nuova Carta” relativa al software “Gestione Carte”
prototipo di UniReader non prevede alcun utilizzatore vero e
proprio, ma semplicemente un
led pilotato direttamente dal
microcontrollore. In questo
esempio, il led acceso rappresenterà l’erogazione dell’acqua abilitata, il led spento rappresenterà
l’erogazione disabilitata. Nel caso
reale, probabilmente sarà necessario pilotare un relè anziché un
led e, magari, aggiungere un display per eventuali messaggi,
come il numero di crediti rimasti
sulla scheda. Tutto sommato, la
filosofia dell’UniReader rimane la
stessa.
Ricapitolando, avremo un lettore
per ogni risorsa (doccia) inscatolato e fissato a muro, programmato con un firmware ben preciso (descritto nel successivo paragrafo). Inoltre, ci sarà un posto
centrale, per esempio in direzione, in cui è presente un PC collegato alla nostra versione originale dell’UniReader.
L’operatore, utilizzando lo stesso
software sviluppato per la precedente applicazione (Gestione
Carte) potrà modificare i dati
memorizzati nella carta, tra cui il
numero dei crediti (precedentemente chiamati punti) in funzione della somma pagata, dei gior-
Figura 8: Contenuto della Main Memory di una “Carta Fedeltà”
TUTORIAL
61
MODUGNO-impaginato
15-09-2004
11:03
Pagina 62
TUTORIAL
ni di permanenza o altro.
Ci rimane da sviluppare, quindi,
soltanto il firmware per i lettori
che comandano direttamente le
docce.
Il firmware
Per abilitare l’erogazione dell’acqua, il cliente dovrà semplicemente inserire la sua carta nel lettore associato. Il microcontrollore
a bordo dell’UnIReader si accorge automaticamente dell’inserimento di una carta tramite la
linea SC_DETECT (vedere lo
schema elettrico sul numero precedente) e controlla la validità
dei dati memorizzati (praticamente l’ATR e la checksum).
Successivamente controlla il
numero dei crediti e, se è maggiore di zero, inserisce il PSC scelto per il nostro sistema, decrementa di una unità il credito e
abilita l’erogazione (accende il
led, nel nostro prototipo) per un
certo periodo di tempo.
Potete scaricare l’archivio compresso UniReader_campeggio.zip
dal sito di Fare Elettronica, in cui
è presente il file eseguibile
(UniReader_campeggio.hex) per
la programmazione del dispositivo e il sorgente del firmware
(UniReader_campeggio.c) che
potete modificare a vostro piacimento.
Provate ad inizializzare una
nuova carta con il software
“Gestione Carte” su PC ed il firmware UniReader_SLE4442.hex
per l’UniReader, aggiungendo
almeno un credito. Quindi programmate l’UniReader con il
firmware UniReader_campeggio.hex ed inserite la carta. Se
tutto è andato bene, il led pilotato dal microcontrollore si accenderà per qualche secondo a testimonianza dell’abilitazione dell’erogazione. Nel frattempo, il credito sarà decrementato di una
unità. L’erogazione, cioè l’accensione del led, sarà abilitata per un
numero di volte pari al credito
memorizzato inizialmente nella
carta.
Naturalmente la versione standalone dell’UniReader deve conoscere il PSC utilizzato per poter
decrementare il numero dei crediti ad ogni utilizzazione. Per questo, il firmware UniReader_campeggio memorizza tale PSC, in
modo non volatile, all’interno
della EEPROM del PIC16F628.
All’accensione, il microcontrollore
legge il PSC dalla EEPROM ed è
Figura 9: Inserimento di un nuovo PSC nell’applicazione campeggio
62 TUTORIAL
già operativo (ciò è molto comodo in caso di black-out). Per cambiare il PSC, o memorizzarlo per
la prima volta, è sufficiente collegare il lettore ad un PC mediante
RS232, eseguire Hyperterminal
con la solita configurazione e premere ESC.
L’UniReader ascolta continuamente la seriale e, in presenza del
tasto ESC, passa nella modalità di
“Inserimento PSC”. Sempre
mediante Hyperterminal, potete
inserire i 6 caratteri esadecimali
che formano il nuovo codice che
volete utilizzare. L’UniReader
legge questo nuovo codice e lo
memorizza nella EEPROM. Se
tutto è avvenuto senza errori,
UniReader vi risponderà con
“OK” (vedi figura 9).
Alcuni miglioramenti
Il sistema di gestione delle docce
può essere migliorato sotto molti
aspetti. Per esempio, la carta che
forniamo al cliente può essere
utilizzata anche per altri scopi.
Può essere utilizzata per l’ingresso autorizzato in certe aree del
campeggio (piscina, ecc) oppure
per memorizzare i punti fatti in
tornei interni. E’ possibile memorizzare la data di fine permanen-
Figura 10: Contenuto di una Carta Fedeltà “criptata” con gli stessi dati della fig. 8
MODUGNO-impaginato
15-09-2004
11:03
Pagina 63
TUTORIAL
za nella struttura e controllare
che sia posteriore alla data attuale (per evitare che carte non
esaurite possano passare da un
cliente che parte ad un cliente
che arriva).
Molto interessante sarebbe poter
configurare, da un unico punto
(per esempio dalla direzione),
tutti gli UniReader abilitati, per
esempio per modificare il PSC
utilizzato. Poiché il nostro lettore
ha una interfaccia seriale, è possibile creare una rete RS485 a due
fili unidirezionale di tipo puntomultipunto. Dalla direzione,
mediante un opportuno hardware (convertitore RS232-RS485), è
possibile trasmettere il comando
di impostazione PSC ai vari nodi
della rete che verranno configurati contemporaneamente senza
la necessità di doverli configurare
uno dopo l’altro mediante un
portatile, con un enorme vantaggio in termini di tempo.
Naturalmente, si possono comprare delle smartcard SLE4442
vergini prestampate con il simbolo del campeggio: il sistema
viene recepito dal cliente in
modo più professionale e l’immagine della struttura ne trae
giovamento.
VARIANTI SUL TEMA
Come si è potuto vedere, il lettore di smartcard UniReader, che
abbiamo proposto nel precedente articolo, si presta molto bene a
funzionare in modalità slave
(connesso ad un PC) e standalone (autonomamente). In questo articolo abbiamo preso in
considerazione le smartcard a
memoria SLE4442 in cui è possibile proteggere i dati in scrittura
mediante il codice segreto PSC.
In situazioni più delicate, però,
questo grado di sicurezza
potrebbe non essere accettabile
e bisognerebbe utilizzare sistemi
di autenticazione più complessi e
robusti, sicuramente più costosi.
In quest’ultima parte dell’articolo, prendo in considerazione
alcuni aspetti “deboli” delle
SLE4442, mostrando come si
possa, con un po’ di fantasia,
migliorarli.
Proteggere i dati anche
in lettura
Come si è detto più volte in questo tutorial, le smartcard
SLE4442 sono protette soltanto
in scrittura ma non in lettura. In
altre parole, il cliente del nostro
supermercato (o del nostro campeggio) potrebbe inserire la carta
che gli abbiamo dato (o che ha
trovato o derubato) in un suo lettore di smartcard e potrebbe leggere, senza difficoltà alcuna, il
contenuto della Main Memory.
Con un po’ di fortuna ed intuito,
potrebbe capire dove e in quale
formato sono memorizzati i dati,
quindi risalire al numero del
cliente, al cognome, al nome ed
ai punti del proprietario della
carta. In molte situazioni questo
non crea grossi problemi, soprattutto se i campi Cognome,
Nome e Numero Cliente non
sono utilizzati. In altre situazioni,
però, la lettura non protetta dei
dati potrebbe essere un problema. Prima di valutare e passare a
soluzioni più complesse e costoste (per esempio, altri tipi di
smartcard) possiamo rendere la
lettura non autorizzata dei dati,
se non impossibile, almeno più
difficile. In questo caso, ci viene
in aiuto la crittografia, la tecnica
che ci permette di trasformare
una stringa di byte chiaramente
leggibile (e interpretabile), in una
stringa di byte difficilmente comprensibile.
In figura 8 è mostrato il contenuto della memoria di una smartcard utilizzata in una nostra
applicazione ed ho già sfidato il
lettore a risalire ai dati memorizzati. Chiunque abbia una tabella
ASCII a portata di mano potrebbe risalire al cliente, al suo codice
ed ai suoi punti, in quanto i dati
sono stati memorizzati “in chiaro”, cioè in modo facilmente
comprensibile.
Per rendere la lettura più difficile,
possiamo pensare di codificare i
dati mediante un algoritmo crittografico, scelto dall’ampia letteratura o inventato da noi stessi.
In questo caso, se l’algoritmo
deve essere eseguito direttamente dal microcontrollore del lettore, sarà necessario evitare operazioni troppo complesse, a patto
di non passare a microcontrollori
più evoluti e performanti. Nel
caso sia possibile far eseguire l’algoritmo di cifratura direttamente
su un computer, ci si può sbizzarrire molto di più, cercando
sistemi molto complessi e difficili
da decifrare.
Per esempio, gli stessi dati
memorizzati nella carta di figura
8, sono stati codificati (anche se
molto debolmente) e memorizzati in una carta il cui contenuto
è mostrato in figura 10. Come
potete osservare, ora non è più
facile risalire ai dati in chiaro e le
operazioni di lettura sono più
complicate (anche se non
impossibili). Complicando il software/firmware siamo riusciti a
rendere le SLE4442 protette
TUTORIAL
63
MODUGNO-impaginato
15-09-2004
12:48
Pagina 64
TUTORIAL
anche in scrittura, senza aumentare i costi del sistema.
Cambiare il PSC ad ogni uso
Il PSC è l’unico codice che ci permette di proteggere la carta da
operazioni non autorizzate di
scrittura. Come si è detto, è un
codice a 3 byte, quindi è possibile scegliere una combinazione tra
224=16.777.216. Se immaginiamo di provare ogni secondo una
combinazione diversa, potremmo impiegare anche 200 giorni
circa di lavoro ininterrotto per
trovare il PSC corretto. In realtà,
l’operazione è resa molto più
complicata dal fatto che, su una
singola scheda, è possibile inserire un PSC errato non più di 3
volte, dopo le quali la carta si
blocca definitivamente. Tenendo
presente ciò, all’intrusore potrebbero servire anche più di
5.000.000 di smartcard per trovare il PSC corretto (oltre ad un
aumento del tempo necessario
dovuto al cambio della carta nel
lettore).
Il meccanismo del PSC sembra
essere molto sicuro ma, in alcuni casi, potrebbe risultare una
protezione debole. Infatti, quando un lettore di SLE4442 invia i
comandi per l’inserimento del
PSC trasmette quest’ultimo in
chiaro. Se la postazione non è
presidiata e l’intrusore ha la possibilità di sondare le linee I/O e
CLK, potrebbe risalire ai comandi di comparazione PSC (COMPARE VERIFICATION DATA) e,
con un po’ di pazienza, al codice corretto.
Per rinforzare queste debolezze
intrinseche delle carte SLE4442,
è possibile memorizzare, direttamente nella Main Memory, il
64 TUTORIAL
PSC. In questo modo il lettore,
per conoscere il PSC della carta,
dovrà prima leggerlo direttamente dalla Main Memory. Il
vantaggio è che, con questo
meccanismo, è possibile modificare il PSC in modo casuale ad
ogni utilizzo della scheda. Se
l’intrusore legge il PSC, sondando le linee I/O e CLK, non
potrà comunque utilizzarlo poiché è stato cambiato durante la
sessione.
Lo svantaggio di questo meccanismo è che il PSC è facilmente
leggibile poiché memorizzato
nella Main Memory, ma difficilmente l’intrusore sa che abbiamo
utilizzato questo metodo o riesce
a capire in quale posizione della
memoria abbiamo memorizzato
il codice (potrebbe tranquillamente confonderlo con i dati).
Inoltre l’operazione è ancora più
complicata se utilizziamo algoritmi crittografici per nascondere il
PSC prima di memorizzarlo.
Memorizzare solo un codice
cliente
Ultimo trucco che è possibile
adottare per rendere ancora più
sicuro il nostro sistema è quello
di memorizzare nella carta soltanto un codice cliente. Tutto il
resto (nome, cognome, crediti,
punti, ecc.) viene conservato in
un database centrale e non sulla
carta. In questo modo, ogni
volta che si vuole utilizzare la
carta, verrà letto il codice cliente e verranno modificati i dati
(per esempio, i punti) direttamente nel database, senza
modificare il contenuto della
carta. Il cliente furbo che riesce
a trovare il PSC e a scrivere la
carta, potrà al massimo modifi-
care il codice cliente, ma non
saprà mai quale scegliere per
aumentare il proprio credito o i
propri punti, poiché le informazioni sono memorizzate segretamente nel nostro database
centrale.
Questo metodo può essere
attuato molto semplicemente
quando è presente un solo lettore di smartcard collegato ad
un PC. Il tutto si complica se nel
nostro sistema il lettore funziona in modalità stand-alone
oppure se ci sono diversi lettori
di smartcard dislocati in diversi
punti, poiché bisogna prevedere una connessione al server
dove risiede il database clienti.
STANCHI DI GIOCARE?
Le applicazioni in cui possiamo
utilizzare le SLE4442 sono veramente tante e limitate solo dalla
fantasia del progettista. In questo articolo ho solo accennato a
due
possibili
applicazioni
dell’UniReader come lettore di
carte SLE4442 in funzionamento
stand-alone e slave di PC.
Cosa ci aspetta nel prossimo
articolo
Nel prossimo articolo incontreremo finalmente le smartcard a
microprocessore (smartcard asincrone) in applicazioni pratiche.
La più semplice e diffusa smartcard a microprocessore è sicuramente la SIM dei cellulari GSM
che tutti noi abbiamo.
Nel prossimo articolo, verrà
descritta la struttura dei dati
memorizzati nelle SIM e verrà
utilizzato l’UniReader per leggere/scrivere la rubrica e gli SMS
memorizzati nella scheda.
MODUGNO-impaginato
1-10-2004
17:11
Pagina 54
TUTORIAL
SMARTCARD
sesta parte
LA SIM: UN ESEMPIO DI
SMARTCARD A
MICROPROCESSORE
di Giuseppe Modugno
[email protected]
In questo articolo, prenderemo tra le mani un tipo molto diffuso di smartcard
a microprocessore, le SIM comunemente usate all’interno dei telefonini GSM.
Verrà descritto il funzionamento di tali smartcard all’interno del sistema di
telefonia mobile GSM: funzionalità, organizzazione interna dei dati, comandi, ecc.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti negli articoli precedenti
Per chi non avesse avuto la possibilità di leggerci sin dall’inizio
del nostro tutorial, facciamo una
breve panoramica dei contenuti
degli articoli precedenti.
Nella prima parte, abbiamo
introdotto il termine smartcard.
Abbiamo effettuato alcune classificazioni fondamentali (tra cui,
le smartcard a memoria e a
microprocessore) e presentato
gli standard internazionali di
riferimento, formulati dall’ISO,
che le smartcard più diffuse
devono seguire. Nel secondo e
terzo articolo, sono state approfondite
rispettivamente
le
54 TUTORIAL
smartcard a memoria (in particolare quelle basate sul chip
SLE4442) e le smartcard a
microprocessore (standard e
“meno standard”). Nella quarta
parte, abbiamo finalmente
messo mano al saldatore, realizzando un economico lettore
universale di smartcard, denominato UniReader, compatibile
sia con le smartcard a memoria
che con quelle a microprocessore. Infine, nel precedente articolo (quinta parte), abbiamo utilizzato le smartcard a memoria in
alcune applicazioni pratiche,
realizzando un firmware ad hoc
per l’UniReader (sia in versione
stand-alone, sia in versione
slave).
In questa parte e nella successi-
va, descriveremo nei dettagli
una smartcard che, con molta
probabilità, è già in nostro possesso, magari in più esemplari: la
SIM dei telefoni GSM. Il lettore
che ci segue sin dall’inizio sa
bene che questo oggetto non è
altro che una smartcard a microprocessore che può essere gestita alla stessa stregua delle altre
smartcard. Descriveremo gli
standard a cui le SIM fanno riferimento, le funzioni nel sistema
GSM, i comandi che permettono
la gestione dei dati interni, l’organizzazione delle varie informazioni utilizzate dal sistema.
Breve panoramica sulle smartcard a microprocessore
Consiglio al lettore che non
MODUGNO-impaginato
1-10-2004
17:11
Pagina 55
TUTORIAL
avesse letto il nostro tutorial di
recuperare almeno la terza parte
che contiene una descrizione
dettagliata sulle smartcard a
microprocessore (oltre alla
prima parte che considero propedeutica). In questo breve paragrafo farò solo una veloce panoramica su questo tipo di carte per
“rinfrescare” la memoria.
Le smartcard a microprocessore
sono delle normali smartcard
che integrano internamente, a
differenza delle semplici smartcard a memoria, un vero e proprio microprocessore, una
memoria volatile e veloce
(RAM), una memoria permanente più lenta (EEPROM o
FLASH) ed un porta seriale.
Possiamo paragonare una di
queste smartcard ad un vero e
proprio computer miniaturizzato, dotato di una CPU, di una
memoria e di una sola periferica
di I/O, la porta seriale ISO7816
(da non confondere con la classica RS232 presente sui PC).
Attraverso la porta seriale la
carta comunica con il mondo
esterno (dispositivo di interfaccia) ricevendo e rispondendo ai
comandi più svariati. Questo
collegamento seriale utilizza un
preciso protocollo di trasferimento dei dati, tra cui il più diffuso e semplice è quello denominato “T=0”, descritto nella
parte terza dello standard
ISO7816. Il microprocessore,
insieme alla memoria RAM,
effettua tutte le elaborazioni
necessarie per la gestione dei
dati memorizzati nella carta (lettura e scrittura) e per la esecuzione degli eventuali algoritmi
di cifratura necessari per la
segretezza delle transazioni. La
memoria non volatile è naturalmente usata per la memorizzazione dei dati dell’utente o dell’applicazione anche ad alimentazione assente: numeri seriali,
dati anagrafici, chiavi crittografiche, ecc.
Come abbiamo visto nella terza
parte, lo standard ISO7816-3
definisce un preciso protocollo
per l’invio dei comandi. Questi
sono formati da una intestazio-
www.artek.it
NUTCHIP
IL TODDLER
TAOS
LU - LA
divertirsi
è facile
un ROBOT che cammina
per voi IN KIT
Sensore di colore
Logic Analyzer USB
200 MHz
•
•
•
•
•
Divertirsi è facile
4 Ingressi
4 Uscite
1 Comparatore
Opera con RTX Aurel
Opera con telecomandi TV
Discrimina 100 colori
per Basic Stamp o
Microcontroller
16 canali su porta USB
1 MByte di memoria per canale
Programmabile in 5 minuti
Rivenditori Welcome
STARTER KIT KIT08
per Micro MOTOROLA
MC68HC908 GP32
HS3
50 MHZ 12 BIT USB
QV502
PLAYER MP3
MINI TELECAMERA CCD
A COLORI
•
•
•
•
•
con Compact Flash
controllato via RS232
con Microfono completa di
Trasmettitore e
Ricevitore a 2,4 GHz
Oscilloscopio
Analizzatore di Spettro
Registratore Transitori
Voltmetro
Generatore Forme onda
Sali a bordo e naviga sul sito WEB ARTEK
per informazioni Tel. 0542.55900 - Fax 0542.55488
TUTORIAL
55
MODUGNO-impaginato
1-10-2004
17:11
Pagina 56
TUTORIAL
ne di cinque byte, denominati
CLA INS P1 P2 LEN e trasferiti
sempre dal lettore verso la
smartcard: in altre parole, la
smartcard non può mai decidere di iniziare un trasferimento
dati di sua iniziativa, ma può
solo rispondere ai comandi ricevuti dal dispositivo di interfaccia. Subito dopo l’invio di questo comando, la smartcard
risponde con un procedure byte
che indica al lettore come gestire correttamente la tensione di
programmazione Vpp: nella
maggior parte dei casi, quando
la tensione Vpp non viene usata,
il procedure byte coincide con il
byte INS. Dopo l’invio di questo
byte, la smartcard può rispondere con un pacchetto di byte
oppure il lettore può inviare
ulteriori dati alla smartcard: il
verso del trasferimento dei dati
dipende dal tipo di comando
inviato
(fondamentalmente
dalla coppia dei byte CLA e
INS). È necessario che sia il lettore che la smartcard abbiano la
stessa conoscenza a priori del
significato dei vari comandi e,
quindi, della direzione di trasferimento dei byte. Se il comando
prevede un trasferimento dalla
carta verso il lettore, LEN=0
indica l’invio di 256 byte; viceversa, se il comando indica un
trasferimento dal lettore verso la
carta, LEN=0 indica che non ci
sarà alcun trasferimento di byte.
ISO7816 PARTE 4
Nell’articolo sulle smartcard a
microprocessore abbiamo fatto
riferimento
allo
standard
ISO7816 parte 3. Come abbiamo visto, questo standard si
limita a definire, per le smart-
56 TUTORIAL
card asincrone (cioè quelle a
microprocessore), la struttura
dell’ATR ed il protocollo T=0 per
il trasferimento di dati e comandi nelle due direzioni. Non entra
nel merito dell’organizzazione
interna dei dati né su come
devono essere gestiti all’interfaccia lettore-smartcard. In altre
parole, limitandosi alla terza
parte dell’ISO7816, è possibile
creare smartcard e lettori
incompatibili tra loro. Basti pensare, per esempio, ad una diversa codifica dei comandi (CLA
e/o INS).
È per questo motivo che è stata
pubblicata una quarta parte
dello standard ISO7816 che
definisce una organizzazione
logica dei dati alla sezione
smartcard-lettore.
L’implementazione interna, cioè
l’allocazione dei dati e la loro
codifica nella memoria interna
della smartcard, rimane ancora
non definita e può essere liberamente ideata dallo sviluppatore
dell’applicazione.
La cosa importante è che questi
dati possano “apparire” nel
modo standard al lettore.
Poiché le SIM GSM seguono
anche questo standard, è utile
approfondirne almeno alcuni
aspetti principali.
Organizzazione logica dei
dati: i file
Così come in un PC, anche nelle
smartcard ISO7816-4 i dati vengono organizzati in una struttura gerarchica di file. Lo standard
definisce i Dedicated File (DF) e
gli Elementary File (EF): i primi
sono una sorta di cartelle, spesso chiamati directory, mentre i
secondi assomigliano ai file veri
e propri di un PC. Il DF principale viene chiamato Master File
(MF) e rappresenta la radice
della struttura gerarchica ad
albero. L’MF può contenere altri
DF oppure EF. A loro volta, i DF
di primo livello possono contenere altri DF oppure EF e così
via. Ogni file è individuato da un
identificatore (file identifier) di
due byte. L’MF è sempre identificato da ‘3F00’, il valore ‘FFFF’ è
riservato per usi futuri, mentre il
valore ‘3FFF’ è riservato per la
selezione di un file mediante
percorso relativo (vedi oltre).
Come nel vecchio DOS, anche
per le smartcard c’è una directory (DF) corrente; inoltre, c’è
anche un file (EF) corrente.
All’inizio della sessione (dopo
l’ATR) l’MF è la directory corrente, mentre non c’è alcun file
selezionato. Successivamente, è
possibile selezionare un diverso
file (DF o EF) mediante il comando SELECT FILE, attraverso le
seguenti modalità:
• referenziando il suo identificatore a 2 byte;
• referenziando il suo percorso
assoluto (a partire dall’MF) o
relativo (a partire dal DF corrente) citando gli identificatori di tutti i file intermedi;
• referenziando l’identificatore
breve (short file identifier) del
file (se implementato);
• referenziando il nome univoco (da 1 a 16 byte) associato
al DF che si vuole selezionare
(se implementato).
Lo standard prevede due tipi di
file: transparent file e record file.
I primi sono visti come una
sequenza di byte a partire dal-
MODUGNO-impaginato
1-10-2004
17:11
Pagina 57
TUTORIAL
l’indirizzo 0 fino all’indirizzo n-1,
dove n è la dimensione dei dati
del file. Per esempio, è possibile
memorizzare un numero di serie
o una chiave crittografica in un
file di questo tipo. I file basati su
record, invece, possono essere
letti e scritti solo a gruppi di n
byte, dove n è generalmente
costante e dipende dal file. Per
esempio, è possibile utilizzare
un file di record per memorizzare una rubrica di numeri di telefono: ogni nominativo occuperà
un intero record. Esistono tre
tipi di file basati su record:
linear fixed file, linear variable
file e cyclic file. I linear fixed file
sono una sequenza di record a
lunghezza fissa a cui si può
accedere mediante un numero
di record. I linear variable file
sono identici ai fixed con la differenza che la dimensione di
ogni record può essere variabile (non sono molto usati nelle
applicazioni comuni). Infine, i
cyclic file sono sempre basati su
record a lunghezza fissa a cui si
può accedere ciclicamente: l’ultimo record aggiunto (in ordine
di tempo) sarà il primo ad essere letto.
Nei transparent file è possibile
accedere ai dati mediante un
offset relativo al primo byte
(indirizzo 0). Nei file strutturati a
record, invece, si può accedere
ai dati mediante un numero di
record (a partire da 1) oppure
mediante un puntatore ad un
record corrente.
Il software di gestione della
smartcard può conoscere il tipo
di file e tutti i suoi attributi
(dimensione, numero di record,
lunghezza dei record, ecc.) tramite la risposta al comando
SELECT FILE che rappresenta il
File Control Information (FCI). È
una sequenza di byte che permette di risalire al tipo di file ed
a tutti i suoi parametri.
Ad ogni file è associato un meccanismo di sicurezza che protegge i dati da operazioni di lettura, scrittura, ecc. Per esempio,
se un file è protetto in lettura,
sarà necessario inserire correttamente un codice segreto (PIN)
per abilitare tale operazione.
Anche il tipo di protezione è
indicato nell’FCI.
In realtà, lo standard ISO7816-4
è molto complicato e generico e
descrive una serie di comandi
per l’accesso ai dati memorizzati nei file della smartcard:
comandi di lettura e scrittura, di
autenticazione, di selezione dei
file, ecc. Nella maggior parte dei
casi pratici, però, sono implementati solo una parte dei
comandi e delle funzionalità
descritte nello standard. Per
questo motivo, non approfondiamo ulteriormente il contenuto di queste direttive e rivolgiamo subito la nostra attenzione
alle SIM.
SUBSCRIBER IDENTITY
MODULE
Cos’è una SIM
La SIM (Subscriber Identity
Module) è una smartcard utilizzata nel ben noto sistema di
telefonia cellulare GSM per
scopi di autenticazione dell’utente e sicurezza delle conversazioni durante le comunicazioni
con gli apparati di rete del proprio gestore di servizi. Gli innumerevoli standard che formano
il sistema GSM sono formalizzati dall’ETSI e disponibili gratuita-
mente sul suo sito, previa registrazione. I più importanti documenti relativi alle SIM e al loro
funzionamento, sono:
• GSM 02.17 “Subscriber
Identity Modules, Functional
Characteristics”, che descrive
le funzionalità (a livello logico) ed il ruolo di una SIM
all’interno del sistema GSM;
• TS 100 977 (3GPP TS 11.11)
“Specification of the SIM-ME
Interface”, che descrive l’interfaccia (ad un livello tecnico) tra la SIM ed il telefono
cellulare.
Una SIM è una smartcard (o ICCard, utilizzando i termini standard) che individua un cliente, o
un abbonamento, di un determinato provider. La responsabilità della gestione della carta è
del provider che la fornisce al
cliente sottoscrittore di un qualsiasi abbonamento.
Il sistema GSM ha introdotto per
la prima volta, nell’ambito della
telefonia mobile, l’idea di separare logicamente (e fisicamente)
il telefono cellulare dall’utente e
dai suoi dati. Usando la terminologia degli standard, il telefonino viene definito Mobile
Equipment (ME), mentre il telefonino dotato di SIM è definito
Mobile Station (MS). L’ME è solo
l’apparato elettronico che permette di effettuare e ricevere
telefonate sfruttando la rete
GSM, ma ha bisogno della SIM
per acquisire i permessi e autenticare il cliente presso il gestore
telefonico (solo le telefonate
d’urgenza possono essere effettuate senza una SIM valida inserita nell’ME), oppure per deci-
TUTORIAL
57
MODUGNO-impaginato
1-10-2004
17:11
Pagina 58
TUTORIAL
frare il traffico dati (voce, SMS,
ecc.) da e verso la rete.
Sono previsti due tipi di smartcard a livello fisico: le IC-Card,
che hanno le stesse dimensioni
delle smartcard ISO7816 (tipo
carta di credito) e le Plug-In SIM
che hanno una dimensione
ridotta (25x15 mm). Le prime
possono normalmente essere
estratte dal telefonino in modo
molto semplice e possono essere delle carte multiapplicazioni
di cui il GSM è solo una di queste. Il secondo tipo di carta,
molto più piccolo delle IC-Card,
è stato introdotto per permettere la miniaturizzazione dei telefonini e, normalmente, è semipermanente. A parte la dimensione fisica, elettricamente e
logicamente i due tipi di SIM
sono identici. Faccio notare che
in commercio esistono degli
adattatori che permettono di
trasformare una Plug-In SIM in
una IC-Card. Consiglio al lettore
che volesse sperimentare con le
SIM mediante l’UniReader, così
come descritto nel prossimo
articolo, di procurarsi questo
adattatore, dal costo irrisorio,
presso tabaccherie o negozi per
telefonia, in quanto il nostro lettore prevede solo le IC-Card. In
alternativa, è possibile costruirsene uno facendo del semplice
bricolage, ritagliando opportunamente un cartoncino (o plastica) rigido dello spessore di
una SIM e incollando due fogli
da entrambe le parti, in modo
che rimanga esternamente una
finestrella per l’inserimento della
SIM e per i suoi contatti.
Autenticazione
Il sistema di autenticazione in
58 TUTORIAL
una qualsiasi rete di telecomunicazioni è estremamente importante poiché potrebbe inficiarne
il reale utilizzo e la sua diffusione. Basti pensare alla precedente tecnologia di telefonia cellulare ETACS e ai numerosissimi casi
di clonazione dell’identità dell’utente. Il sistema GSM è completamente digitale e permette,
quindi, di utilizzare tecniche più
efficaci di autenticazione (crittografia). In questo paragrafo farò
un piccolo accenno al meccanismo utilizzato dalla rete GSM
per riconoscere un cliente che
ha diritto di usufruire dei servizi
messi a disposizione dall’infrastruttura.
Ogni SIM rilasciata al cliente dal
gestore, proprietario di una rete
di telefonia cellulare GSM
(PLMN, Public Land Mobile
Network), è individuata univocamente da un numero, chiamato
IMSI
(International
Mobile
Subscriber Identity) formato al
più da 15 cifre decimali: MCC
(Mobile Country Code) di 3 cifre,
che individua la nazione dell’operatore (222 per l’Italia); MNC
(Mobile Network Code), che indi-
Figura 1: Procedura di autenticazione alla rete GSM
vidua l’operatore all’interno
della nazione (10 per Vodafone
in Italia); MSIN (Mobile Station
Identification Number) al più di
10 cifre, che rappresenta il
numero seriale creato dal provider e che individua univocamente un suo cliente. Non è un
numero segreto, tant’è che è
possibile leggerlo, come faremo
nel prossimo articolo, direttamente dalla SIM selezionando il
file relativo.
Associato all’IMSI c’è un altro
identificatore di 16 byte, denominato Ki, che individua univocamente il cliente. Il numero Ki
è memorizzato segretamente
all’interno della SIM, da cui è
impossibile leggerlo e all’interno
degli apparati di rete del gestore. Infine, la SIM ha la possibilità
di eseguire un algoritmo crittografico (definito A3) che permette di trasformare un numero
casuale di 16 byte (RAND) in un
numero di 4 byte (SRES), utilizzando come chiave la Ki. In figura 1 è mostrato il flusso di informazioni tra la rete GSM e la SIM
del cliente (tramite l’ME) durante la fase di autenticazione alla
MODUGNO-impaginato
1-10-2004
17:11
Pagina 59
TUTORIAL
rete del gestore.
All’accensione (o quando è
necessaria
l’autenticazione),
l’ME richiede l’IMSI alla SIM e lo
invia alla rete dell’operatore
mediante l’interfaccia radio. Gli
apparati di rete controllano l’esistenza dell’IMSI all’interno di un
proprio database e, in caso affermativo, trasmettono alla SIM
(tramite l’ME) un numero casuale di 16 byte denominato RAND.
Indipendentemente, la SIM e la
rete calcolano il numero di 4
byte SRES a partire dal numero
casuale RAND e dalla chiave crittografica segreta Ki, utilizzando
l’algoritmo comune A3. A questo
punto, l’ME richiede alla SIM il
valore SRES calcolato e lo trasmette al gestore che può controllare la coincidenza tra l’SRES
calcolato dalla SIM e quello calcolato dagli apparati di rete. Se i
due numeri sono uguali, vuol
dire che la SIM è autentica
(conosce sia l’algoritmo A3 che
la chiave segreta Ki) e può essere abilitata ai servizi di rete.
Faccio notare che lo standard
GSM non definisce i dettagli dell’algoritmo A3 ma solo l’input (la
chiave Ki di 16 byte ed il numero RAND di 16 byte) e l’output (il
numero di 4 byte SRES); l’operatore telefonico può utilizzare un
qualsiasi algoritmo e, possibilmente, tenerlo segreto.
Questo sistema di autenticazione è molto efficace, poiché si
basa sulla segretezza della chiave Ki memorizzata nel database
del gestore e nella SIM del cellulare. Essendo la SIM una smartcard a microprocessore, è possibile effettuare elaborazioni
(come l’esecuzione dell’algoritmo A3) e rendere invisibli i dati
(come la Ki), rendendo il sistema molto più sicuro.
In realtà, il meccanismo descritto in precedenza è semplificato
rispetto al caso reale. Per esempio, non è stata presa in considerazione la possibilità che
l’IMSI ricevuto dalla rete appartenga ad un altro provider,
magari di un’altra nazione. In
questo caso, è necessario decidere se è possibile effettuare il
roaming consultando le infrastrutture del provider del cliente, mediante uno scambio di
informazioni ben più complesso. Accenno solo al fatto che l’autenticazione alla rete avviene di
continuo durante l’operatività
dell’ME, sfruttando spesso un
numero seriale temporaneo
(TMSI) piuttosto che l’IMSI per
aumentare l’efficienza del sistema.
Segretezza
Oltre al classico problema di
autenticazione, una rete di telecomunicazioni deve anche
garantire la segretezza delle
informazioni scambiate. Ciò è
ancor più importante nelle reti
di telefonia mobile, poiché il
mezzo trasmissivo, cioè la tratta
radio tra l’ME e la stazione base
(comunemente detta cella o,
più tecnicamente, BTS) è “di
dominio pubblico”. Anche in
questo caso, la tecnologia digitale ci permette di utilizzare tecniche di crittografia per cifrare le
informazioni in transito e renderle illeggibili ad eventuali
“ascoltatori non autorizzati”.
Nel vecchio sistema di telefonia
mobile analogico ETACS era
possibile, con appositi strumenti, demodulare il segnale trasmesso in chiaro (per esempio,
mediante un analizzatore di
spettro evoluto) ed ascoltare le
telefonate in corso.
Il sistema GSM, invece, prevede
la cifratura di tutti i messaggi
scambiati tra l’MS (il telefonino)
e la BTS (l’antenna più vicina
con cui l’MS comunica) mediante un algoritmo standardizzato
ed implementato in ogni cellulare GSM e denominato A5.
Durante la comunicazione tra
MS e BTS, i dati vengono cifrati
mediante l’algoritmo A5, utilizzando una chiave crittografica
temporanea di 8 byte, memorizzata nella SIM del cellulare e
denominata Kc.
Quello che normalmente accade è che la SIM esegue sia l’algoritmo A3, descritto precedentemente ed utilizzato in fase di
autenticazione per la generazione del numero SRES, sia un altro
algoritmo, detto A8, per la
generazione della chiave di decifrazione dei messaggi Kc.
Spesso, la coppia degli algoritmi
A3 e A8 vengono implementati
come un unico algoritmo,
comunemente detto A38, all’interno della SIM, in modo che
vengano generati automaticamente sia il numero SRES, sia la
chiave Kc. Tutte le informazioni
che il telefonino scambia con
l’antenna sono codificate con
tale chiave. Essa viene cambiata
numerose volte durante una sessione (per esempio, una chiamata telefonica) per evitare che si
possa risalire alla chiave Kc,
intercettando
una
lunga
sequenza di dati codificati con
lo stesso codice.
Struttura logica di una SIM
Le SIM GSM sono delle smart-
TUTORIAL
59
MODUGNO-impaginato
1-10-2004
17:11
Pagina 60
TUTORIAL
card a microprocessore che
seguono gli standard ISO7816-3
e ISO7816-4. Per questo motivo, i dati sono organizzati logicamente in file, così come
descritto in precedenza. Come
al solito, esiste un MF con identificatore ‘3F00’ e numerosi DF
ed EF figli. Nelle SIM, i DF di
primo livello (figli diretti
dell’MF) sono identificati da
“7Fxx”, mentre i DF di secondo
livello sono identificati da
“5Fxx”. Gli EF contenuti direttamente nell’MF sono identificati
da ‘2Fxx’, quelli contenuti nei
DF di primo livello sono identificati da “6Fxx”, infine quelli contenuti nei DF di secondo livello
da ‘4Fxx’. In altre parole, il
primo byte dell’identificatore
permette di risalire alla posizione (livello) del file all’interno
della
struttura
gerarchica.
Nell’assegnazione degli identificatori è necessario che nessun
file abbia lo stesso identificatore
di un altro contenuto nella stessa directory (DF), così come non
possono esserci due file con lo
stesso nome in una stessa cartella di un PC.
Ad un EF è associato un header,
che indica il tipo di file ed i suoi
attributi ed un corpo dati di
dimensione variabile. Un DF,
invece, ha solo funzioni di contenitore (directory), quindi ha
solo un header senza dati. Per
poter accedere correttamente ai
dati contenuti in un file, è necessario leggere e interpretare
l’header associato.
In una SIM sono previsti tre tipi
di EF:
• transparent file: una sequenza
di byte a cui si può accedere
60 TUTORIAL
Figura 2: Possibile struttura di file in una SIM
mediante un offset relativo
(indirizzo), rispetto al primo
byte del file (indirizzo 0);
• linear fixed file: una sequenza
di record a lunghezza fissa a
cui è possibile accedere
mediante un numero di
record (a partire da 1), un
puntatore o una ricerca;
• cyclic file: una sequenza ciclica di record a lunghezza fissa
in cui esiste un collegamento
tra il primo record e l’ultimo
record, in modo da memorizzare dati in ordine cronologico.
Selezione dei file
Così come descritto nello standard ISO7816-4, esiste un
comando apposito per la selezione dei file in una SIM, definito SELECT FILE. Dopo l’ATR,
viene automaticamente selezionata la directory MF.
Selezionando un DF (o di nuovo
l’MF), viene modificata la directory corrente. Dopo questa operazione, non c’è alcun EF corrente. Selezionando un EF, viene
impostato come DF corrente la
directory padre dell’EF selezionato. Ovviamente, l’EF corrente
risulta quello appena selezionato.
In qualsiasi momento, in funzione dell’ultimo file selezionato, è
possibile selezionare:
1 un qualsiasi file contenuto
nella directory corrente;
2 un qualsiasi DF contenuto nel
DF padre della directory corrente;
3 il padre della directory corrente;
4 il DF corrente;
5 il Master File.
Per rendere più chiaro il meccanismo, più semplice da capire
che da spiegare, consideriamo
l’esempio in figura 2, dove è
mostrato una possibile struttura
gerarchica di file memorizzata in
una SIM (l’esempio è identico a
quello presente sullo standard).
In Tabella 1 sono mostrati tutti i
file che è possibile selezionare,
mediante un singolo comando
SELECT FILE, a partire da un
altro file corrente. Per esempio,
se il file corrente è l’EF2, sarà
possibile selezionare MF (5),
DF1 (4), DF2 (2), DF3 (1). Tra
parentesi è indicata la regola
MODUGNO-impaginato
1-10-2004
17:11
Pagina 61
TUTORIAL
relativa che permette la selezione di quel file.
Ultimo file selezionato
Selezioni valide
MF
DF1, DF2, EF1
Anche se non è stato messo in
evidenza, è sempre possibile
selezionare il file corrente, cioè
l’ultimo file selezionato.
DF1
MF, DF2, DF3, EF2
DF2
MF, DF1, EF3, EF4
DF3
MF, DF1, EF5
Modalità d’accesso ai file
Ogni EF in una SIM ha una
modalità d’accesso relativo ad
ogni comando (lettura o ricerca,
scrittura, abilitazione, ecc). Tale
modalità assume un valore intero
da 0 a 15, secondo la Tabella 2.
EF1
MF, DF1, DF2
EF2
MF, DF1, DF2, DF3
EF3
MF, DF1, DF2, EF4
EF4
MF, DF1, DF2, EF3
EF5
MF, DF1, DF3
Tabella 1: Selezioni valide per la struttura di file mostrata in Figura 2.
I due codici segreti CHV1 e CHV2
rappresentano dei meccanismi di
sicurezza che permettono solo
all’utente, che conosce tali codici, di accedere alle informazioni
più sensibili della SIM (rubrica,
SMS, IMSI, impostazioni, ecc). Il
CHV1 (Card Holder Verification 1)
è il PIN (vecchia terminologia)
formato da un minimo di 4 ad un
massimo di 8 cifre decimali, il
CHV2 (Card Holder Verification 2)
è un altro codice segreto che può
essere utilizzato per altri scopi
(blocco chiamate in entrata e/o
in uscita, ecc).
Tali condizioni per l’accesso al
file non sono da considerare in
modo gerarchico: in altre parole, l’aver inserito correttamente
il CHV2 non permette di effettuare comandi su file che prevedono l’inserimento del CHV1.
Come molti sapranno, è possibile inserire fino a tre volte un
CHV1 errato dopo le quali il
codice viene bloccato. Per poter
essere sbloccato, sarà necessario
utilizzare un altro codice segreto
denominato UNBLOCK CHV1
(PUK nella vecchia terminologia). Lo stesso vale anche per il
CHV2 che ha un suo relativo
UNBLOCK CHV2 (PUK2). È possibile inserire in modo errato
l’UNBLOCK CHV1 o 2 un massimo di 10 volte consecutive,
dopo le quali il codice bloccato
non può più essere sbloccato
dal cliente e la SIM deve essere
TUTORIAL
61
MODUGNO-impaginato
1-10-2004
17:11
Pagina 62
TUTORIAL
Livello
Modalità d’accesso
0
ALW (always, sempre): operazione sempre permessa
1
CHV1: operazione permessa solo dopo la verifica del codice segreto CHV1
(o se il codice CHV1 è disabilitato)
2
CHV2: operazione permessa solo dopo la verifica del CHV2
3
Riservato per usi futuri
da 4 a 14 ADM: operazione permessa solo durante la fase amministrativa (riservata al gestore)
15
NEV (Never, mai): operazione mai permessa
Tabella 2: Modalità d’accesso di un file
riportata al gestore.
Il CHV1 può essere anche disabilitato dall’utente: in questo caso,
la modalità d’accesso CHV1 sarà
sempre soddisfatta.
Nessuna condizione per l’accesso è
associata alle directory (DF e MF).
Comandi
Così come per tutte le smartcard ISO7816-3, il dispositivo
d’interfaccia (nel caso GSM è
rappresentato dall’ME) colloquia con la carta mediante dei
comandi trasmessi e delle
risposte ricevute. Tali comandi
e risposte non sono altro che
una sequenza di byte trasportata mediante un preciso protocollo, per esempio il già citato
T=0.
Tutte le SIM prevedono almeno
questo protocollo, ma possono
offrire altri sistemi di trasmissione più evoluti (indicati, come al
solito, nell’ATR). Per i nostri
esperimenti utilizzeremo sempre il protocollo standard T=0.
Usando la terminologia dello
standard ISO, la sequenza di
byte che forma un comando
trasmesso dall’interfaccia o la
risposta della SIM viene chiamata
APDU
(Application
62 TUTORIAL
Protocol Data Unit). Nel primo
caso si parlerà di command
APDU
(o
semplicemente
comando), nel secondo di
response APDU (o semplicemente risposta).
Normalmente, ad ogni comando c’è sempre una risposta da
parte della SIM.
Come già detto nella terza
parte del tutorial, un comando
è formato da una intestazione
(header) di cinque byte ed
eventualmente dei dati. Nel
caso siano presenti dei dati, il
byte LEN (il quinto dell’intestazione) coincide con il numero
dei byte trasferiti alla SIM.
Quest’ultima risponde con due
byte che rappresentano la
Status Word, cioè il risultato
dell’elaborazione del comando.
Se, invece, deve avvenire un
trasferimento opposto di dati
(dalla SIM all’ME), il comando
sarà formato dalla sola intestazione (cinque byte) dove il byte
LEN indicherà il numero di byte
che la SIM dovrà trasmettere,
mentre la risposta sarà formata
da LEN byte di dati, più i due
byte della Status Word. È da
notare che, in questo caso, se
LEN=0, ci sarà un trasferimento
di 256 byte dalla SIM all’ME.
In realtà, la casistica è più
complicata per i seguenti due
motivi:
• un solo comando potrebbe
prevedere il trasferimento
simultaneo di dati in entrambe le direzioni;
• l’ME potrebbe non sapere a
priori il numero dei byte che
la SIM dovrà trasmettere,
quindi non può “riempire”
correttamente il byte LEN del
comando relativo.
Per risolvere entrambe le situazioni, è previsto un comando
dedicato (GET RESPONSE) che
permette all’ME di ottenere
una nuova risposta dalla SIM.
Per maggiore chiarezza, in figura 3 sono rappresentati tutti i
cinque casi possibili di trasferimento dati tra ME e SIM.
Il primo caso è semplice e prevede l’invio di un comando
dall’ME alla SIM senza alcun
dato né in uscita né in entrata.
Il byte LEN sarà quindi nullo e
la risposta della SIM conterrà
solo i due byte della Status
Word (90 00, nel caso non ci
siano errori).
MODUGNO-impaginato
1-10-2004
17:11
Pagina 63
TUTORIAL
Il secondo caso è relativo al
solo trasferimento di dati, di
lunghezza nota, dalla SIM
verso l’ME. Il comando è for-
mato solo dall’header di cinque byte dove LEN rappresenta
il numero di byte da trasferire
(se LEN=0, i dati trasferiti
Figura 3: Rappresentazione dei cinque casi di trasferimenti ME-SIM
saranno 256).
L’APDU di risposta sarà formato
dai LEN byte richiesti più i due
byte della Status Word.
Nel terzo caso, l’ME richiede
alla SIM dei dati di cui non
conosce la lunghezza.
L’ME trasmette un comando
con il byte LEN=0 e la SIM
risponde con una Status Word
9F L1, dove L1 rappresenta la
lunghezza dei dati. A questo
punto, l’ME può trasmettere un
comando GET RESPONSE per
ottenere i dati richiesti, dove
specifica correttamente il byte
LEN=L2, normalmente uguale
a L1 (in alcuni casi potrebbe
essere inferiore).
Anche il quarto caso è molto
semplice e prevede un trasferimento di dati solo dall’ME
verso la SIM.
Infine, l’ultimo caso è il più
complicato, poiché prevede un
trasferimento di dati dall’ME
alla SIM, ma anche un trasferimento nella direzione opposta
(di lunghezza conosciuta o
meno). In questo caso l’ME trasmette un comando in cui invia
i propri dati ed aspetta una
Status Word del tipo 9F L1,
dove L1 rappresenta la lunghezza dei dati di risposta.
Successivamente, l’ME invia il
comando GET RESPONSE in cui
riempie correttamente il byte
LEN con L2, normalmente pari
ad L1 o inferiore.
In Tabella 3 è mostrato l’elenco
di tutti i comandi che una SIM
riconosce, insieme alla codifica
dei parametri INS, P1, P2 e
LEN. Il verso di trasmissione dei
dati è indicato nella colonna
S/R dove S indica che i dati
sono trasmessi (Send) dall’ME
TUTORIAL
63
MODUGNO-impaginato
1-10-2004
17:11
Pagina 64
TUTORIAL
ed R indica che i dati sono ricevuti (Received) dall’ME.
Ovviamente, alcuni comandi
possono prevedere entrambe le
direzioni (grazie al comando
GET RESPONSE).
Per l’applicazione GSM, il byte
CLA del comando è sempre
pari ad ‘A0’.
Alcuni comandi gestiscono
direttamente i file (EF o DF)
memorizzati nella SIM, altri
hanno scopi diversi (per esempio, l’esecuzione degli algoritmi A3 e A8). In Tabella 4 sono
elencati tutti i comandi che
riguardano i file, specificandone il tipo su cui possono essere
eseguiti. Per esempio, il comando SELECT e STATUS possono
essere effettuati su tutti i tipi di
file, mentre il comando READ
BINARY può essere eseguito
solo su un transparent file.
STANCHI DI GIOCARE?
Cosa ci aspetta nel prossimo
articolo
Terminiamo qui questo articolo
per non renderlo troppo lungo
e noioso. Nel prossimo continueremo la nostra analisi sul
funzionamento delle SIM, in
COMANDO
INS
P1
P2
LEN
S/R
SELECT
A4
00
00
02
S/R
STATUS
F2
00
00
lunghezza
R
READ BINARY
B0
indirizzo alto
indirizzo basso
lunghezza
R
UPDATE BINARY
D6
indirizzo alto
indirizzo basso
lunghezza
S
READ RECORD
B2
n. record
modalità
lunghezza
R
UPDATE RECORD
DC
n. record
modalità
lunghezza
S
SEEK
A2
00
tipo/modalità
lunghezza
S/R
INCREASE
32
00
00
03
S/R
VERIFY CHV
20
00
n. CHV
08
S
CHANGE CHV
24
00
n. CHV
10
S
DISABLE CHV
26
00
01
08
S
ENABLE CHV
28
00
01
08
S
UNBLOCK CHV
2C
00
00 o 02
10
S
INVALIDATE
04
00
00
00
-
REHABILITATE
44
00
00
00
-
RUN GSM ALGORITHM
88
00
00
10
S/R
SLEEP
FA
00
00
00
-
GET RESPONSE
C0
00
00
lunghezza
R
TERMINAL PROFILE
10
00
00
lunghezza
S
ENVELOPE
C2
00
00
lunghezza
S/R
FETCH
12
00
00
lunghezza
R
TERMINAL RESPONSE
14
00
00
lunghezza
S
Tabella 3: Elenco dei comandi di una SIM
64 TUTORIAL
MODUGNO-impaginato
1-10-2004
17:11
Pagina 65
TUTORIAL
particolare descriveremo in dettaglio i comandi ed i file più
importanti. Inoltre, tramite un
apposito
firmware
per
l’UniReader vedremo come è
possibile sperimentare direttamente con le SIM senza l’utilizzo di un telefonino. Con un
semplice software per PC, saremo quindi capaci di leggere e
salvare sul nostro computer la
rubrica e gli SMS memorizzati
nella scheda.
BIBLIOGRAGIA E LINK
Normative GSM (in inglese):
www.etsi.org
Standard ISO7816 (in inglese,
a pagamento): www.iso.org
Comando
MF DF Transparent Linear-fixed Cyclic File
SELECT
✓
✓
✓
✓
✓
STATUS
✓
✓
✓
✓
✓
READ RECORD
✓
✓
UPDATE RECORD
✓
✓
SEEK
✓
READ BINARY
✓
UPDATE BINARY
✓
INCREASE
¸
INVALIDATE
✓
✓
✓
REHABILITATE
✓
✓
✓
Tabella 4: Comandi relativi ai file.
VISUAL PARSIC Compilatore grafico per Microchip Picmicro
Per chi vuole scrivere un programma in Assembler senza scrivere un solo rigo di codice
Display LCD/VFD
Noritake Cristallfontz
Programmatori PIC
ICD Debugger
Programmatori Willem
originali olandesi
Gruppi di continuità
da 500 VA fino a 160 KVA
Schede PLC per PICmicro
Telecamere a colori e b/n
trasmittenti e via cavo
Display a carattere scorrevole
in offerta speciale
WWW.PARSICITALIA.IT
Via Rovereto, 13 - 48020 Savio (RA) - Tel 0544.927468 - Fax 178.6040078 - Email: [email protected]
TUTORIAL
65
MODUGNO-impaginato
16-11-2004
10:29
Pagina 52
TUTORIAL
SMARTCARD
settima parte
APPLICAZIONI CON LE SIM
di Giuseppe Modugno
[email protected]
In questo ultimo articolo, continueremo la descrizione delle SIM utilizzate nel
sistema GSM, commentando i comandi ed i file più importanti.
Successivamente, svilupperemo un apposito firmware per il microcontrollore
PIC16F628 del lettore UniReader per la gestione di smartcard asincrone
ISO7816. Infine, mediante un software per PC ad hoc, scritto in Visual Basic,
potremo interagire direttamente con una SIM senza l’utilizzo di un telefonino,
per esempio per salvare sul nostro computer il contenuto della rubrica e gli SMS.
RIPRENDIAMO LA NOSTRA
PARTITA A CARTE
Cosa ci siamo detti negli
articoli precedenti
Siamo arrivati all’ultima parte di
questo lungo tutorial sulle smartcard. Per coloro che non ci
hanno potuto leggere sin dall’inizio, facciamo qui un breve riassunto sul contenuto degli articoli precedenti.
Nella prima parte del tutorial,
abbiamo introdotto le smartcard
da un punto di vista teorico,
rispondendo a domande del
tipo: cosa sono, quanti tipi ne
esistono e come si classificano,
quali sono le normative internazionali di riferimento, ecc.
Nella seconda parte è stata
descritta in dettaglio una particolare tipologia di smartcard,
utilizzata in molte applicazioni
comuni: le smartcard a memo52 TUTORIAL
ria. In particolare, è stato analizzato il diffusissimo chip SLE4442.
Nella terza parte, invece, abbiamo analizzato le smartcard a
microprocessore, standard e
“meno standard”, introducendo termini come ATR, convenzione diretta/inversa, comandi
ISO7816-3, protocollo di comunicazione T=0, ecc.
Nella quarta parte, abbiamo
finalmente concretizzato le
conoscenze acquisite nei precedenti articoli, progettando e
realizzando un economico e
semplice da costruire lettore
universale di smartcard a
memoria e a microprocessore,
basato sul PIC16F628, chiamato
UniReader.
Potete trovare due esempi tipici
di applicazione delle smartcard a
memoria SLE4442 nella quinta
parte del tutorial, in cui è stata
mostrata la versatilità di
UniReader come lettore slave di
un PC o stand-alone.
Infine, nel precedente articolo
(sesta parte), abbiamo iniziato la
descrizione di una particolare
tipologia di smartcard a microprocessore, le SIM del sistema
GSM. Abbiamo descritto brevemente le normative ISO7816-4
che le SIM seguono. Inoltre,
abbiamo fatto una breve panoramica sui problemi di autenticazione e segretezza delle informazioni nella rete GSM, garantiti
proprio dalla SIM.
DESCRIZIONE DEI COMANDI
Ci siamo lasciati con un lungo
elenco di comandi previsti dalle
normative che tutte le SIM
devono correttamente interpretare. I più importanti saranno
qui analizzati.
MODUGNO-impaginato
16-11-2004
10:29
Pagina 53
TUTORIAL
Byte
Descrizione
Lunghezza
1-2
Riservati per usi futuri
2
3-4
Spazio disponibile nella directory non allocato ad alcun EF o DF
2
5-6
File ID
2
Tipo di file (01 per l’MF, 02 per DF)
1
Riservati per usi futuri
5
13
Lunghezza dei dati che seguono
1
14
Caratteristiche del file
1
15
Numero di DF contenuti nel DF selezionato
1
16
Numero di EF contenuti nel DF selezionato
1
17
Numero di codici segreti (CHV e simili)
1
18
Riservato per usi futuri
1
19
Stato CHV1
1
20
Stato UNBLOCK CHV1
1
21
Stato CHV2
1
22
Stato UNBLOCK CHV2
1
23
Riservato per usi futuri
1
7
8-12
24-34
Riservato per scopi di gestione della SIM
0÷11
Tabella 1: Struttura della risposta al comando SELECT per un DF
SELECT
È il comando che permette di
selezionare un file (EF o DF) della
SIM, specificando il suo identificatore a due byte. I file che è possibile selezionare sono quelli che
seguono le regole descritte nel
precedente articolo. Ricordo che
dopo l’ATR la directory selezionata è l’MF. Per poter selezionare,
per esempio, il DFTELECOM (7F10)
che è contenuto nell’MF, è necessario inviare alla SIM il seguente
APDU: A0 A4 00 00 02 7F 10.
Come indicato nella Tabella 3 del
precedente articolo, il comando
prevede un invio di dati dall’ME
alla SIM (l’identificatore del file di
due byte da selezionare, 7F10
nell’esempio di DFTELECOM) ed una
risposta da parte della SIM. Per
ottenere questa risposta, di lunghezza variabile, è necessario utilizzare il comando GET RESPONSE. Essa riporta il tipo di file
appena selezionato, i suoi attributi (dimensione totale, dimensione record, ecc), le modalità
d’accesso ed altre informazioni.
Essa ha una diversa struttura a
seconda che venga selezionato
un DF oppure un EF. Nel primo
caso, la sintassi della risposta al
comando SELECT è mostrata
nella Tabella 1: essa è formata da
almeno 22 byte ed al massimo
34. I campi in grigio sono opzionali e potrebbero non essere tra-
smessi dalla SIM.
Il byte 14 indica, tra l’altro, se la
SIM prevede una modalità di
funzionamento in cui il clock può
essere bloccato per diminuire il
consumo di energia (molto
importante in apparecchi portatili come un telefonino). Inoltre, se
il bit più significativo di questo
byte vale 1, il CHV1 (PIN) è disabilitato; al contrario, se tale bit è
nullo, il CHV1 è abilitato.
I byte dal 19 al 22 forniscono
maggiori informazioni relative ai
codici segreti CHV1, UNBLOCK
CHV1, CHV2 e UNBLOCK CHV2.
Nei quattro bit meno significativi
di ogni byte, è memorizzato il
TUTORIAL
53
MODUGNO-impaginato
16-11-2004
10:29
Pagina 54
TUTORIAL
Byte
Descrizione
Lunghezza
1-2
Riservati per usi futuri
2
3-4
Dimensione del file
2
5-6
Identificatore del file
2
7
Tipo di file (04 nel caso di un EF)
1
8
Riservato per usi futuri (il bit più significativo, nel caso di
cyclic file, indica la possibilità di usare il comando INCREASE)
1
Condizioni d’accesso
3
12
Stato del file
1
13
Lunghezza dei dati successivi
1
14
Struttura dell’EF
1
15
Lunghezza di un record (obbligatorio nel caso di linear fixed
e cyclic file)
1
Riservati per usi futuri
-
9-11
16 e seg.
Tabella 2: Struttura della risposta al comando SELECT per un EF
numero di tentativi rimasti per
l’inserimento del relativo codice
segreto (per i due CHV sono al
massimo 3, per i due UNBLOCK
CHV sono al massimo 10). Se
questi quattro bit sono tutti nulli,
il relativo codice segreto è bloccato: se si tratta di un CHV, si
potrà usare l’UNBLOCK CHV corrispondente per lo sblocco, altrimenti la SIM dovrà essere restituita al gestore, poiché non più
utilizzabile dall’utente.
Nel caso di selezione di un EF, la
risposta della SIM al comando
SELECT è formata da un minimo
di 14 byte (15 byte nel caso di
linear fixed e cyclic file), come
mostrato in Tabella 2. Come al
solito, i campi su sfondo grigio
sono opzionali e potrebbero non
essere trasmessi dalla SIM.
La dimensione del file (byte 3-4)
indica il numero dei byte di un
transparent file, oppure il nume-
54 TUTORIAL
ro dei record moltiplicato per la
dimensione di un record nel caso
di un linear fixed file e di un
cyclic file. Le condizioni d’accesso (byte 9-11) indicano i permessi necessari per effettuare le operazioni sul file. Il byte 9 indica i
permessi per il comando UPDATE
(nibble meno significativo) e
READ/SEEK (nibble più significativo). Il byte 10 contiene i permessi del comando INCREASE (nibble più significativo). Il byte 11
indica i permessi per il comando
INVALIDATE (nibble meno significativo) e per il comando REHABILITATE (nibble più significativo). Il nibble che rappresenta il
permesso relativo ad un comando può valere “0” per accesso
sempre consentito, “1” per
accesso consentito solo dopo
aver inserito correttamente il
CHV1, “2” per accesso consentito solo dopo aver inserito correttamente il CHV2, “F” per
accesso mai consentito.
La struttura del file (byte 14) vale
“00” per transparent file, “01”
per linear fixed file, “03” per
cyclic file. Infine, nel caso di file
basato su record, il byte 15 indica la lunghezza (in byte) di un
singolo record, altrimenti vale
“00”.
STATUS
La risposta a questo comando è
identica alla risposta ottenuta dal
comando SELECT sulla directory
corrente.
READ BINARY
È il comando che permette di
leggere i dati memorizzati all’interno di un transparent file. I
parametri dell’intestazione (P1 e
P2) indicano l’offset del primo
byte da leggere (a partire da 0),
mentre il byte LEN indica il
numero di byte da leggere. L’APDU di risposta contiene i byte
MODUGNO-impaginato
16-11-2004
10:29
Pagina 55
TUTORIAL
desiderati dell’EF correntemente
selezionato. Tale comando non
può essere usato sui linear fixed
file e sui cyclic file.
Naturalmente, può essere eseguito solo se il permesso relativo
al comando READ è soddisfatto.
UPDATE BINARY
Il comando UPDATE BINARY
permette di scrivere una parte
dei dati memorizzati in un
transparent file.
In questo caso, è il dispositivo
di interfaccia che trasmette i
dati da memorizzare, mentre la
SIM risponde solo con la Status
Word.
È necessario soddisfare il relativo permesso di UPDATE.
P1
P2
00
02
Next Record
Legge/scrive il record successivo a quello corrente.
00
03
Previous Record
Legge/scrive il record precedente a quello corrente.
Absoulte/Current Record
Legge/scrive il record corrente (n=0) oppure il record
numero n (n≠0) a partire dal primo. Il record corrente
non viene modificato.
n
04
Modalità
READ RECORD
Il comando READ RECORD permette di leggere un record dal
file corrente di tipo linear fixed o
cyclic. Ovviamente, è necessario
che sia soddisfatta la condizione
d’accesso in lettura relativa al
file.
Il record da leggere dipende dai
parametri P1 e P2 dell’header
Descrizione
Tabella 3: Modalità di lettura/scrittura di un record mediante i comandi READ/UPDATE RECORD
VISUAL PARSIC Compilatore grafico per Microchip Picmicro
Per chi vuole scrivere un programma in Assembler senza scrivere un solo rigo di codice
Display LCD/VFD
Noritake Cristallfontz
Programmatori PIC
ICD Debugger
Programmatori Willem
originali olandesi
Gruppi di continuità
da 500 VA fino a 160 KVA
Schede PLC per PICmicro
Telecamere a colori e b/n
trasmittenti e via cavo
Display a carattere scorrevole
in offerta speciale
WWW.PARSICITALIA.IT
Via Rovereto, 13 - 48020 Savio (RA) - Tel 0544.927468 - Fax 178.6040078 - Email: [email protected]
TUTORIAL
55
MODUGNO-impaginato
16-11-2004
10:29
Pagina 56
TUTORIAL
del comando, così come descritto nella Tabella 3.
Selezionando un file, non c’è
alcun record corrente: in questo
caso, la modalità Next restituisce
il primo, quella Previous l’ultimo
record. In un linear fixed file, se è
selezionato il primo record ed è
usata la modalità Previous oppure se è selezionato l’ultimo record
ed è usata la modalità Next, nessun record verrà letto e la SIM
risponderà con una Status Word
d’errore (94 02). Invece, in un
cyclic file, verrà letto il primo
record con la modalità Next se
l’ultimo record è quello corrente;
verrà letto l’ultimo record con la
modalità Previous se il record
corrente è il primo. Il record corrente viene modificato solo con
le modalità Next e Previous
Record.
UPDATE RECORD
Il comando UPDATE RECORD
modifica il contenuto di un
record all’interno del file corrente
(linear o cyclic), sempre che
siano verificati i permessi di scrittura. Anche per questo comando
è possibile usare le modalità
descritte in Tabella 3 relative al
comando READ RECORD. A differenza di questo, per i cyclic file è
possibile usare solo la modalità
Previous. In questo caso, il record
meno recente sarà modificato e
diventerà il record numero 1
della lista.
SEEK
Il comando SEEK permette di
ricercare un record all’interno di
un linear fixed file che inizia con
una particolare sequenza di byte.
E’ necessario avere i permessi di
56 TUTORIAL
lettura per poter utilizzare questo
comando.
Esistono due tipi di ricerca: il
primo tipo modifica solo il record
corrente, ma non prevede alcuna
risposta da parte della SIM; il
secondo tipo, oltre a modificare il
record corrente, trasmette in
risposta il numero di record
appena trovato. Se la ricerca non
ha successo, il record corrente
non viene modificato e la SIM
risponderà con la Status Word
d’errore (94 04). La massima lunghezza della stringa da ricercare
è 16 byte ma, naturalmente, non
può superare la dimensione di un
intero record. Esistono quattro
modalità di ricerca, elencate nella
Tabella 4.
Il nibble più significativo di P2,
indicato in Tabella con “x”, vale
0 per il primo tipo, 1 per il secondo tipo del comando SEEK.
Come al solito, se non c’è alcun
record corrente, la ricerca parte
dal primo record se P2=x2, dall’ultimo record se P2=x3. È il
comando che viene usato dal
telefonino quando si accede alla
rubrica della SIM per ricercare un
nome che inizia con una determinata sequenza di lettere.
VERIFY CHV
Tutti noi sappiamo che, all’accensione del telefonino, dobbiamo effettuare una semplice, ma
molto spesso noiosa, operazione
che è quella dell’inserimento del
PIN (sempre che non sia stato
precedentemente disabilitato).
Quello che realmente succede è
l’invio, da parte dell’ME, del
comando VERIFY CHV alla SIM.
Il comando prevede l’invio degli
8 byte che formano il CHV, mentre il byte P2 indica il codice da
verificare: CHV1 se P2=01, CHV2
se P2=02. Se il codice trasmesso
è uguale a quello memorizzato
nella SIM, il numero di tentativi
di inserimento viene inizializzato
al valore 3, altrimenti viene
decrementato di una unità.
Dopo tre tentativi consecutivi
errati, il codice è bloccato ed è
necessario utilizzare il comando
UNBLOCK CHV insieme al codice
di sblocco relativo. Naturalmente
il comando viene processato
dalla SIM solo se il CHV indicato
dal parametro P2 non è disabilitato, né bloccato.
Il CHV è formato da un minimo
di 4 ad un massimo di 8 cifre
decimali. Ad ogni cifra corrisponde un byte che rappresenta, in
P1
P2
00
x0
Effettua la ricerca a partire
dal primo record.
00
x1
Effettua la ricerca a partire
dall’ultimo record.
00
x2
Effettua la ricerca a partire dal
record successivo a quello corrente.
00
x3
Effettua la ricerca a partire dal
record precedente a quello corrente.
Tabella 4: Modalità di ricerca del comando SEEK
Descrizione
MODUGNO-impaginato
16-11-2004
10:29
Pagina 57
TUTORIAL
decimale, quella cifra. I byte
rimanenti, nel caso il CHV avesse
una lunghezza inferiore ad 8,
devono essere posti al valore esadecimale FF.
RUN GSM ALGORITHM
È il comando meno noto all’utente ma più interessante tecnicamente, poiché è quello che
permette di effettuare l’autenticazione alla rete GSM durante la
fase di inizializzazione, per
esempio subito dopo l’accensione. L’ME invia alla SIM, tramite
questo comando, il numero
casuale RAND di 16 byte ricevuto dalla rete e riceve dalla SIM il
numero SRES (4 byte) e la chiave crittografica Kc (8 byte). Il
primo numero viene ottenuto
eseguendo l’algoritmo A3, il
secondo tramite l’algoritmo A8.
Il primo permette l’autenticazione della SIM alla rete, il secondo
la segretezza delle informazioni
scambiate. Il comando viene
eseguito dalla SIM solo se è
stato verificato il CHV1 e la
directory corrente è la DFGSM o
una sua sotto-directory.
Potete trovare maggiori informazioni su questo argomento nell’articolo precedente.
Struttura di alcuni file di
una SIM
In una SIM GSM sono presenti
alcuni file (EF e DF) obbligatori,
oltre ad altri file opzionali che
possono essere creati liberamente dal gestore della rete. In figura
1 è rappresentata solo una minima parte della struttura gerarchica presente nello standard ETSI,
contenente i file che andremo ad
analizzare nel corso di questo
articolo.
Tralasciamo le cartelle MF
(“3F00”), DFGSM (“7F20”) e DFTELECOM (“7F10”) e analizziamo i tre EF.
EFICCID (2FE2)
E’ un transparent file di 10 byte,
contenuto direttamente nell’MF,
in cui è memorizzato un numero
identificativo della carta, normalmente stampigliato su uno dei
lati della SIM. È formato da un
massimo di 20 cifre decimali
codificate in BCD in 10 byte: i
nibble non utilizzati sono riempiti con la cifra esadecimale “F”.
È possibile sempre leggere il contenuto di tale file, ma non è possibile scriverlo in alcun caso.
EFIMSI (6F07)
L’EFIMSI è un transparent file, figlio
della directory DFGSM, che contiene il codice IMSI della SIM. Il
file ha una lunghezza di 9 byte,
di cui il primo indica la lunghezza del codice IMSI, in byte, che
può essere al massimo di 15 cifre
decimali. Come al solito, l’IMSI è
codificato in BCD dove i nibble
non usati (nel caso di lunghezza
inferiore a 15 cifre) sono posti a
“F”. Il nibble meno significativo
del primo byte rappresenta un
codice di parità. Naturalmente,
per leggere l’IMSI è necessario
aver verificato il CHV1, mentre
può modificarlo solo il gestore.
EFADN (6F3A)
È il file che contiene la rubrica dei
numeri di telefono memorizzati
Figura 1: Struttra gerarchica dei file descritti nell’articolo
TUTORIAL
57
MODUGNO-impaginato
18-11-2004
10:45
Pagina 58
TUTORIAL
nella scheda. Il file è strutturato a
record in modo sequenziale
(linear fixed file) dove ogni
record rappresenta un numero di
telefono. Naturalmente, per
poter leggere e scrivere su questo file è necessario aver verificato il CHV1.
Ad ogni numero di telefono è
possibile associare un testo
opzionale, normalmente il
nome della persona. Se la lunghezza del numero di telefono è
fissa (10 byte), lo spazio dedicato al testo associato varia a
seconda della SIM.
In Tabella 5 è presente la struttura di un record di questo EF.
Come si può osservare, la lunghezza del record è pari a X+14,
dove X può variare a seconda
della SIM e rappresenta la lunghezza del testo associato al
numero. È possibile conoscere il
valore di X sottraendo 14 alla
lunghezza di un singolo record,
ottenuta dalla risposta al comando SELECT.
I primi X byte contengono l’alpha-tagging, cioè la stringa di
testo associata al numero telefonico. Faccio notare che il record
inizia proprio con il testo e ciò
permette di utilizzare il comando
SEEK per ricercare un nome in
rubrica che inizia con una particolare sequenza di lettere (è praticamente quello che fa il cellulare quando consultiamo la rubrica). La codifica è molto simile
all’ASCII, almeno per quello che
riguarda i caratteri più diffusi.
Rimando il lettore alla lettura
dello standard per maggiori
approfondimenti.
Il byte X+1 indica la lunghezza,
in byte, del numero di telefono,
compreso il byte TON+NPI. Tale
lunghezza può essere al massimo
di 11 byte.
Il byte TON+NPI rappresenta il
Type Of Number e il Numbering
Plan Identification. Qui la normativa è piuttosto complessa e non
serve scendere troppo nei dettagli. Questo byte è formato, leggendo da sinistra, da un bit pari
sempre ad 1, dal TON di 3 bit e
dall’NPI di 4 bit. Normalmente il
TON è pari a 000 e l’NPI a 0001,
così da ottenere il byte 1000
0001, cioè 81 in esadecimale.
Il numero di telefono è codificato
in BCD dove la cifra precedente è
codificata nel nibble meno signi-
Byte
Descrizione
Lunghezza
da 1 a X
Testo
X
X+1
Lunghezza del numero di
telefono (compreso il
byte TON+NPI)
1
X+2
TON+NPI
1
da X+3 a X+12
Numero di telefono
10
X+13
CCI
1
X+14
Estensione
1
Tabella 5: Struttura di un record dell’EFADN
58 TUTORIAL
ficativo e la cifra successiva nel
nibble più significativo. Poiché
ogni byte ha due nibble, è possibile memorizzare in un record
dell’EFADN un numero di al massimo 20 cifre. I nibble eventualmente non usati sono messi ad
“F”. Il simbolo “*” e “#” sono
memorizzati rispettivamente con
la cifra esadecimale “A” e “B”.
Il
byte
CCI
(Capability/Configuration Identifier) viene
utilizzato se la chiamata al numero telefonico necessita di parametri o requisiti particolari. In
questo caso, il byte rappresenta
un identificatore del record nel
file EFCCP dove sono memorizzate
queste informazioni.
Normalmente questo byte non
viene usato e, in questo caso,
viene messo ad “FF”.
Infine, il byte Estensione è utilizzato se il numero telefonico è più
lungo di 20 cifre e, quindi, ha
una estensione memorizzata in
un altro file, denominato EFEXT1.
Normalmente non viene usato e
viene messo ad “FF”.
Per chiarire meglio il tutto, vi sottopongo il seguente esempio di
record di un EFADN dove X=12:
53 65 67 72 65 74 65 72 69 61
FF FF 06 81 83 00 00 44 11 FF FF
FF FF FF FF FF
I più attenti dovrebbe risalire al
nome ed al numero di telefono
associato a questo record (se
avete ancora dei dubbi, potete
scrivermi).
EFSMS
L’EFSMS è un linear fixed file che
contiene i brevi messaggi di testo
(SMS) ricevuti e memorizzati
nella SIM. Anche in questo caso,
MODUGNO-impaginato
16-11-2004
10:29
Pagina 59
TUTORIAL
la lettura e la scrittura è permessa solo dopo aver verificato il
CHV1.
Il record di questo file ha una lunghezza di 176 byte, strutturato
come in Tabella 6.
Il primo byte rappresenta lo stato
del record. Se il bit meno significativo è nullo, quel record non è
utilizzato. Se i tre bit meno significativi valgono 001, il record
contiene un SMS ricevuto e letto;
se valgono 011, si tratta di un
SMS ricevuto ma ancora da leggere. È possibile memorizzare
nella SIM anche SMS inviati alla
rete ed in questo caso il byte di
stato indicherà se l’SMS è già
stato inviato, se è stata ottenuta
la conferma di invio, ecc. Nel
seguito ci soffermeremo solo
sugli SMS ricevuti.
Dal secondo byte viene memorizzato il numero del Centro
Servizi, utilizzato dalla rete GSM
per lo smistamento degli SMS.
Come per il numero telefonico
memorizzato in un record
dell’EFADN, questo campo è for-
mato da un byte che indica la
lunghezza del numero (compreso il byte TON+NPI), un byte che
indica il TON+NPI ed infine il
numero vero e proprio in formato BCD. Questo campo può
avere dimensione variabile, indicata in Tabella 6 con X.
I byte rimanenti contengono il
cosiddetto
TPDU
(Transfer
Protocol Data Unit), cioè l’SMS
opportunamente codificato per
Byte
Descrizione
Lunghezza
1
Stato
1
da 2 a X+1
Numero Centro Servizi
X
da X+2 a 176
TPDU
175-X
Tabella 6: Struttura di un record dell’EFSMS
Byte
Descrizione
Lunghezza
1
Primo byte
1
2
Lunghezza in cifre del numero del mittente
1
da 3 a Y+2
Numero del mittente
Y
Y+3
Identificatore del protocollo
1
Y+4
Schema di codifica dei dati
1
da Y+5 a Y+11
Orario e data di invio
7
Y+12
Lunghezza dei dati utente (in caratteri)
1
da Y+13 a 175
Dati utente
-
Tabella 7: Struttura di un TPDU SMS-DELIVER
TUTORIAL
59
MODUGNO-impaginato
16-11-2004
10:29
Pagina 60
TUTORIAL
essere trasmesso o ricevuto dalla
rete GSM. La struttura del TPDU
non è per niente semplice, in
quanto lo standard prevede
numerosissimi parametri e possibilità, aumentate nel tempo con
l’aggiunta di SMS concatenati,
immagini, suonerie, ecc. In
Tabella 7 è mostrata la struttura
del più tipico TPDU denominato
SMS-DELIVER, associato ad un
SMS in entrata correttamente
ricevuto.
Anche in questo caso è inutile
scendere troppo nei dettagli.
Basti sapere che nel TPDU si trovano codificati il numero del mittente, la data e l’ora in cui il messaggio è stato inviato e preso in
consegna dal Centro Servizi,
nonché il messaggio vero e proprio (generalmente una stringa
di testo). Il tutto si complica poiché lo standard prevede diverse
codifiche dei dati (testo) ed
anche una forma di compressione: la codifica usata nell’SMS è
indicata nel byte Y+4. Nella maggior parte dei casi, tale byte vale
“00” ed indica la codifica standard GSM. Un’altra complicazione è dovuta al fatto che il testo,
memorizzato nell’ultimo campo,
non è codificato come l’alphatagging di un record dell’EFADN
visto in precedenza (fondamentalmente ASCII), ma è utilizzato
un apposito algoritmo per trasformare la sequenza di caratteri
(7 bit) in byte (8 bit). Chi volesse
approfondire questo aspetto,
può leggere il sorgente del programma in Visual Basic che verrà
illustrato successivamente in questo articolo, oppure leggere
direttamente i non semplici standard ETSI per gli SMS (riferimen-
60 TUTORIAL
ti in bibliografia).
ESPERIMENTI
SVILUPPO DEL FIRMWARE
PER UNIREADER
Per verificare le potenzialità del
nostro lettore con le smartcard a
microprocessore, ho scritto un
firmware che gestisce gli APDU
inviati e ricevuti dalla carta asincrona. I comandi provengono,
mediante collegamento seriale,
da un computer. Il firmware è
molto generico e può essere
usato con una qualsiasi smartcard asincrona standard che utilizzi il protocollo di trasporto
“T=0”.
Come al solito, ho utilizzato il
compilatore CC5X della B.
Knudsen per la stesura del firmware in linguaggio C. Sul sito di
Fare Elettronica, potete trovare
sia il sorgente, da usare per eventuali modifiche o solo per scopi
didattici, sia il file eseguibile per
la programmazione del microcontrollore, all’interno del file
compresso.
Dopo la prima fase di inizializzazione in cui vengono impostate
le direzioni dei pin, la modalità di
funzionamento dell’UniReader
per la gestione delle carte asincrone e la porta USART, si entra
nel ciclo principale in cui il microcontrollore controlla alternativamente e continuamente la presenza di un byte nel buffer di
ricezione della porta seriale ed un
eventuale bit di start sul pin di
I/O ISO7816.
Ogni byte ricevuto dalla smartcard sarà automaticamente trasmesso, in binario, sulla seriale
verso il PC. Per questo motivo
non è possibile utilizzare un emulatore terminale, poiché i byte in
binario verrebbero visualizzati
come simboli non facilmente
interpretabili. Sarà necessario sviluppare un software apposito per
la comunicazione.
I comandi provenienti da PC tramite seriale sono solo di tre tipi e
terminano con il carattere di
ritorno carrello “↵”:
• “r↵”, che effettua il reset della
smartcard ponendo la linea
RST bassa;
• “R↵”, che effettua il reset della
smartcard ponendo la linea
RST alta;
• “xx↵”, dove xx rappresenta un
byte in esadecimale che verrà
trasmesso alla smartcard.
Come al solito, all’accensione di
UniReader sarà necessario inviare
un segnale di reset per inizializzare la smartcard. Questa risponderà con l’ATR in corrispondenza
del corretto livello di reset.
Successivamente sarà possibile
inviare i byte trasmettendoli in
esadecimale ed intervallandoli
dal carattere “↵”.
SVILUPPO DEL SOFTWARE
Ho sviluppato un software in
Visual
Basic,
denominato
SIMReader, che permette di
automatizzare e semplificare
tutte le operazioni che devono
essere effettuate per la lettura dei
dati di una carta SIM. Come al
solito, potete trovare sul sito di
Fare Elettronica sia il pacchetto
con i sorgenti, sia il programma
di installazione.
In figura 2 è mostrata la schermata iniziale di SIMReader
mediante la quale è possibile leggere il numero seriale della
smartcard, normalmente stampigliato direttamente su di essa, e il
MODUGNO-impaginato
16-11-2004
10:29
Pagina 61
TUTORIAL
numero IMSI utilizzato durante la
procedura di autenticazione alla
rete GSM (vedi articolo precedente).
Prima di tutto, però, è necessario impostare correttamente la
porta seriale a cui è collegato
l’UniReader (ovviamente il
PIC16F628 del lettore deve
essere programmato con il firmware UniReader_async.hex). Per
fare ciò, basta cliccare sulla
scheda delle “Impostazioni” e
scegliere (o digitare) la porta
seriale utilizzata.
Inserite una SIM all’interno
dell’UniReader, magari utilizzando l’apposito adattatore, e
accendete il lettore.
Ora è possibile premere i tasti
“Leggi” in corrispondenza del
numero seriale e del codice
IMSI per ottenere questi codici
dalla carta.
Nella schermata denominata
Rubrica (figura 3) è possibile
leggere l’intero contenuto della
rubrica memorizzata nella SIM.
Per fare questo è sufficiente cliccare sul tasto “Leggi”. Se la
comunicazione avviene correttamente, il software invierà alla
SIM, tramite il lettore, gli appositi comandi per la selezione del
file EFADN e per la lettura di tutti i
record memorizzati. Potete salvare la rubrica così ottenuta
cliccando sul tasto Salva: verrà
creato, nella cartella di installazione del programma, il file di
testo “rubrica.txt” che potrete
consultare con un qualsiasi editor di testo (per esempio,
Blocco Note).
La schermata SMS (figura 4) può
essere usata per la lettura degli
SMS conservati nella SIM. Anche
in questo caso, premendo il tasto
“Leggi”, il software invierà tutti i
comandi appositi per la selezione
del file EFSMS e la lettura di tutti i
record, estraendo per ognuno i
campi più importanti: data/ora,
mittente, centro servizi, testo.
Sottolineo che solo gli SMS del
tipo SMS-DELIVER sono corretta-
Figura 2: Schermata iniziale di SIMReader
Figura 4: Schermata di SIMReader per la
lettura degli SMS
Figura 3: Schermata di SIMReader per la
lettura della rubrica
Figura 5: Schermata di SIMReader per l’invio
dei singoli comandi
mente gestiti dal programma,
mentre gli altri non saranno
visualizzati. Per salvare gli SMS è
possibile cliccare sul tasto “Salva”
che creerà il file “sms.txt” sempre all’interno della cartella di
installazione di SIMReader.
La schermata che, però, reputo
più importante di tutte è quella
denominata
genericamente
Comandi (figura 5). Tramite questa è possibile resettare ed inviare
un qualsiasi comando alla SIM o
ad una generica smartcard
ISO7816 asincrona. In questo
modo potrete sperimentare di
persona l’invio dei vari comandi
alla SIM e ricavare ulteriori informazioni utili che, per motivi di
spazio, non sono state commentate in questo articolo.
Per evitare di bloccare la SIM, ho
preferito non includere i comandi
per l’inserimento del PIN. Per questo motivo, è necessario disabilitare il PIN mediante telefonino prima
di utilizzarla con UniReader e
SIMReader. In caso contrario, la
SIM risponderà con un errore ad
ogni tentativo di lettura protetto
dal codice segreto.
Naturalmente, se volete, potete
completare il software aggiungendo i comandi necessari per
l’inserimento del PIN, dopo averlo richiesto all’utente.
Dopo aver utilizzato il programma SIMReader per comunicare
con una SIM, potete consultare il
file “log.txt”, nella cartella di
installazione di SIMReader, in cui
sono elencati tutti i comandi e le
risposte inviate e ricevute
dall’UniReader. È molto interessante per poter capire le informazioni scambiate durante le opera-
TUTORIAL
61
MODUGNO-impaginato
16-11-2004
10:29
Pagina 62
TUTORIAL
zioni di lettura IMSI, seriale,
rubrica e SMS.
SVILUPPI FUTURI
Come al solito, anche in questo
articolo non ho voluto presentare
un sistema “chiavi in mano” da
riutilizzare senza alcuna modifica.
Piuttosto ho cercato di spiegare il
funzionamento del sistema GSM
relativamente alle SIM in modo
che possiate personalizzare in
ogni punto sia il firmware per
UniReader, sia il software per PC.
Le possibilità per incrementare le
funzionalità del sistema sono
veramente tante. Mi accontento
di elencarvene qualcuna.
Potete inserire nel software
SIMReader la possibilità di specificare un PIN in modo che venga
automaticamente inviato alla
SIM senza dover necessariamente disabilitare tale protezione con
un telefonino. Sarà necessario
inviare correttamente il comando
VERIFY CHV ed interpretarne la
risposta. E’ un’operazione abbastanza delicata, poiché, se fatta in
modo errato, potrebbe bloccare
la SIM dopo tre tentativi.
Verificate prima di possedere il
relativo UNBLOCK CHV e che sia
corretto e funzionante.
Un’altra caratteristica che potete
aggiungere alla vostra versione di
SIMReader è quella di poter
modificare, oltre che leggere, il
contenuto della rubrica. Anziché
inviare comandi READ RECORD,
sarà necessario utilizzare il
comando UPDATE RECORD. È
importante, in questo caso, codificare il nome ed il numero di
telefono così come descritto precedentemente ed inviare l’intera
sequenza di byte insieme al
comando. Si può pensare di
62 TUTORIAL
avere una rubrica su PC ed una
rubrica sulla SIM e di sincronizzare i dati mediante SIMReader. I
più bravi potrebbero salvare i
dati ricavati dalla SIM all’interno
della rubrica di Windows o, al
contrario, leggerli da questa per
inviarli alla SIM.
Salendo in ordine di difficoltà,
potete anche modificare il contenuto degli SMS utilizzando sempre i comandi UPDATE RECORD
anziché READ RECORD sul file
EFSMS. Qualcuno potrebbe simulare un SMS mai ricevuto, con
tanto di data e mittente, e leggerlo sul telefonino come un
vero messaggio. La complessità è
dovuta alla codifica dei vari
campi dell’SMS, tra cui il testo,
che è abbastanza contorta. Una
attenta lettura degli standard
ETSI è d’obbligo.
Infine, potete cercare di estendere la decodifica degli SMS non
solo per le tipologie SMS-DELIVER. Anche per questo, è necessario leggere attentamente gli
standard relativi.
STANCHI DI GIOCARE?
Sono arrivato alla fine di questo
lungo tutorial e spero di aver fornito a molti gli strumenti necessari per lo sviluppo di applicazioni
basate su una qualsiasi tipologia
di smartcard. Piuttosto che offrire
una unica soluzione finita e limitata, ho preferito discutere su tutti
gli aspetti di questo meraviglioso
mondo dell’elettronica in modo
che ognuno di voi possa autonomamente progettare e realizzare il
sistema che più gli serve.
Grazie ai molti che mi hanno scritto e continuano a scrivermi per i
complimenti e le critiche. Non esitate a contattarmi per qualsiasi
informazione o solo per darmi un
vostro feedback su quanto avete
letto.
Un’affettuoso grazie anche a
Mariangela per avermi corretto le
bozze
Se avete ancora dubbi o curiosità
sul mondo delle smartcard,
comunicatele: chissà, in futuro ci
potrebbe essere una nuova… partita a carte!
BIBLIOGRAFIA E LINK
ETSI TS 100 977: Specification of the SIM-ME Interface.
ETSI GSM 02.17: Subscriber Identity Modules, Functional
Characteristics
ETSI TS 123 038: Alphabets and language-specific information.
ETSI TS 100 940: Mobile radio interface layer 3 specification.
ETSI TS 124 011: Point-to-Point (PP) Short Message Service (SMS)
Support on Mobile Radio Interface.
ETSI TS 123 040: Technical realization of Short Message Service (SMS).
ISO7816 parti 1, 2, 3, 4.
ERRATA CORRIGE
Nello schema elettrico dell’UniReader, pubblicato sul numero 231 di Settembre
2004, sono presenti due errori. I condensatori C8 e C10, relativi al MAX232, hanno
le polarità invertite. Lo schema di montaggio è, invece, corretto. Grazie a Luca da
Perugia che mi ha puntualmente fatto notare il problema.
MODUGNO - SIM 8 5
19-04-2005
11:41
PRATICA
Pagina 28
TEORIA
RISORSE
SPECIALE
Sesta parte
Le SIM:
un esempio di smartcard
a microprocessore
Settima parte
Applicazioni con le SIM
Ottava parte
Smartcard SIMCopier
Q
FARE ELETTRONICA - MAGGIO 2005
Pratica
28
uanti di voi hanno dovuto
cambiare, per un motivo
o per un altro, la propria SIM?
Avevate perso la precedente,
avete cambiato operatore
telefonico, avete ricevuto una
nuova SIM più potente e capiente
dello stesso gestore.
In tutti questi casi, vi sarete
imbattuti in un noiosissimo
problema: trasferire la vostra
rubrica sulla nuova scheda.
COMINCIAMO UNA NUOVA
PARTITA A CARTE
Cosa ci siamo detti negli articoli
precedenti
Come previsto nell’ultimo articolo del tutorial
sulle smartcard, pubblicato in sette puntate su
Fare Elettronica a partire dal n. 227 di Maggio
2004 al n. 234 del Dicembre 2004, si è presentata l’occasione per cominciare una nuova partita a carte, o meglio… a smartcard. In questo
articolo, verranno utilizzati numerosi concetti
già sviluppati nel corso delle precedenti puntate del tutorial.
Qui farò solo un velocissimo riassunto.
Come i miei lettori ormai sanno molto bene,
una SIM non è altro che una smartcard asincrona a microprocessore utilizzata, tra le altre cose,
per conservare alcuni dati utili all’utente (per
esempio, la rubrica telefonica e gli SMS) e altri
dati utili durante l’accesso alla rete (per esem-
Smartcard
pio, il gestore telefonico e il numero seriale della
SIM, insieme alla chiave segreta utilizzata per
l’autenticazione).
Le SIM, come molte altre smartcard che seguono
lo standard ISO7816-4, presentano un’interfaccia
con l’esterno che mostra una organizzazione
razionale dei dati sotto forma di un file-system,
formato da EF (Elementary File) e DF (Dedicated
File). I primi sono paragonabili ai file presenti in
un normale hard-disk di un PC, mentre i secondi
possono essere accomunati alle cartelle o directory. Tutti questi file sono organizzati ad albero, così
come nella maggior parte dei sistemi operativi
che abitualmente utilizziamo sui nostri computer,
a partire da una cartella principale denominata
MF (Master File). Così come nel buon vecchio
DOS, oltre che nei molti sistemi operativi che
mettono a disposizione shell di comandi, è possibile “navigare” all’interno di questo file system
mediante appositi comandi da inviare alla SIM.
Questi e gli altri comandi sono definiti in seno
agli innumerevoli standard GSM emanati
dall’ETSI (a tal proposito, si veda la bibliografia a
fine articolo). Per esempio, il comando definito
SELECT FILE permette di cambiare la “cartella
corrente”, indicandone l’identificativo di due
byte, in modo simile al comando CD del DOS.
Sempre con lo stesso comando, è possibile selezionare un EF per poi leggerlo e/o scriverlo.
Gli standard GSM definiscono alcuni EF e DF, il
loro significato, la loro posizione nell’albero. Per
esempio, l’EF denominato ADN ed indicato come
EFADN è un file che si trova all’interno del DFTELECOM
che, a sua volta, è contenuto nell’MF.
Questo file è quello che contiene la rubrica all’interno della nostra SIM.
Si tratta di un file basato su record, in cui ogni
record rappresenta un nome in rubrica. Il numero e la dimensione di un record possono cambia-
MODUGNO - SIM 8 5
19-04-2005
11:41
Pagina 29
di Giuseppe Modugno
[email protected]
SIMCopier
re a seconda della capacità di memorizzazione
della SIM fornita dal nostro operatore: più recente è la SIM, più numeri avremo a disposizione in
rubrica e più lunghi saranno i nomi memorizzabili. La composizione di un singolo record
dell’EFADN è mostrata in figura 1.
29
FARE ELETTRONICA - MAGGIO 2005
Figura 1 Rappresentazione di un record del file EFADN
INTRODUZIONE
L’Idea
Poco tempo fa ho accettato una proposta del
mio operatore di telefonia mobile che mi invitava a sostituire la mia vecchia SIM GSM (100
numeri in rubrica da 12 caratteri e 10 SMS) con
un’altra moderna e più capiente (250 numeri in
rubrica da 18 caratteri e 50 SMS). Ovviamente i
vantaggi della nuova SIM non si limitano alla
capacità di memorizzazione ma, ai fini di questo
articolo, è quello che ci interessa maggiormente.
Deciso ad effettuare questa conversione di scheda, mi reco in un punto vendita autorizzato
dove mi forniscono la nuova e fiammante SIM
che sarebbe stata abilitata dopo qualche ora. La
simpatica addetta mi chiede se volessi fare il trasferimento automatico della rubrica sulla nuova
SIM, cosa che ha subito stimolato la mia curiosità. Alla mia risposta affermativa, la commessa
inserisce in un piccolo apparecchio da tavolo,
utilizzando gli appositi adattatori per le carte
SIM, la mia vecchia SIM e la nuova, digita, tramite apposita tastiera, i due PIN e avvia l’operazione. Dopo qualche minuto, tutta sorridente
mi riconsegna entrambe le SIM. Inutile dire che
la mia rubrica era stata effettivamente copiata
sulla nuova SIM, in modo indolore.
Naturalmente, l’idea di progettare un apparato
simile che mi permettesse di copiare la rubrica
delle SIM m’è venuta
immediatamente, portandomi alla realizzazione del SIMCopier e,
ovviamente, a questo
articolo.
Pratica
Il primo campo, la cui dimensione dipende dalle
caratteristiche della SIM, è definito alpha-identifier ed è utilizzato per la memorizzazione del
nome associato al numero telefonico. Gli altri
campi del record, di lunghezza complessiva pari
a 14 byte, conservano altre importanti informazioni associate ad un numero telefonico, tra cui
il numero stesso. A chi volesse maggiori dettagli
su questo e sugli altri file presenti in una SIM,
consiglio di leggere la parte VI e VII del tutorial
o di leggere gli standard relativi. La dimensione
totale del record, da cui si può ricavare la lunghezza massima dei nomi, sottraendo 14, e il
numero dei record possono essere ricavati dalla
risposta al comando GET RESPONSE subito
dopo aver selezionato il file EFADN.
Così come un telefonino, anche un lettore di
smartcard può accedere al file-system contenuto nella SIM, selezionare i file e leggere/scrivere
il contenuto. Per un file basato su record, esistono due comandi utilizzati per la lettura e la scrittura: READ RECORD e UPDATE RECORD. In
entrambi i casi, l’operazione avviene con successo solo se è soddisfatta la condizione d’accesso, cioè se è già stato inserito il CHV1 (PIN),
se questi è abilitato. In caso contrario, prima di
poter leggere e/o scrivere i record in rubrica,
sarà necessario procedere all’inserimento del
PIN, mediante il comando VERIFY CHV.
MODUGNO - SIM 8 5
19-04-2005
11:41
PRATICA
Ottava parte
FARE ELETTRONICA - MAGGIO 2005
Pratica
30
Pagina 30
TEORIA
RISORSE
SPECIALE
Smartcard: SIMCopier
Descrizione
Cos’è dunque questo SIMCopier? Dal nome
stesso, si intuisce subito che si tratta di un circuito che effettua la copia di una SIM.
Tecnicamente quello che viene copiato è il solo
file EFADN che contiene la rubrica telefonica. Ciò
può essere utile in numerosissime situazioni. Per
esempio, come nel mio caso, quando si vuole
utilizzare una SIM più capiente dello stesso operatore. Ma questa è solo una delle possibili
situazioni in cui il SIMCopier può rivelarsi utile.
Esso può essere un toccasana quando perdete la
vostra SIM: avendo fatto in precedenza la copia
della rubrica mediante SIMCopier, potete tranquillamente recuperarla dalla SIM di backup.
Ancora, se volete cambiare operatore potete
trasferire la rubrica dalla vecchia SIM del vostro
Figura 2 Schema elettrico
precedente gestore alla SIM del nuovo operatore telefonico. Il SIMCopier è, infatti, compatibile con tutte le SIM, indipendentemente dall’operatore e può effettuare la copia della rubrica tra due SIM di diversi gestori.
La scheda che dovremo progettare sarà quindi
formata almeno da due connettori per smartcard, un tasto e qualche led di indicazione. Un
connettore ospiterà la SIM sorgente, quella che
contiene la rubrica da copiare, l’altro verrà utilizzato per la SIM destinazione, dove la rubrica
verrà copiata.
Uno dei problemi che ho dovuto affrontare è
stato quello relativo all’inserimento del PIN.
Come tutti voi sapete, per poter accedere alla
rubrica della vostra SIM, sia in lettura che in
scrittura, è necessario conoscere ed inserire il
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 31
(SOURCE) e destinazione (DESTINATION), alimentare il SIMCopier e premere il tasto di
avvio copia (COPY).
SCHEMA ELETTRICO
Lo schema elettrico del SIMCopier è mostrato in
figura 2. La sezione di alimentazione (in basso
nello schema elettrico) è formata dal solito
regolatore lineare di tensione 7805 (IC3), che
permette di avere, in uscita, una tensione continua stabilizzata a 5V, che servirà per alimentare
tutti gli integrati e le smartcard del circuito. La
tensione d’ingresso dovrà essere applicata al
comunissimo connettore J1, molto spesso già
presente negli alimentatori a muro.
Questa tensione non dovrà essere necessariamente stabilizzata, poiché sarà il regolatore
7805 a mantenerla costante. Si può quindi
usare un semplice trasformatore seguito da un
31
Pratica
PIN corretto. Questo avrebbe complicato notevolmente il prototipo, poiché avrei dovuto prevedere almeno un display ed un tastierino
numerico, mentre la mia idea era quella di un
copiatore di SIM veramente compatto e semplice. Così ho sfruttato la possibilità di disabilitare
il PIN, per esempio tramite un qualsiasi telefonino (dall’apposito menu sulle impostazioni della
sicurezza) oppure tramite un lettore di smartcard (come l’UniReader proposto nella parte III
del tutorial), inviando l’apposito comando
DISABLE CHV.
Quindi, per poter effettuare la copia della
rubrica con il nostro SIMCopier, sarà necessario prima di tutto disabilitare, su entrambe le
schede, il PIN.
Fatto questo, sarà sufficiente inserire le due
SIM all’interno dei rispettivi connettori,
rispettando la posizione della SIM sorgente
S.V.M. ELETTRONICA
Vendita per corrispondenza Tel./Fax 0331/640569
Caratteristiche tecniche e vendita on-line www.svmelettronica.com
INVERTER 12VDC/220VAC
WHS150W-12 €. 40,00
WHS200W-12 €. 45,00
WHS300W-12 €. 52,00
Sistema di videosorveglianza wireless
operante sulla banda dei 2,4GHz
composto da 4 telecamere a colori
da esterno con illuminatore IR a 12
LED, e da un ricevitore multicanale
con switcher e telecomando.
SOFT-START
WHS400W-12
WHS600W-12
€. 60,00
€. 95,00
Navigatore Mio268 Sw Italia
SD 256Mb SW Italiano.
COD. RC268I €. 422,00
Kit telecamera 1/3CMOS waterproof
a colori + ricevitore senza fili con
illuminatore IR operante sulla banda
dei 2.4GHz.il kit include telec., ricev.
a 4 canali e alimentatori.
Multimetro digitale
con ingressi protetti
COD. TE/6300E €. 48,00
COD. 37/150 €. 115,00
Tutti i prezzi si intendono IVA inclusa.
FARE ELETTRONICA - MAGGIO 2005
COD. 37/310 €. 360.00
MODUGNO - SIM 8 5
19-04-2005
11:42
PRATICA
Ottava parte
Pratica
32
TEORIA
RISORSE
SPECIALE
Smartcard: SIMCopier
ponte di diodi. La tensione minima necessaria
per far funzionare correttamente il 7805 è di
circa 8V, ma può essere aumentata anche fino a
24V. Il polo positivo del connettore J1 è quello
centrale. Il diodo D2 è utilizzato per bloccare la
corrente nel caso in cui la tensione di ingresso
venisse applicata con polarità opposta. Il led
verde DL1 è collegato direttamente alla 5V,
quindi si accende non appena viene data alimentazione al circuito. Esso può essere utilizzato per controllare il corretto funzionamento
della sezione di alimentazione del SIMCopier.
Come si può osservare, il cuore di tutto il circuito è rappresentato dall’integrato PIC16F628
(IC1), cioè un diffusissimo microcontrollore a 8
bit della Microchip con memoria Flash da 2048
istruzioni per il codice, 128 byte di EEPROM e
224 byte di RAM. È lo stesso microcontrollore
utilizzato nel lettore di smartcard UniReader,
anche se in modo diverso. In questo caso, infatti, il clock necessario al micro per la corretta
esecuzione del programma proviene da un
oscillatore esterno formato dall’integrato
Numero
FARE ELETTRONICA - MAGGIO 2005
Pagina 32
Nome
Direzione
74HC00 (IC2), dal quarzo a 3.579MHz (Q1),
dai due condensatori C1 e C2 e dalla resistenza
R1. La strana frequenza utilizzata, tipicamente
presente nei lettori di smartcard, permette una
comunicazione seriale con la carta alla velocità
standard di 9600bps (per una esauriente spiegazione si rimanda alla parte III del tutorial). Per
questo motivo, il clock generato dall’oscillatore
pilota non solo il microcontrollore, ma anche le
due smartcard.
Naturalmente in fase di programmazione del
PIC, sarà necessario impostare la parola di configurazione sulla modalità EC (External Clock).
In questa modalità, verrà disabilitato l’oscillatore interno del microcontrollore ed utilizzato il
clock presente al pin CLKIN (pin 16). Gli ingressi delle porte NAND non utilizzate del 74HC00
sono collegate a massa per evitare di lasciarle in
condizione di alta impedenza.
La sezione formata dal condensatore C10, dalle
resistenze R2 e R8 e dal diodo D1, forma il circuito di reset del microcontrollore. Il PIC necessita di un livello alto sul pin MCLR (Master
Descrizione
C1
VCC
I
Alimentazione della smartcard, normalmente a 5V, anche se sono
previste alimentazioni a tensioni inferiori (3V o meno)
C2
RST
I
Linea di reset utilizzata dal dispositivo di lettura per inizializzare la
scheda, prima di un qualsiasi trasferimento di dati
C3
CLK
I
Linea utilizzata per fornire il clock ai circuiti sequenziali integrati
nella smartcard (carte asincrone), oppure per lo scambio dei dati
(carte sincrone)
C4
RFU
C5
GND
Riservata per usi futuri
I
Massa
C6
VPP
I
Tensione di programmazione, eventualmente utilizzata per la programmazione (cancellazione/scrittura) della memoria non volatile
integrata nella smartcard (EEPROM, Flash)
C7
I/O
I/O
Linea bidirezionale utilizzata per lo scambio dei dati tra smartcard e
dispositivo di lettura
C8
RFU
Tabella 1
Riservata per usi futuri
Gli 8 contatti di una smartcard ISO7816 (la direzione è relativa alla smartcard)
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 33
to un solo deviatore, collegato al PIC, in modo
che il pin relativo venga messo a massa alla
pressione del tasto.
Quando il tasto non è premuto, il pin viene
portato a livello alto grazie alla resistenza di
pull-up interna al microcontrollore. Non è un
caso, infatti, che ho collegato il tasto al pin
RB0, in quanto per questo, e per tutti gli altri
pin della porta B, possono essere abilitati dei
pull-up via software (in particolare, mettendo a
0 il bit 7 del registro OPTION). È bene ricordare, però, che è possibile abilitare o disabilitare i
pull-up su tutti i pin della porta B contemporaneamente (in altre parole, non è possibile, per
esempio, abilitare un pull-up su RB0 e disabilitarlo su RB4).
I led DL2 e DL3 sono collegati direttamente ad
un pin del PIC, tramite le resistenze di limitazione della corrente R4 e R5, e sono utilizzati come
33
Pratica
Clear) per poter iniziare l’esecuzone del programma memorizzato in Flash. All’accensione
del circuito, il livello di tensione su questo pin
sale lentamente seguendo la legge di carica del
condensatore C10, limitata solo dalla resistenza
R2. Questo permette di ritardare l’esecuzione
del programma da parte del PIC in modo che il
clock generato dall’oscillatore si stabilizzi. Il
diodo D1, invece, forma un “canale veloce” di
scarica del condensatore C10, quando viene
tolta l’alimentazione al circuito. In questo
modo, il microcontrollore viene immediatamente resettato per riprendere l’esecuzione
non appena l’alimentazione ritorna a 5V.
Il tasto T1, collegato direttamente ad un pin del
micro, viene utilizzato per iniziare la copia della
rubrica. Quello utilizzato nel nostro prototipo è
un tasto momentaneo che sposta, premendolo,
due deviatori. Nel nostro circuito, viene utilizza-
FARE ELETTRONICA - MAGGIO 2005
MODUGNO - SIM 8 5
19-04-2005
PRATICA
Ottava parte
FARE ELETTRONICA - MAGGIO 2005
Pratica
34
11:42
Pagina 34
TEORIA
RISORSE
SPECIALE
Smartcard: SIMCopier
segnalazione di presenza SIM. L’accensione del
led DL2 indica la presenza di una SIM nello slot
destinazione; l’accensione di DL3 indica la presenza di una SIM nello slot sorgente.
In questo modo, prima di iniziare la copia premendo l’apposito tasto, è possibile accertarsi
che le due SIM siano correttamente inserite nei
rispettivi connettori. Ciò è molto importante
soprattutto se utilizziamo, come molto probabilmente accadrà, degli adattatori per SIM che,
se di scarsa qualità, potrebbero non effettuare un buon contatto tra i pin delle carte e i
pin del connettore. I led potranno essere
accesi via software semplicemente mettendo
ad 1 l’uscita della porta relativa (RA2 per DL2
e RA3 per DL3). Ricordo che tale collegamento può essere fatto poiché il PIC16F628,
come molti altri PIC, riesce a fornire delle correnti di source (in uscita dal pin) anche di
Figura 3 Diagramma di flusso del firmware relativo alla rilevazione
della presenza di una SIM
25mA, corrente sufficiente per l’accensione
del led. Il componente DL4 è un bi-led, formato cioè da un led verde ed un led rosso
connessi a catodo comune. È possibile accenderli singolarmente oppure contemporaneamente producendo, in quest’ultimo caso, un
colore simile al giallo. Entrambi i led sono collegati, così come per DL2 e DL3, ad un pin
del microcontrollore e sono usati per indicare
lo stato di avanzamento della copia.
Alla pressione del tasto e durante la copia,
vengono accesi entrambi i led (portando a
livello alto il pin RA0 e RA1). Se la copia viene
terminata con successo, viene acceso solo il
led verde; se, invece, viene riscontrato qualche errore (per esempio, una delle SIM ha il
PIN abilitato), viene acceso solo il led rosso.
L’ultima sezione del circuito riguarda l’interfacciamento tra i due connettori per smartcard ed il microcontrollore. Come per
l’UniReader, ho utilizzato uno slot ISO7816
dotato di un interruttore normalmente chiuso
che si apre all’inserimento di una smartcard.
Quindi, ogni connettore ha 10 pin: 8 rappresentano i contatti della smartcard (C1-C8) e
due rappresentano quelli dell’interruttore
(SW1 e SW2). Così come per il tasto T1, gli
interruttori dei due slot sono collegati direttamente ad un pin del micro. Normalmente tali
pin sono a livello basso, poiché connessi
direttamente a massa tramite l’interruttore;
inserendo una smartcard, l’interruttore si
apre ed il pin si porta a livello alto grazie ai
soliti pull-up interni. Infatti, i pin utilizzati,
RB4 e RB5, appartengono alla porta B. In questo modo, il microcontrollore può accorgersi
dell’inserimento o disinserimento di una
smartcard. Gli 8 contatti di una generica
smartcard sono elencati in tabella 1.
Di questi, solo 6 sono specificati dagli standard ISO, mentre gli altri due contatti (C4 e
C8) sono riservati per usi futuri. Inoltre, nelle
SIM anche il contatto Vpp (C6) non viene utilizzato e quindi è lasciato non connesso nel
SIMCopier. Il pin CLK (C3), come detto precedentemente, è collegato all’uscita dell’oscillatore e fornisce alla carta a micropro-
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 35
Rilevare la presenza di una SIM
Il compito che si prevedeva più semplice è
diventato un pò più complicato del previsto.
Infatti, inizialmente avevo pensato di rilevare
la presenza di una SIM inserita in uno slot,
monitorando lo stato dell’interruttore integrato nel connettore.
Dopo qualche tentativo, però, mi sono reso
conto che questa idea non era molto funzionale: cosa succede se viene inserita una smartcard diversa da una SIM o, addirittura,
l’adattatore per le SIM privo della scheda?
Poiché l’interruttore è meccanico, questo rileverebbe comunque la presenza di una SIM!
Ho risolto questo problema complicando leggermente questo controllo di rilevazione presenza, così come mostrato nel diagramma di
flusso in figura 3.
Figura 4 Diagramma di flusso
relativo alla selezione
dei file
Oltre a controllare che l’interruttore sia aperto, cioè che una
smartcard (o qualcosa di simile)
sia stata inserita nel connettore, il
firm-ware prova a generare una
condizione di Reset mediante il
pin RST. Com’è noto (si veda la
parte III del tutorial), una smartcard risponde alla condizione di
Reset con l’ATR (Answer To
Reset, risposta al Reset).
Controllando la validità di questa
risposta, che rispetta certe regole, il microcontrollore può decidere con assoluta certezza se la
“cosa” inserita nello zoccolo è
effettivamente una SIM correttamente comunicante oppure no.
Nel primo caso, viene acceso il
led relativo.
Naturalmente questo controllo
viene fatto ciclicamente sia per la
SIM sorgente che per la SIM
destinazione.
35
FARE ELETTRONICA - MAGGIO 2005
FIRMWARE
Ovviamente, quando c’è di
mezzo un microcontrollore, non
basta disegnare lo schema elettrico, ma è anche necessario scrivere un firmware. Nel caso del
SIMCopier, il programma in esecuzione nel PIC dovrà rilevare la
presenza delle SIM all’interno
dei connettori e aspettare la
pressione del tasto.
Successivamente, dovrà trasmet-
tere gli opportuni comandi alle due SIM per
effettuare la copia della rubrica, cioè di ogni
record presente all’interno del file EFADN.
Pratica
cessore il segnale di clock necessario per il
corretto funzionamento. A parte i contatti di
alimentazione (C1, collegato direttamente a
5V) e di massa (C5, collegato direttamente a
massa), rimangono i due pin RST (C2) e I/O
(C7). Entrambi vengono utilizzati per lo
scambio dei dati con il dispositivo di interfacciamento.
Il primo rappresenta un ingresso per la smartcard e viene utilizzato per generare la condizione di Reset che porta la SIM al suo funzionamento, così come avviene con il Reset di
un microcontrollore (non dimentichiamo che,
tutto sommato, all’interno di una SIM c’è
proprio un microprocessore). Nel SIMCopier
il pin RST di entrambe le smartcard è collegato ad un pin del PIC (RB6 e RB3) che, via software, può generare la condizione di Reset.
Il pin I/O è il canale di comunicazione vero e
proprio tra smartcard e lettore: attraverso
questo contatto, i due dispositivi si scambiano le informazioni. Essendo un unico contatto, esso è bidirezionale ed è anch’esso collegato ad un pin del micro per
entrambi i connettori (RB1 e
RB7).
I condensatori da 100nF C3, C8,
C9, C11 sono utilizzati come vie
di fuga per eventuali disturbi o
variazioni veloci dell’alimentazione. Per questo sono stati posizionati, sul PCB, il più vicino possibile al componente di riferimento.
MODUGNO - SIM 8 5
19-04-2005
PRATICA
Ottava parte
11:42
Pagina 36
TEORIA
RISORSE
SPECIALE
Smartcard: SIMCopier
Pratica
36
FARE ELETTRONICA - MAGGIO 2005
Figura 5 Esempio di copia di un record tra due SIM di dimensione differente
Copiare la rubrica
Nella routine principale del firmware, oltre a
controllare la presenza delle SIM, viene anche
controllata la pressione del tasto che fa partire la procedura di copia della rubrica.
Se il tasto viene premuto e le due SIM sono
entrambe presenti nei rispettivi connettori, la
copia ha effettivamente inizio.
Come abbiamo già detto all’inizio dell’articolo, la rubrica si trova memorizzata all’interno
del file EFADN, contenuto nel DFTELECOM contenuto, a sua volta, nell’MF.
Prima di poter leggere o scrivere un qualsiasi
EF, è necessario selezionarlo mediante l’apposito comando SELECT FILE. Tenendo presente
le regole di selezione dei file, per poter selezionare l’EFADN, è necessario selezionare prima
il DFTELECOM (non è necessario selezionare l’MF
poiché automaticamente selezionato dopo
un Reset). Dopo aver selezionato il file EFADN,
ne viene letto l’header mediante il comando
GET RESPONSE.
Analizzando la risposta a quest’ultimo
comando, è possibile conoscere numerose
Figura 6 Diagramma di flusso relativo alla copia dei record della rubrica
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 37
informazioni sul file appena selezionato.
Nel nostro caso, ci interessa sapere il numero
dei record presenti nel file e la loro dimensione: infatti, questi due valori possono cambiare a seconda della capacità di memorizzazione della SIM. Per essere precisi, nell’header di
un file basato su record vengono indicati il
numero dei record e la dimensione totale del
file; per conoscere la dimensione di un singolo record, è necessario dividere la dimensione
totale del file per il numero dei record.
Gli stessi comandi inviati alla SIM sorgente
vengono inviati anche alla SIM destinazione.
Questa parte del firmware è rappresentata nel
diagramma di flusso in figura 4.
37
Pratica
Quest’ultima parte del firmware è rappresentata
sotto forma di diagramma di flusso in figura 6.
Alla fine dell’operazione di copia, verrà acceso
solo il led verde di DL4 per mostrare l’avvenuta
copia. Se, per un qualsiasi motivo, c’è un problema durante la copia dei record, il firmware si
blocca e viene acceso il solo led rosso di DL4 ad
indicazione dell’errore.
REALIZZAZIONE PROTOTIPO
Montaggio
Ho sbrogliato lo schema elettrico precedentemente descritto su un circuito delle dimensioni di 10x8 cm (mezza eurocard). In figura
7 è mostrato il solo lato rame con le piste, le
piazzole ed i fori in scala 1:1.
Utilizzando questa figura, potete realizzare il
circuito stampato del SIMCopier, avvalendovi del solito sistema di fotoincisione o di altro
equivalente. Una volta realizzato il circuito
FARE ELETTRONICA - MAGGIO 2005
L’ultima parte del programma riguarda la
copia di tutti i record dalla SIM sorgente alla
SIM destinazione, mediante i comandi READ
RECORD e UPDATE RECORD. Si tratta semplicemente di effettuare un ciclo su tutti i record
della SIM sorgente, a cui viene inviato il
comando READ RECORD ed il comando
UPDATE RECORD alla SIM destinazione. Ma
anche questa apparente semplice operazione
nasconde alcune difficoltà, dovute al fatto
che la capacità di memorizzazione delle due
SIM può essere diversa.
Prima di tutto, potrebbe essere diverso il
numero dei record. È facile trovare in giro
SIM che riescono a memorizzare 100 o 250
nomi in rubrica. Cosa succede se due schede
diverse vengono utilizzate nel SIMCopier?
L’unica soluzione che ho trovato è quella di
copiare al massimo il numero di record ospitabili nella SIM destinazione. In altre parole,
se la SIM sorgente ha 100 record in rubrica e
la SIM destinazione 250, verranno copiati
tutti i 100 record nelle prime posizioni della
rubrica della SIM destinazione.
Al contrario, se la SIM sorgente memorizza
250 record e la SIM destinazione solo 100,
verranno copiati solo i primi 100 record della
SIM sorgente!
È come se si volesse copiare il contenuto di
un DVD su un CD: al massimo, si potrà solo
copiare una parte.
Il secondo problema riguarda la dimensione
di un singolo record, anche questa variabile a
seconda della capacità di memorizzazione
della SIM. Cosa succede se il record della SIM
sorgente è più grande o più piccolo di quello
della SIM destinazione?
Come già detto precedentemente (vedi figura 1), il campo di dimensione variabile è quello relativo al nome associato al numero telefonico: i restanti 14 byte del record sono fissi
e conservano, tra l’altro, il numero telefonico.
Per poter adattare un record dalla SIM sorgente alla SIM destinazione, è possibile manipolare solo il primo “campo anagrafico”.
Così, se il record della SIM sorgente è più piccolo, verrà allungato lo spazio relativo al
nome aggiungendo dei byte di riempimento
(FF in esadecimale, così come da normative).
Al contrario, se il record sorgente è più grande del record destinazione, il nome verrà
opportunamente troncato.
Questa operazione è illustrata schematicamente in figura 5, nel caso di un record di
dimensione pari a 26 e 29 byte (12 e 15
caratteri per nomi).
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 38
PRATICA
Ottava parte
TEORIA
Pratica
FARE ELETTRONICA - MAGGIO 2005
Sigla
Valore
C1, C2
Condensatore 22pF
C3, C4, C5,
8, C9, C11
Condensatore 100nF
C6, C7
Condensatore elettrolitico 10µF
C10
Condensatore elettrolitico 1µF
D1
Diodo 1N4148
D2
Diodo 1N4004 o equivalente
DL1, DL2, L3
Diodo led verde 3mm
DL4
Diodo led bicolore rosso-verde
3mm
IC1
Microcontrollore PIC16F628A
IC2
74HC00
IC3
7805
Q1
Quarzo 3.579MHz
R1
Resistenza 1MΩ
R2
Resistenza 4.7kΩ
R3, R4, R5,
R6, R7
Resistenza 330Ω
R8
Resistenza 100Ω
S1
Deviatore per circuito stampato
a levetta
T1
Tasto momentaneo due deviatori
4 contatti
J1
Connettore per alimentazione
J2, J3
Connettore ISO7816 con
interruttore normalmente chiuso
Tabella 2
SPECIALE
Smartcard: SIMCopier
Elenco componenti
38
RISORSE
Elenco componenti
stampato, potete passare al montaggio dei
vari componenti, aiutandovi con lo schema
di montaggio illustrato in figura 8 e con
l’elenco componenti in tabella 2.
Il SIMCopier non presenta particolari difficoltà di montaggio. Iniziate come al solito con i
componenti a basso profilo: ponticelli, resistenze, diodi, zoccoli e connettori. Per una
pura questione estetica, ho preferito localizzare tutti i ponticelli sotto altri componenti in
modo che potessero essere nascosti.
È consigliabile saldare subito i ponticelli e
successivamente i componenti che li nascondono. Ce ne sono tre sotto lo zoccolo della
SIM sorgente (J3), quattro sotto lo zoccolo
della SIM destinazione (J2) ed uno sotto il
microcontrollore (IC1). Proseguite con i componenti a più alto profilo, quali i condensatori, i led, il quarzo, il 7805 e il deviatore dell’alimentazione.
Infine, inserite l’integrato 74HC00 e il
PIC16F628 nei rispettivi zoccoli.
Ovviamente il PIC va precedentemente programmato con l’apposito file eseguibile che
trovate sul sito di Fare Elettronica nelle pagine relative a questo articolo. Il file eseguibile
si chiama SIMCopier.hex che potete utilizzare
con il software che normalmente usate per la
programmazione dei PIC.
La parola di configurazione è memorizzata
all’interno del file eseguibile, quindi non
dovreste fare nulla di più che caricare il file e
scaricarlo nella memoria Flash del microcontrollore. Nel caso il vostro programma non
legga correttamente la parola di configurazione all’interno del file eseguibile, dovete abilitare i bit PWRT (PoWeR up Timer), BODEN
(Brown Out Detect ENable) e MCLRE (Master
Clear Enable), impostare come funzionamento dell’oscillatore un clock esterno (EC,
External Clock) e scegliere come volete i bit
per la protezione dalla lettura del codice. In
figura 9 è mostrata la finestra di ICProg, un
noto software freeware utilizzato per la programmazione dei PIC, in cui sono mostrati
anche i bit di configurazione.
Alla fine del montaggio, vi consiglio di etichettare i due connettori per le SIM come
SOURCE (sorgente) e DESTINATION (destinazione), in modo che non possiate confonder-
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 39
li. Tenete presente che, se invertite le SIM,
otterrete la sovrascrittura, quindi la perdita,
della SIM che, invece, volevate duplicare.
Nel mio prototipo ho applicato una etichetta
anche al tasto per indicarne il funzionamento.
Il risultato è quello che vedete in figura 10.
FARE ELETTRONICA - MAGGIO 2005
Figura 8 Piano di montaggio
39
Pratica
Figura 7 Circuito stampato in scala 1:1 (lato rame)
Funzionamento
Il funzionamento del circuito è molto semplice ed è stato già descritto tra le righe.
Non appena alimentate il circuito, dovrà
accendersi il led verde relativo all’alimentazione, indicando la corretta presenza della
tensione 5V. Se inserite una SIM
all’interno
dei
connettori
ISO7816, il led relativo si accenderà ad indicare che il microcontrollore comunica correttamente
con la scheda.
Se provate ad inserire una carta a
banda magnetica o una smartcard diversa da una SIM, il
microcontrollore non riuscirà a
comunicare con la scheda ed il
led rimarrà spento. Ricordate di
disabilitare il PIN su entrambe le
SIM prima di inserirle nel
SIMCopier. In caso contrario, i
led di stato si accenderanno
ugualmente, ma la procedura di
copia terminerà con un errore.
Dopo aver inserito le due SIM e,
quindi, dopo l’accensione dei
due led di stato, potete iniziare la
procedura di copia premendo il
tasto. Il led bicolore diventerà
giallo durante tutta l’operazione
mentre i led di stato delle SIM
cominceranno a lampeggiare: ad
ogni comandi READ RECORD
verrà acceso il led relativo alla
SIM sorgente, mentre ad ogni
comando UPDATE RECORD verrà
acceso il led relativo alla SIM
destinazione.
Dopo qualche decina di secondi,
la copia termina, lasciando i due
led di stato delle SIM spenti e il
led bicolore acceso: rosso (copia
fallita) o verde (copia effettuata
con successo).
A questo punto, potete spegnere
il SIMCopier ed inserire le SIM in
un telefonino per verificare l’av-
MODUGNO - SIM 8 5
19-04-2005
11:42
Pagina 40
PRATICA
Ottava parte
TEORIA
RISORSE
SPECIALE
Smartcard: SIMCopier
essere sempre letto e/o scritto.
E allora perché non utilizzare quella vecchia SIM buttata in un cassetto come backup della vostra rubrica? Questa semplice operazione
potrebbe risultare molto utile nel
caso in cui smarrite o distruggete
la SIM che utilizzate.
È bene precisare che il SIMCopier
duplica la rubrica presente all’interno di una SIM e non quella eventualmente presente nella memoria
del telefono.
Pratica
40
Figura 9 Finestra del programma ICProg
venuta copia. Se è il caso, ricordate di riabilitare il PIN.
FARE ELETTRONICA - MAGGIO 2005
STANCHI DI GIOCARE?
Faccio notare che la SIM destinazione può essere tranquillamente una vecchia SIM che avete
dimenticato da qualche parte e che è stata disabilitata dal gestore telefonico.
Non è importante, ai fini della copia della rubrica, che la SIM sia abilitata alle telefonate, poiché
il contenuto del file della rubrica può comunque
Sviluppi futuri
Il SIMCopier è nato solo per curiosità e non si può certo ritenere un
prodotto completo o paragonabile
ad apparati commerciali che fanno
la stessa cosa. Chi volesse ampliarne le caratteristiche potrebbe pensare di aggiungere un
tastierino numerico ed un display. In questo
modo, sarebbe possibile inserire direttamente il
PIN delle SIM senza doverlo disabilitare prima di
utilizzarle.
Inoltre, il display permetterebbe di avere maggiori
informazioni sullo stato di avanzamento della
copia: per esempio, è possibile visualizzare il
numero dei record di entrambe le SIM, la lunghezza di un nome in rubrica, eventuali errori, ecc.
Un’altra possibilità molto interessante è quella
di copiare non soltanto il contenuto del file
EFADN, ma anche quello del file EFSMS che conserva gli SMS.
Ringraziamenti
Desidero ringraziare l’amico Giuseppe de
Gennaro per il grande aiuto che mi ha dato
durante lo sbroglio e la realizzazione del
prototipo.
Figura 10
Foto del prototipo
BIBLIOGRAFIA
ETSI TS 100 977: Specification of the SIM-ME
Interface.
ETSI GSM 02.17: Subscriber Identity Modules,
Functional Characteristics
ISO7816 parti 1, 2, 3, 4.