Windows Developer
Der Artikel „Mit Karte, bitte!“ von Helmut Stoiber ist erstmalig erschienen im Windows Developer 7.2012
APDU
Der funktionale Umfang einer Chipkarte ist durch die Kommandos gemäß Tabelle 5 beschrieben und wird durch so genannte APDU (Application Protocol Data Units) auf die Low-Level-Schnittstelle abgebildet. Man unterscheidet zwischen Command-APDU, die vom Terminal zur Chipkarte gesendet werden, und Response-APDU, die von der Chipkarte zum Terminal übertragen werden. Die auf solchen APDU basierende Kommunikation wird während eines ATR (Answer to Reset) etabliert. Die ATR repräsentiert den ersten von der Chipkarte gesendeten Datenblock, nachdem diese einen Power-up empfangen hat. Neben Informationen über den Kartentyp enthält die ATR Protokollparameter, die unter anderem darüber Aufschluss geben, ob T=0 oder T=1 zu verwenden ist. Wie aus Abbildung 8 hervorgeht, setzt sich eine Command-APDU aus einem Header und einem Body zusammen. CLA, INS, P1 und P bilden den Header und bestehen jeweils aus genau einem einzelnen Byte, das heißt, der Header hat eine feste Struktur und Länge.

Der Aufbau des Bodys kann hingegen variieren und zwar in Abhängigkeit davon, um welchen von den in Tabelle 6 aufgeführten Fällen (Case) es sich handelt. Die Bedeutungen der einzelnen Bytes einer Command-APDU sind in Tabelle 7 zusammengestellt.
Tabelle 6: APDU-Fallunterscheidung
Case | Kurzbeschreibung | Struktur |
---|---|---|
Case 1 | Kommando ohne Command-APDU und Response-APDU | |Header| |
Case 2 | Kommando ohne Command-APDU, aber mit Response-APDU | |Header|Le| |
Case 3 | Kommando mit Command-APDU, aber ohne Response-APDU | |Header|Lc|Data| |
Case 4 | Vollständiges Kommando mit Command-APDU und mit Response-APDU | |Header|Lc|Data|Le| |
Tabelle 7: Command-APDU
Feld | Name | Länge | Kurzbeschreibung |
---|---|---|---|
CLA | Class | 1 | Typ des Kommandos: Interindustry oder proprietär |
INS | Instruction | 1 | Spezifisches Kommando, z. B. SELECT FILE |
P1 | Parameter 1 | 1 | Parameter für das Kommando, z. B. Offset |
P2 | Parameter 2 | 1 | Parameter für das Kommando, z. B. Offset |
Lc | Length command | 0, 1, 3 | Länge der Kommandodaten (Data) |
Data | Data | Lc | Kommandodaten |
Le | Length expected | 0 – 4 | Länge der erwarteten Antwortdaten |
Eine Response-APDU besteht gemäß Abbildung 9 aus einem Body und einem Trailer. Der Body enthält die Antwortdaten oder weist die Länge Null auf, falls keine Antwortdaten gesendet wurden (Le=0) oder ein Verarbeitungsfehler aufgetreten ist. Die beiden Statusbytes SW1 und SW2 bilden zusammen das Statuswort, das über erfolgreiche oder fehlerhafte Ausführung des Kommandos Aufschluss gibt.

Die Norm ISO/IEC 7816-4 definiert eine Reihe von Return- und Fehlercodes in Form von zu einem Statuswort konkatenierten Bytes SW1 und SW2. Der Return-Code SW1=90 und SW2=00 bedeutet, dass die Transaktion fehlerfrei verarbeitet werden konnte. Aus Gründen der Übersichtlichkeit sind die übrigen Fehlercodes als Definitionen in das zu diesem Artikel gehörende Softwaredemoprojekt (SCDemo.sln) ausgelagert. Die APDU-Sequenz 00A4000C023F00 lässt sich beispielsweise wie folgt zerlegen:
- CLA=00: Standardklasse (Interindustry) ohne Secure Messaging
- INS=A4: SELECT FILE
- P1=00: Steuerung für Select
- P2=0C: Option für Select
- Lc=02: Länge von Data ist 2 Byte
- Data=3F00: FID der Master File