Smartcards: Eine Grundierung

Smartcards haben in letzter Zeit im Web, auf der JavaOne-Konferenz im vergangenen April (vier Sitzungen, die sich mit der Technologie befassten), in den großen Netzwerknachrichtensendern und auf CNN viel Aufsehen erregt. In diesem Artikel werden wir die Smartcard anhand eines realen Smartcard-Beispiels zum Leben erwecken. Mit den hier vorgestellten Techniken können Sie Java-Anwendungen erstellen, die Smartcard-fähig sind.

Wir werden uns auf zwei Arten von Smartcards konzentrieren: Speicher-Smartcards , die als winzige austauschbare Lese- / Schreibdisketten mit optionaler Sicherheit angesehen werden können; und Prozessorkarten , die als Miniaturcomputer mit einem Ein- und Ausgangsanschluss betrachtet werden können. Zukünftige Artikel werden Prozessorkarten ausführlicher behandeln.

Als Kernstück des Artikels entwickeln wir einen einfachen Prototyp zum Lesen und Schreiben von Daten auf eine Smartcard. Wir werden eine verschreibungspflichtige Arzneimittelkarte besprechen , die eine Liste aller Ihrer Verschreibungen enthält und Ihre Versicherung, Verschreibungspläne und andere nützliche Informationen nachverfolgt. In späteren Artikeln wird die Idee der Rezeptkarte erweitert.

Sie werden feststellen, dass ein wiederkehrendes Thema, das in dieser Reihe auf Smartcards ausgeführt wird, die Notwendigkeit eines Sicherheitsframeworks ist, um zu verhindern, dass unerwünschte Plug-Ins, ActiveX-Komponenten usw. auf Ihre persönlichen und / oder Unternehmensinformationen zugreifen. Zu diesem Zweck bietet Ihnen die in diesem Artikel enthaltene Demonstration zum Lesen und Schreiben von Daten auf eine Smartcard einen dauerhaften, sicheren (und tragbaren) Speicher.

Was ist eine Smartcard?

Sie können sich die Smartcard als "Kreditkarte" mit einem "Gehirn" vorstellen, wobei das Gehirn ein kleiner eingebetteter Computerchip ist. Dieser Kartencomputer kann so programmiert werden, dass er Aufgaben ausführt und Informationen speichert. Beachten Sie jedoch, dass das Gehirn klein ist. Dies bedeutet, dass die Leistung der Smartcard weit unter der Ihres Desktop-Computers liegt.

Smartcards werden derzeit für Telefon-, Transport-, Bank- und Gesundheitstransaktionen verwendet. Dank Entwicklern wie Ihnen werden sie bald in Internetanwendungen verwendet. Smartcards werden in Japan und Europa bereits in großem Umfang eingesetzt und erfreuen sich in den USA zunehmender Beliebtheit. In der Smartcard-Branche dieses Landes sind kürzlich drei bedeutende Ereignisse eingetreten:

PC / SC

Microsoft und mehrere andere Unternehmen haben PC / SC eingeführt , eine Smartcard-Anwendungsschnittstelle für die Kommunikation mit Smartcards von Win32-basierten Plattformen für PCs. PC / SC unterstützt derzeit keine nicht auf Win32 basierenden Systeme und wird dies möglicherweise nie tun. Wir werden dies später genauer diskutieren.

OpenCard Framework

OpenCard ist ein offener Standard, der die Interoperabilität von Smartcard-Anwendungen über NCs, POS, Desktops, Laptops, Set-Tops usw. bietet. OpenCard verspricht, 100% reine Java-Smartcard-Anwendungen bereitzustellen. Smartcard-Anwendungen sind häufig nicht rein, da sie mit einem externen Gerät kommunizieren und / oder Bibliotheken auf dem Client verwenden. (Nebenbei bemerkt, 100% reine Anwendungen könnten ohne OpenCard existieren, aber ohne OpenCard würden Entwickler selbst entwickelte Schnittstellen zu Smartcards verwenden.) OpenCard bietet Entwicklern auch eine Schnittstelle zu PC / SC für die Verwendung vorhandener Geräte unter Win32 Platfroms.

JavaCard

JavaCard wurde von Schlumberger eingeführt und kürzlich von JavaSoft als Standard eingereicht. Schlumberger hat derzeit die einzige Java-Karte auf dem Markt und das Unternehmen ist der erste JavaCard-Lizenznehmer. JavaCard ist eine Smartcard mit dem Potenzial, den gesamten Smartcard-Standard festzulegen. Sie besteht aus Standardklassen und APIs, mit denen Java-Applets direkt auf einer ISO 7816-kompatiblen Standardkarte ausgeführt werden können. JavaCards ermöglichen die sichere und chipunabhängige Ausführung verschiedener Anwendungen.

Hinweis:

Obwohl sich dieser Artikel auf Smartcards konzentriert, ist es wichtig zu beachten, dass Sie nicht auf diese Art von Geräten beschränkt sind. Persönlich bevorzuge ich das "Ibuttons" -Gerät von Dallas Semiconductor. Es ist klein und tragbar wie eine Kreditkarte, aber viel handlicher. Warum? Sie müssen Ihre Brieftasche nicht auf der Suche nach einer Karte ausgraben. Ibuttons ist genau dort, an Ihrem Finger. Ja, es ist ein Ring!

Es gibt zwar kontaktlose Versionen der Smartcard (siehe unten für weitere Informationen dazu), aber ich denke, dass das Gerät vom Typ Ibuttons, Funktionsschmuck, durchaus rentabel sein könnte. Weitere Informationen zu Ibuttons finden Sie im Abschnitt Ressourcen. Übrigens hat das Java Commerce Team im vergangenen August auf der Java Internet Business Expo (JIBE) in New York einen "JavaRing" demonstriert. Sie können dies im Artikel im Fortune- Magazin lesen (siehe auch den Abschnitt Ressourcen).

Warum eine Smartcard verwenden?

Was sind die Vorteile einer Smartcard? Nun, eine Chipkarte:

  • ist zuverlässiger als eine Magnetstreifenkarte
  • Derzeit können hundertmal mehr Informationen gespeichert werden als auf einer Magnetstreifenkarte
  • ist schwieriger zu manipulieren als Magnetstreifen
  • kann wegwerfbar oder wiederverwendbar sein
  • kann mehrere Funktionen in einer Vielzahl von Branchen ausführen
  • ist kompatibel mit tragbaren elektronischen Geräten wie Telefonen, persönlichen digitalen Assistenten (PDAs) und PCs
  • entwickelt sich ständig weiter (schließlich enthält es einen Computerchip)

Arten von Smartcards

Wie oben erwähnt, konzentriert sich dieser Artikel auf zwei Arten von Smartcards - Speicher und Prozess. Insgesamt gibt es fünf Arten von Smartcards:

  1. Speicherkarten
  2. Prozessorkarten
  3. elektronische Geldbörsenkarten
  4. Sicherheitskarten
  5. JavaCard

Smartcards sind eine persönliche Hardware, die mit einem anderen Gerät kommunizieren muss, um Zugriff auf ein Anzeigegerät oder ein Netzwerk zu erhalten. Karten können in ein Lesegerät eingesteckt werden, das üblicherweise als bezeichnet wird

Kartenterminal

oder sie können mit HF-Funkfrequenzen arbeiten.

Smartcards können in einer von zwei Formen mit einem Lesegerät oder Empfänger kommunizieren (weitere Informationen zu diesen beiden Begriffen finden Sie im Abschnitt über Lesegeräte unten):

Smartcards kontaktieren - Die Verbindung wird hergestellt, wenn der Leser einen kleinen Goldchip auf der Vorderseite der Karte berührt.

Kontaktlose Smartcards - Diese können über eine Antenne kommunizieren, sodass die Karte nicht mehr von Hand eingesetzt und entfernt werden muss. Mit einer kontaktlosen Karte müssen Sie sich nur einem Empfänger nähern, und die Karte beginnt mit ihm zu kommunizieren. Kontaktlose Karten können in Anwendungen verwendet werden, in denen das Einsetzen / Entfernen von Karten unpraktisch sein kann oder in denen Geschwindigkeit wichtig ist.

Einige Hersteller stellen Karten her, die sowohl im kontaktbehafteten als auch im kontaktlosen Modus funktionieren.

Erstellen Sie eine Entwicklungsumgebung zum Erstellen von Smartcard-Apps

Um Smartcard-Anwendungen zu entwickeln, benötigen Sie einige Dinge, nämlich: einen Smartcard-Leser; Software zur Kommunikation mit dem Lesegerät sowie Software zur Kommunikation mit der in das Lesegerät eingesteckten Karte; und natürlich Smartcards und Smartcard-Hardware.

Chipkartenleser

Um mit einer Smartcard zu kommunizieren oder eine Smartcard-fähige Anwendung zu entwickeln, benötigen Sie einen Leser . Der Reader bietet Ihrer Anwendung einen Pfad zum Senden und Empfangen von Befehlen von der Karte. Es gibt viele Arten von Lesegeräten auf dem Markt, am häufigsten sind Serien- , PCCard- und Tastaturmodelle . (Hier und da tauchen Tastaturmodelle auf. Erwarten Sie, dass sie bis Juni 1998 direkt bei den großen PC-Herstellern erhältlich sind.)

In diesem Artikel werden serielle Lesegeräte zur Unterstützung der Geräte verwendet. Ein serieller Leser wird an die serielle Schnittstelle eines Computers angeschlossen. Beachten Sie, dass der bereitgestellte Code auch einen PCCard-Leser unterstützt. Die meisten Laptops verfügen über integrierte PCCard-Steckplätze.

Jeder Hersteller bietet ein anderes Protokoll für das Sprechen mit einem Leser. Sobald Sie mit dem Lesegerät kommunizieren können, gibt es ein Protokoll für die Kommunikation mit einer Smartcard: Die Kommunikation mit einer Smartcard basiert auf dem APDU-Format. (Das APDU-Format wird unten erläutert.) Informationen zum Kauf eines eigenen Lesegeräts finden Sie in der Überschrift "Gemplus-Smartcard-Lesegeräte" im Abschnitt "Ressourcen".

Software zur Kommunikation mit dem Leser

Für das in diesem Artikel enthaltene Smartcard-Beispiel werden eine Reihe objektorientierter Klassen benötigt. Diese sind:

  • ISO-Befehlsklassen für die Kommunikation mit dem 7816-Protokoll
  • Klassen für die Kommunikation mit dem Leser
  • Klassen zum Konvertieren von Daten in ein herstellerspezifisches Format
  • Eine Anwendung zum Testen und Verwenden der Karten für den Zweck, für den die Anwendung entwickelt wurde

Smartcards und Smartcard-Hardware

Wie am Anfang des Artikels erwähnt, benötigen Sie zur Entwicklung der Smartcard-Anwendung Smartcard-Hardware und einige Smartcards. Sie können Smartcard-Entwicklungskits von einer Reihe von Unternehmen erwerben, darunter Gemplus und Schlumberger.

Für diejenigen unter Ihnen, die bereits Leser haben, sollten Sie in der Lage sein, Ihren Leser zu verwenden, indem Sie eine Implementierung einer Schnittstellenklasse bereitstellen, die wir später diskutieren werden. Wie oben erwähnt, müssen wir in der Lage sein, mit dem Leser zu kommunizieren, bevor wir mit der Karte kommunizieren können, und genau wie es viele verschiedene Karten gibt, gibt es viele verschiedene Leser.

Wichtige Smartcard-Standards

Ein wichtiger Teil des Puzzles für die Entwicklung von Smartcard-Anwendungen sind die Standardprotokolle. Grundsätzlich kommuniziert die Anwendung mit dem Lesegerät, das wiederum über ein Standardprotokoll mit der Smartcard kommuniziert - in unserem Fall über das Protokoll der International Standards Organization (ISO) 7816.

Wie bei jeder neuen Technologie gibt es so viele Standards für Smartcards, dass Sie möglicherweise entmutigt und überfordert sind. Wenn Sie ein grundlegendes Verständnis der folgenden Standards erlangen, können Sie Anwendungen mit der Gewissheit entwickeln, dass Sie etwas Grundlegendes zur Verwendung von Smartcards nicht ignorieren. Für einige Systeme kommen jedoch spezielle Standards ins Spiel. Ich habe die gesamte Standardsache in "horizontale" und "vertikale" Standards unterteilt: Horizontale Standards können von allen Anwendungen verwendet werden, während vertikale Standards systemspezifisch sind.

Horizontale Standards

  • ISO 7816 - beschreibt die unterste Schnittstelle zu einer Smartcard. Auf dieser Ebene werden Datenbytes zwischen Kartenleser und Karte übertragen.

  • PC / SC - der Standard für die Kommunikation mit Smartcards, die an Win3.1 / Win95 / NT-Computer angeschlossen sind.

  • OCF - eine All-Java-Schnittstelle für die Kommunikation mit Smartcards aus einer Java-Umgebung. (In Kürze können Entwickler mit OCF in OCF schreiben und die Übersetzung durchführen, sodass kein Schreiben in PC / SC erforderlich ist.)

  • JavaCard - beschreibt die JavaCard und was sie unterstützt.

Vertikale Standards

  • Mondex - digitales Geld, das nur Smartcards verwendet. Der Mondex-Ansatz erlaubt kein Bargeld außerhalb der Karte.

  • VisaCash - Debitkarte, die die Karten auf dem Server verfolgt.

  • Proton - eine andere Form von E-Cash.

  • MPCOS-EMV - Allzweckkarte, mit der Sie Ihre eigene Art von Währung oder Token implementieren können.

Ich bin immer wieder erstaunt, dass ein so kleines Stück Plastik so viel Dokumentationslesen erfordern und so viel Wissen seitens des Entwicklers erfordern kann!

Da bei Smartcards ein so hohes Maß an Fachwissen erforderlich ist, gibt es einen Markt für Entwickler, auf dem Beans-fähige Produkte angeboten werden können, die einen vertikalen Standard unter Verwendung des horizontalen Standards für den Markt implementieren, an den Sie verkaufen möchten. Dies bedeutet, dass Sie Beans entwickeln können, die verschiedene Kombinationen der horizontalen Standards verwenden, wie z. B. OpenCard, um eine bestimmte Anwendung unter Verwendung eines anderen Industriestandards für den Handel oder einer anderen Anwendung zu implementieren.

Kommunizieren Sie mit Smartcards über ein Java-Applet oder eine Java-Anwendung

Sie wissen, was Sie benötigen, um die gesamte Hardware anzuschließen. Jetzt müssen wir verstehen, wie einige APIs verwendet werden, mit denen wir Befehle von einer Anwendung an einen Leser senden können. (Der Leser kommuniziert wiederum mit der Karte und fungiert dabei als Vermittler, bevor er die Daten an die Karte sendet.) Der Chipkartenleser wackelt mit den goldenen Kontaktpunkten und überträgt die Daten. Die Karte macht etwas mit den Daten und gibt sie an den Leser zurück, der die Daten dann an die Anwendung zurückgibt. Wo befinden sich all diese Bytes, wenn sie von Ihrer Anwendung auf die Karte verschoben werden?

Wie oben erwähnt, kommuniziert die Anwendung mit dem Lesegerät, das wiederum unter Verwendung der oben diskutierten Standards mit der Smartcard kommuniziert. Grundsätzlich wurde im Zuge der Entwicklung der Smartcard-Technologie von der ISO ein Smartcard-Standard vorgeschlagen. Der Standard definiert mechanische und elektrische Eigenschaften sowie das Protokoll für die Kommunikation mit der Karte. Zeiger auf die relevanten ISO-Dokumente sind im Abschnitt Ressourcen aufgeführt. Leider konnte die ISO-Gruppe keinen Standard für die Kommunikation mit dem Leser bereitstellen. Um einen Befehl an eine Karte zu senden, müssen Sie zuerst den von der Karte unterstützten Befehl suchen, diesen Befehl in ein ISO-Befehlspaket einschließen und dann diesen neuen Befehl in den für den betreffenden Leser erforderlichen Wrapper einschließen. Die hier bereitgestellte Beispielanwendung führt diese gesamte Überlagerung für Sie aus.

Application Protocol Data Units (APDUs)

Die Grundeinheit für den Austausch mit einer Smartcard ist das APDU-Paket. Die von der Anwendungsschicht gesendete Befehlsnachricht und die von der Karte an die Anwendungsschicht zurückgegebene Antwortnachricht werden als APDU (Application Protocol Data Units) bezeichnet. Die Kommunikation mit der Karte und dem Lesegerät erfolgt mit APDUs. Eine APDU kann als Datenpaket betrachtet werden, das eine vollständige Anweisung oder eine vollständige Antwort von einer Karte enthält. Um diese Funktionalität bereitzustellen, verfügen APDUs über eine genau definierte Struktur, die in einer Reihe von ISO-Dokumenten definiert ist, die zur Spezifikationsfamilie 7816 gehören.

APDUs bestehen aus folgenden Feldern:

Befehl APDU Format

CLA INS P1 P2 Lc Daten Le

Antwort-APDU-Format

Daten SW1 SW2

Im Folgenden sind einige der Klassen aufgeführt, die für den Transport von APDUs bereitgestellt werden, sowie die Funktionen der Klassen: