Smart card: un primer

Le smart card hanno avuto molto successo ultimamente sul Web, alla conferenza JavaOne dell'aprile scorso (quattro sessioni si sono occupate della tecnologia), sui notiziari della grande rete e sulla CNN. In questo articolo daremo vita alla smart card con un esempio di smart card del mondo reale. Le tecniche qui presentate ti permetteranno di iniziare a creare applicazioni Java abilitate per smart card.

Ci concentreremo su due tipi di smart card: smart card di memoria , che possono essere visualizzate come minuscoli dischi di lettura / scrittura rimovibili con protezione opzionale; e schede processore , che possono essere visualizzate come computer in miniatura con una porta di ingresso e uscita. Articoli futuri tratteranno le schede del processore in modo più approfondito.

Come elemento centrale dell'articolo, svilupperemo un semplice prototipo per la lettura e la scrittura di dati su una smart card. Discuteremo una scheda di prescrizione di farmaci , che conserva un elenco di tutte le tue prescrizioni e tiene traccia della tua assicurazione, dei piani di prescrizione e di altre informazioni utili. Gli articoli successivi approfondiranno l'idea della scheda di prescrizione.

Noterai che un tema ricorrente in questa serie di smart card è la necessità di un framework di sicurezza per impedire che plug-in non autorizzati, componenti ActiveX e così via raggiungano le tue informazioni personali e / o aziendali. A tal fine, la dimostrazione di come leggere e scrivere dati su una smart card inclusa in questo articolo fornirà un'archiviazione persistente, sicura (e portatile).

Cos'è una smart card?

Puoi pensare alla smart card come a una "carta di credito" con un "cervello", essendo il cervello un piccolo chip di computer incorporato. Questo computer con scheda può essere programmato per eseguire attività e memorizzare informazioni, ma tieni presente che il cervello è piccolo , il che significa che la potenza della smart card è molto inferiore a quella del tuo computer desktop.

Le smart card sono attualmente utilizzate nelle transazioni telefoniche, di trasporto, bancarie e sanitarie e presto, grazie a sviluppatori come te, inizieremo a vederle utilizzate nelle applicazioni Internet. Le smart card sono già ampiamente utilizzate in Giappone e in Europa e stanno guadagnando popolarità negli Stati Uniti. Di recente, infatti, si sono verificati tre eventi significativi nel settore delle smart card in questo paese:

PC / SC

Microsoft e molte altre società hanno introdotto PC / SC , un'interfaccia per applicazioni smart card per la comunicazione con smart card da piattaforme basate su Win32 per personal computer. PC / SC attualmente non supporta i sistemi non basati su Win32 e potrebbe non farlo mai. Ne discuteremo più dettagliatamente in seguito.

OpenCard Framework

OpenCard è uno standard aperto che fornisce l'interoperabilità delle applicazioni smart card tra NC, POS, desktop, laptop, set top e così via. OpenCard promette di fornire applicazioni per smart card Java pure al 100%. Le applicazioni per smart card spesso non sono pure perché comunicano con un dispositivo esterno e / o utilizzano le librerie sul client. (Come nota a margine, le applicazioni pure al 100% potrebbero esistere senza OpenCard, ma senza di essa, gli sviluppatori utilizzerebbero interfacce di produzione propria per le smart card.) OpenCard fornisce inoltre agli sviluppatori un'interfaccia per PC / SC per l'utilizzo di dispositivi esistenti su Win32 platfroms.

JavaCard

JavaCard è stata introdotta da Schlumberger e presentata come standard da JavaSoft di recente. Schlumberger possiede attualmente l'unica Java card sul mercato e la società è il primo licenziatario JavaCard. Una smart card con il potenziale per impostare lo standard globale della smart card, JavaCard è composta da classi standard e API che consentono l'esecuzione di applet Java direttamente su una scheda conforme allo standard ISO 7816. Le JavaCard consentono l'esecuzione sicura e indipendente dal chip di diverse applicazioni.

Nota:

Sebbene questo articolo si concentri sulle smart card, è importante notare che non sei limitato a questi tipi di dispositivi. Personalmente, preferisco il dispositivo "Ibuttons" prodotto da Dallas Semiconductor. È piccolo e portatile come una carta di credito, ma molto più maneggevole. Perché? Non devi tirare fuori il portafoglio alla ricerca di una carta; Ibuttons è proprio lì, al tuo dito. Sì, è un anello!

Sebbene esistano versioni contactless della smart card (vedi sotto per maggiori informazioni su questo), penso che il tipo di dispositivo di gioielleria funzionale Ibuttons potrebbe essere abbastanza redditizio. Per ulteriori informazioni su Ibuttons, vedere la sezione Risorse. A proposito, il Java Commerce Team ha dimostrato un "JavaRing" al Java Internet Business Expo (JIBE) a New York lo scorso agosto. Puoi leggere su questo nell'articolo nella rivista Fortune (di nuovo, vedi la sezione Risorse).

