ChipTAN: Difference between revisions

From
Jump to navigation Jump to search
Line 89: Line 89:


- SELECT Ordner, File oder Applikation
- SELECT Ordner, File oder Applikation

- READ RECORD
- READ RECORD

- SEARCH RECORD
- SEARCH RECORD

- Kartenspezielle Befehle
- Kartenspezielle Befehle






Revision as of 21:57, 3 October 2012

Ziel

  • Analyse der Kommunikation zwischen Karte und Terminal
  • Untersuchung einer möglichen Softwareemulation des ChipTAN-Generators

Herangehensweise

Davids Part passt hiuer gut her!

  • >hier Bild vom Aufbau<
  • Beschreibung des Aufbaus
  • wie wollten wir das ganze machen also seriell zu byte mit dem plugin vom logic analyzer etc.

Asychronous Character Transfer

Die elementare Übertragungseinheit ist ein Character.

  • 1 Byte wird mit 10 Bit übertragen
  • 1. Bit = Startbit
  • 2.-9. Bit = Daten
  • 10. Bit = Paritybit

Zwischen der Übertragung zweier Bytes wird eine vorher ausgehandelte Zeit gewartet (I/O Kanal auf High gesetzt) um der Gegenseite die möglichkeit zu geben das letzte Byte nochmal anzufordern (falls Paritybit falsch war). Wählt man die ersten fallende Flanke des I/O Kanals nach dem schalten des Reset-Signals auf High als Startpunkt kann man somit direkt Bytesvom I/O-Kanal ablesen.

Analyse des Bytestroms

Bei Inbetriebnahme einer Chipkarte wird diese durch das Terminal mit Strom und einem Takt versorgt. Als erstes setzt das Terminal den Reset-Kanal auf High, woraufhin die Chipkarte das Senden einer ATR("Answer To Reset") beginnt.

ATR

  • max. 33 Byte lang
  • 1. Byte (TS) gibt Coding Convention an
    • Wert '3B' = Startbit = 0 Daten= °1101 1100° Parity = 1 -> direct convention (least significant bit -> most significant bit)
    • Wert '3F' = Startbit = 0 Daten= °0011 1111° Parity = 1 -> inverse convention (most significant bit -> least significant bit)
  • 2. Byte (T0) gibt Anzahl der nachfolgenden Interface Character (TA,TB,TC,TD) und Anzahl der Historical Characters an
  • 3. Byte (TA1) codiert Übertragungsfrequenz und Teiler die die Karte maximal unterstützt
  • TAi,TBi,TCi-Bytes enthalten Informationen über die Fähigkeiten der Karte in Abhängigkeit vom jeweiligen Übertragungsprotokoll (unterstützte Frequenzen etc.)
  • TDi-Bytes geben an ob und welche TA,TB,TC,TD im Anschluß gesendet werden (verkettung möglich), das Übertragungsprotokoll wird auch angegeben (in 0x08)

Im Anschluss an die TA,TB,TC,TD-Bytes folgen die historical Character und ein Checksummen-Byte TCK (XOR-Prüfsumme von T0 bis zum Byte vor TCK)

Die ATR enthält somit Informationen über die Karte (z.B. unterstützte Übertragungsprotokolle und Geschwindigkeiten etc.)

Protocol Parameter Selection (PPS)

Durch die übermittelte ATR und die darin enthaltenen Informationen über die Fähigkeiten der Karte hat das Terminal nun die Möglichkeit (optional) neue Übertragungsparameter auszuhandeln. Eine PPS ist optional und besteht mindestens aus 3 Byte und höchstrens aus 6 Byte.

  • 1. Byte PPSS = 0xFF
  • 2. Byte PPS0 codiert das zu verwendende Übertragungsprotokoll und die vorhandenen optionalen Parameter PPS1-3
  • 0-3 Byte Parameter PPS1-3
  • letztes Byte PCK XOR-Prüfsumme ab PPSS

Das Terminal schickt an die Karte eine solche PPS Datenstruktur. Zur Bestätigung schickt die Karte die gleiche PPS Datenstruktur zurück.

Übertragungsprotokoll T=1

Bei der Kommunikation zwischen Chipkarte und ChipTAN-Generator wird (in unserem Fall) das Blockprotokoll T=1 Verwendet. Es handelt sich um ein asynchrones Halbduplexprotokoll welches als kleineste Dateneinheit Blöcke überträgt.

Blöcke

  • Block Typen:
    • Informationsblöcke (I-Block)
      • Austausch von Daten/Kommandos
    • Empfangsbestätigungsblöcke (R-Block)
      • enthalten kein Informationsfeld
      • dienen zur positiven/negativen Empfangsbestätigung
    • Systemblöcke (S-Block)
      • Modifikation von protokollspezifischen Steuerinformationen

Aufbau eines Blocks

Aufbau eines T=1 Übertragungsblocks

Der Header eines jeden Blocks besteht aus den NAD, PCB, LEN-Feldern.

  • NAD Knotenaddresse (ist in unserem Fall, sowie in den meisten anderen auch 0x00)
  • PCB (Protocol Control Byte) codiert Blocktyp und benötigte Informationen (z.B. Sendefolgenummer)
  • LEN (Length Field) gibt die Länge des Informationsfeldes in Bytes an
  • Informationsfeld:
im Falle eines S-Blocks werden Daten für das Übertragungsprotokoll übertragen
im Falle eines I-Blocks wird ein APDU-Kommando übertragen

Die maximale Länge des Informationsfeldes ist initial im ATR angegeben und kann durch einen S-Block zu Beginn einer Unterhaltung auf einen Wert zwischen 0x00 und 0xFE festgelegt werden.

  • EDC Fehelererkennungscode über alle vorherigen Bytes des Blockes
  • 1 Byte lang für LRC (Längsprüfcode)
  • 2 Byte lang für CRC (zyklischer Redundanz Prüfcode)
Welches Verfahren verwendet wird lässt sich in den Interface Charactern (TCi für i>2) des ATR ablesen. Default ist LRC.

APDU-Kommandos

Das Terminal und die Chipkarte kommunizieren immer abwechselnd. Somit ist klar, wer wann das APDU-Kommando sendet. Die APDU des Terminals besteht aus einem Header (Class-Byte, Instruction-Byte, zwei Parameter-Bytes) und einer variablen Länge an Datenbytes. Sind Daten vorhanden, dann wird zusätzlich davor ein Byte Lc für die Länge eingefügt. Am Ende kann optional noch ein Byte Le folgen. Dieses gibt die maximale Länge für die Antwort der Chipkarte an (0x00 sind 256 Byte).

<Bild folgt>


Befehle

- SELECT Ordner, File oder Applikation

- READ RECORD

- SEARCH RECORD

- Kartenspezielle Befehle



Kommunikation zwischen ChipTAN-Generator und EC-Karte

Verwendete Hardware

Verwendete Software

Literatur

  • ISO/IEC 7816-3
  • Handbuch der Chipkarten