Perché utilizzare una smart card?

Quali sono i vantaggi dell'utilizzo di una smart card? Bene, una smart card:

  • è più affidabile di una carta a banda magnetica
  • attualmente è in grado di memorizzare cento volte più informazioni di una scheda a banda magnetica
  • è più difficile da manomettere rispetto alle strisce magnetiche
  • può essere usa e getta o riutilizzabile
  • può svolgere molteplici funzioni in un'ampia gamma di settori
  • è compatibile con dispositivi elettronici portatili come telefoni, PDA (Personal Digital Assistant) e PC
  • è in continua evoluzione (dopotutto, incorpora un chip per computer)

Tipi di smart card

Come accennato in precedenza, questo articolo si concentrerà su due tipi di smart card: memoria e processo. In tutto, ci sono cinque tipi di smart card:

  1. schede di memoria
  2. schede processore
  3. carte elettroniche per borsette
  4. carte di sicurezza
  5. JavaCard

Le smart card sono un componente hardware personale che deve comunicare con un altro dispositivo per ottenere l'accesso a un dispositivo di visualizzazione oa una rete. Le carte possono essere inserite in un lettore, comunemente indicato come un file

terminale della carta

oppure possono operare utilizzando frequenze radio RF.

Le smart card possono comunicare con un lettore o un ricevitore (vedere la sezione sui lettori di seguito per ulteriori informazioni su questi due termini) in una delle due forme:

Contatta smart card : la connessione viene effettuata quando il lettore tocca un piccolo chip dorato sulla parte anteriore della carta.

Smart card senza contatto : possono comunicare tramite un'antenna, eliminando la necessità di inserire e rimuovere la scheda manualmente. Con una carta contactless, tutto ciò che devi fare è avvicinarti a un ricevitore e la carta inizierà a comunicare con esso. Le carte contactless possono essere utilizzate in applicazioni in cui l'inserimento / rimozione della carta può essere impraticabile o in cui la velocità è importante.

Alcuni produttori stanno realizzando carte che funzionano sia in modalità contact che contactless.

Crea un ambiente di sviluppo per la creazione di app per smart card

Per sviluppare applicazioni per smart card, sono necessarie alcune cose, vale a dire: un lettore di smart card; software per comunicare con il lettore e alcuni software per comunicare con la scheda che è stata inserita nel lettore; e, naturalmente, smart card e hardware per smart card.

Lettore di smart card

Per comunicare con una smart card o sviluppare un'applicazione compatibile con smart card, è necessario disporre di un lettore . Il lettore fornisce un percorso per la tua applicazione per inviare e ricevere comandi dalla scheda. Esistono molti tipi di lettori sul mercato, i più diffusi sono i modelli seriale , PCCard e tastiera . (I modelli di tastiera compaiono qua e là; aspettati che siano direttamente disponibili presso i grandi produttori di PC entro giugno 1998.)

Questo articolo utilizza lettori seriali per supportare i dispositivi. Un lettore seriale si collega alla porta seriale di un computer. Notare che il codice fornito supporta anche un lettore PCCard; la maggior parte dei laptop è dotata di slot per PCCard integrati.

Ogni produttore fornisce un protocollo diverso per parlare con un lettore. Una volta che è possibile comunicare con il lettore, esiste un protocollo per comunicare con una smart card: la comunicazione con una smart card si basa sul formato APDU. (Il formato APDU è discusso di seguito.) Per informazioni sull'acquisto del proprio lettore, vedere l'intestazione "Lettori di smart card Gemplus" nella sezione Risorse.

Software per comunicare con il lettore

Per l'esempio di smart card incluso in questo articolo sono necessarie numerose classi orientate agli oggetti. Questi sono:

  • Classi di comando ISO per la comunicazione con il protocollo 7816
  • Classi per comunicare con il lettore
  • Classi per la conversione dei dati in un formato specifico del produttore
  • Un'applicazione per testare e utilizzare le carte per lo scopo per cui l'applicazione è stata progettata

Smart card e hardware per smart card

Come notato all'inizio dell'articolo, per sviluppare l'applicazione per smart card qui, sono necessari hardware per smart card e alcune smart card. È possibile acquistare kit di sviluppo per smart card da numerose aziende, tra cui Gemplus e Schlumberger.

Per quelli di voi che hanno già lettori, dovreste essere in grado di utilizzare il vostro lettore fornendo un'implementazione di una classe di interfaccia di cui parleremo più avanti. Come accennato in precedenza, prima di poter comunicare con la carta, dobbiamo essere in grado di comunicare con il lettore, e proprio come ci sono molte carte diverse, ci sono molti lettori diversi.

Importanti standard per smart card

Un pezzo importante del puzzle di sviluppo di applicazioni per smart card sono i protocolli standard. Fondamentalmente, l'applicazione comunica con il lettore, che a sua volta parla con la smart card utilizzando un protocollo standard, nel nostro caso, il protocollo 7816 della International Standards Organization (ISO).

Come con qualsiasi nuova tecnologia, ci sono così tanti standard per le smart card che potresti trovarti scoraggiato e sopraffatto. Il raggiungimento di una conoscenza di base dei seguenti standard consentirà di sviluppare applicazioni con la certezza di non ignorare qualcosa di basilare nell'uso delle smart card. Per alcuni sistemi, tuttavia, entrano in gioco standard speciali. Ho suddiviso l'intera questione degli standard in standard "orizzontali" e "verticali": gli standard orizzontali possono essere utilizzati da tutte le applicazioni, mentre gli standard verticali sono specifici di un sistema.

Standard orizzontali

  • ISO 7816 : descrive l'interfaccia di livello più basso per una smart card. È a questo livello che i byte di dati vengono trasferiti tra il lettore di schede e la scheda.

  • PC / SC : lo standard per la comunicazione con smart card collegate a macchine Win3.1 / Win95 / NT.

  • OCF - un'interfaccia interamente Java per la comunicazione con smart card da un ambiente Java. (Presto OCF consentirà agli sviluppatori di scrivere su OCF ed eseguire la traduzione, quindi non sarà necessario scrivere su PC / SC.)

  • JavaCard : descrive la JavaCard e cosa supporta.

Standard verticali

  • Mondex - contante digitale che utilizza solo smart card. L'approccio Mondex non consente l'esistenza di contanti al di fuori della carta.

  • VisaCash - carta di debito che tiene traccia delle carte sul server.

  • Proton - un'altra forma di E-cash.

  • MPCOS-EMV - carta generica che ti consente di implementare il tuo tipo di valuta o token.

Sono sempre stupito che un pezzo di plastica così piccolo possa richiedere così tanta documentazione da leggere e richiedere così tanta conoscenza da parte dello sviluppatore!

Poiché un livello di competenza così elevato è necessario con le smart card, esiste un mercato per gli sviluppatori che forniscono prodotti compatibili con Beans che implementano uno standard verticale utilizzando lo standard orizzontale per il mercato a cui stai cercando di vendere. Ciò significa che è possibile sviluppare bean che utilizzano varie combinazioni di standard orizzontali, come OpenCard, per implementare un'applicazione specifica utilizzando qualche altro standard industriale per il commercio o qualsiasi altra applicazione.

Comunicare con smart card da un'applet o un'applicazione Java

Sai di cosa hai bisogno per connettere tutto l'hardware. Ora dobbiamo capire come utilizzare alcune API che ci permetteranno di inviare comandi da un'applicazione a un lettore. (Il lettore, a sua volta, comunica con la carta, fungendo quindi da intermediario prima di inviare i dati alla carta). Il lettore di smart card muove i punti di contatto dorati e trasferisce i dati. La scheda farà qualcosa con i dati e li restituirà al lettore, che poi restituirà i dati all'applicazione. Allora dove sono tutti questi byte mentre si spostano dalla tua applicazione alla scheda?

Come accennato in precedenza, l'applicazione comunica con il lettore, che a sua volta dialoga con la smart card utilizzando gli standard discussi sopra. Fondamentalmente, con lo sviluppo della tecnologia delle smart card, l'ISO ha proposto uno standard per smart card. Lo standard definisce le caratteristiche meccaniche ed elettriche, nonché il protocollo per la comunicazione con la scheda. I puntatori ai documenti ISO rilevanti sono elencati nella sezione Risorse. Sfortunatamente, il gruppo ISO non è stato in grado di fornire uno standard per la comunicazione con il lettore. Quindi, per inviare un comando a una scheda, devi prima trovare il comando che la scheda supporta, racchiudere questo comando in un pacchetto di comandi ISO e quindi avvolgere questo nuovo comando nel wrapper richiesto per il lettore in questione. L'applicazione di esempio fornita qui esegue tutti questi livelli per te.

Application Protocol Data Unit (APDU)

L'unità base di scambio con una smart card è il pacchetto APDU. Il messaggio di comando inviato dal livello dell'applicazione e il messaggio di risposta restituito dalla scheda al livello dell'applicazione sono chiamati APDU (Application Protocol Data Unit). La comunicazione con la scheda e il lettore viene eseguita con APDU. Un APDU può essere considerato un pacchetto di dati che contiene un'istruzione completa o una risposta completa da una scheda. Per fornire questa funzionalità, le APDU hanno una struttura ben definita definita in una serie di documenti ISO appartenenti alla famiglia di specifiche 7816.

Gli APDU sono costituiti dai seguenti campi:

Formato APDU dei comandi

CLA INS P1 P2 Lc Dati Le

Formato APDU di risposta

Dati SW1 SW2

Le seguenti sono alcune delle classi fornite per il trasporto di APDU e le funzioni delle classi: