Hauptmenü öffnen

Vu+ WIKI β

Änderungen

ATR

14.056 Bytes hinzugefügt, 10:06, 26. Jan. 2012
Die Seite wurde neu angelegt: „'''Answer to Reset''' ('''ATR''') ist die erste Information, die eine Chipkarte in der kontaktbehafteten Kommunikation an einen Chipkartenleser …“
'''Answer to Reset''' ('''ATR''') ist die erste Information, die eine [[Smartcard|Chipkarte]] in der kontaktbehafteten Kommunikation an einen Chipkartenleser übermittelt, nachdem dieser einen Reset der Karte durchgeführt hat. Vereinfacht gesprochen handelt es sich beim ATR um eine Reihe von Parametern, mit denen die Chipkarte dem Chipkartenleser mitteilt, wie er mit ihr kommunizieren kann.

== Inhalt ==
Der Inhalt des ATR wird in der Chipkartenspezifikationen ISO 7816-3 spezifiziert und ist von den Fähigkeiten der Chiphardware (UART) und der Protokollimplementierung des Chipkarten Betriebssystems abhängig. Chipkartenhersteller haben so die Möglichkeit, mit Hilfe der Kommunikationsparameter im ATR das Kommunikationsverhalten der Chipkarte und des Terminals, insbesondere die Kommunikationsgeschwindigkeit zu beeinflussen und zu optimieren. Die Gesamtperformance einer Chipkarte hängt aus diesem Grund in hohem Maße von den Fähigkeiten des eingesetzten Chipkartenlesers ab.

Der ATR einer Chipkarte wird auch oftmals von Hostsoftware benutzt, um den Typ dieser zu erkennen und damit die erforderliche Middleware für den Zugriff auf die Karte zu bestimmen. In der Windows Registry sind die ATRs von Karten zu finden, um damit auf den korrekten Cryptographic Service Provider (CSP) zu referenzieren. Bei Installation eines neuen CSP werden die ATRs der unterstützten Karten in die Registry eingetragen.

== Cold und Warm Reset ==
Chipkarten können abhängig von der Art des Resets, den das Terminal verwendet, verschiedene ATRs ausgeben. Wenn die Karte durch Anlegen der Versorgungsspannung und Freigeben der Reset-Leitung startet, spricht man von einem ''Power-On-Reset'' oder auch ''Cold reset''. Im Gegensatz dazu ist ein ''Warm reset'' oder ''Soft-Reset'' ein Signal auf der Reset-Leitung der Kontaktflächen der Chipkarte im laufenden Betrieb. Die Karte kann abhängig von der Art des Resets oder sogar abhängig von der Anzahl der ''Warm resets'' verschiedene ATRs zurückgeben.

Dieses Verhalten ermöglicht es, eine höhere Kompatibilität zwischen Chipkartenleser und Chipkarte zu erreichen. Wenn ein Chipkartenleser die Parameter des ATRs nach dem ''Power-On-Reset'' nicht unterstützt, kann er ein Signal auf der Reset-Leitung schicken und erhält je nach Kartenimplementierung einen geänderten ATR. Wenn der Leser die Parameter des geänderten ATRs unterstützt, kommt die Kommikation zwischen Karte und Leser zustande. Führt der Chipkartenleser den ''Warm reset'' nicht aus oder unterstützt die Parametern der geänderten ATRs nicht, ist keine Kommunikation möglich, und der Kartenleser ist mit dieser Karte nicht einsetzbar.

== Struktur ==
Der ATR ist eine Reihe von Bytes. Davon sind die ersten 2 Bytes TS und T0 verpflichtend. Alle weiteren Bytes sind optional und werden durch Angaben in den vorhergehenden Bytes (T0 und TDx) angekündigt.

{| border=1 cellspacing="0"
!width="4%"|TS
!width="4%"|T0
!width="4%" bgcolor="#ABCDEF"|TA1
!width="4%" bgcolor="#ABCDEF"|TB1
!width="4%" bgcolor="#ABCDEF"|TC1
!width="4%" bgcolor="#ABCDEF"|TD1
!width="4%" bgcolor="#ABCDEF"|TA2
!width="4%" bgcolor="#ABCDEF"|TB2
!width="4%" bgcolor="#ABCDEF"|TC2
!width="4%" bgcolor="#ABCDEF"|TD2
!width="4%" bgcolor="#ABCDEF"|TA3
!width="4%" bgcolor="#ABCDEF"|TB3
!width="4%" bgcolor="#ABCDEF"|TC3
!width="4%" bgcolor="#ABCDEF"|TD3
!width="4%" bgcolor="#ABCDEF"|TA4
!width="4%" bgcolor="#ABCDEF"|TB4
!width="4%" bgcolor="#ABCDEF"|TC4
!width="4%" bgcolor="#ABCDEF"|TD4
!width="24%" bgcolor="#ABCDEF"|Historical Characters
!width="4%" bgcolor="#ABCDEF"|TCK
|}

Folgende Datentypen kann man im ATR unterscheiden:

{| border=1 cellspacing="0"
!Datenelement
!Bezeichnung (engl.)
!Bedeutung
|-
|TS
|The Initial Character
|Byte mit dem die Kommunikation gestartet wird.
|-
|T0
|The Format Character
|Dieses Byte gibt die Anzahl der ''Historical Characters'' und das Vorhandensein der ''Interface Characters'' TA1, TB1, TC1 und TD1 im ATR an.
|-
|TA1, TB1, TC1, TD1...
|The Interface Characters
|Diese Bytes geben Kommunikationsparameter an. Die 4 höchstwertigen Bits des Bytes TDx zeigen jeweils das Vorhandensein der Bytes TAx+1, TBx+1, TCx+1 und TDx+1 an.
|-
|T1, T2...
|The Historical Characters
|Die ''Historical Characters'' sind eine Kette von maximal 15 Bytes, deren Inhalt nicht festgelegt ist.
|-
|TCK
|The Check Character
|Checksumme über alle ATR Bytes beginnend ab Byte T0.
|}

=== Der Initial Character TS ===
Dieses Byte zeigt die sogenannte ''convention'', d.h. die Konvention der Bit- und Byteübertragung an, die die Karte verwendet.
* Die direkte Konvention (''Direct convention'') überträgt ein Bit 1 mit einem hohen (high) Pegel und ein Bit 0 mit einem niedrigen (low) Pegel auf der I/O Leitung. Die Bits des zu übertragenden Bytes werden vom niedrigstwertigen Bit beginnend aufsteigend übertragen. Der ''Initial Character'' für die direkte Konvention ist auf '3B' festgelegt.
* Die indirekte Konvention (''Inverse convention'') arbeitet mit umgekehrten Pegel, d.h. ein Bit 1 wird mit niedrigem (low) Pegel und ein Bit 0 mit hohem (high) Pegel übertragen. Im Gegensatz zur direkten Konvention wird das Datenbyte vom höchstwertigen Bit absteigend übertragen. Für die ''Indirekte Konvention'' ist der ''Initial Character'' '3F'.

Die mit dem ''Initial Character'' angegebene Konvention gilt für die gesamte Kommunikation zwischen Chipkarte und Chipkartenleser. Der ''Initial Character'' ist für beide Konventionen so gewählt, dass die Pegel des Startbits und der ersten zwei übertragenen Bits des ''Initial Characters'' identisch sind. Damit kann der Chipkartenleser den korrekten Beginn des ATRs erkennen und anhand der Flanken des Startbits und des dritten übertragenen Datenbits die von der Karte gewählte Übertragungsgeschwindigkeit berechnen (Zeitabstand der Flanken / 3). Da die Übertragungsgeschwindigkeit für den ATR in der ISO 7816-3 festgelegt ist, verzichten viele Leser auf diese Berechnung.

=== Der Format Character T0 ===
Der ''Format Character'' enthält zwei Informationen:
# Angabe über die folgenden ''Interface Characters'' TA1, TB1, TC1 und TD1 in den höherwertigen 4 Bits.
# Anzahl der ''Historical Characters'' im ATR in den niederwertigen 4 Bits. Die Anzahl liegt damit zwischen 0 und 15.

{|border=1 cellspacing="0"
!Bit
!Bedeutung
|-
|b8
|Zeigt die Übertragung des TD1 Bytes an (1 = TD1 vorhanden, 0 = TD1 nicht vorhanden)
|-
|b7
|Zeigt die Übertragung des TC1 Bytes an (1 = TC1 vorhanden, 0 = TC1 nicht vorhanden)
|-
|b6
|Zeigt die Übertragung des TB1 Bytes an (1 = TB1 vorhanden, 0 = TB1 nicht vorhanden)
|-
|b5
|Zeigt die Übertragung des TA1 Bytes an (1 = TA1 vorhanden, 0 = TA1 nicht vorhanden)
|-
|b4
|rowspan="4"|Anzahl der Historical Characters (0 bis 15)
|-
|b3
|-
|b2
|-
|b1
|}

=== Die Interface Characters ===
Die ''Interface Character'' enthalten entweder
* globale Parameter für alle Protokolle oder
* protokoll spezifische Parameter

==== Globaler Interface Character TA1 ====
Im ''Interface Character'' TA1 wird der Teiler und der Übertragungsfaktor angegeben:
{|border=1 cellspacing="0"
!Bit
!Bedeutung
|-
|b8
|rowspan="4"|Teiler FI
|-
|b7
|-
|b6
|-
|b5
|-
|b4
|rowspan="4"|Übertragungsanpassungsfaktor DI
|-
|b3
|-
|b2
|-
|b1
|}

Der Wert FI definiert einen Faktor (F) und zusätzlich die maximal zulässige Taktfrequenz (f max) der Chipkarte. Die nachfolgende Tabelle zeigt die möglichen Werte für FI:
{|border=1 cellspacing="0"
!FI
!Wert F
!f max [MHz]
|-
|0000
|372 (default)
|4
|-
|0001
|372
|5
|-
|0010
|558
|6
|-
|0011
|744
|8
|-
|0100
|1116
|12
|-
|0101
|1488
|16
|-
|0110
|1860
|20
|-
|0111
|reserviert für zukünftige Verwendung
|
|-
|1000
|reserviert für zukünftige Verwendung
|
|-
|1001
|512
|5
|-
|1010
|768
|7,5
|-
|1011
|1024
|10
|-
|1100
|1536
|15
|-
|1101
|2048
|20
|-
|1110
|reserviert für zukünftige Verwendung
|
|-
|1111
|reserviert für zukünftige Verwendung
|
|}

Für DI lautet die Codierung folgendermaßen:
{|border=1 cellspacing="0"
!DI
!Wert D
|-
|0000
|reserviert für zukünftige Verwendung
|-
|0001
|1 (default)
|-
|0010
|2
|-
|0011
|4
|-
|0100
|8
|-
|0101
|16
|-
|0110
|32
|-
|0111
|reserviert für zukünftige Verwendung
|-
|1000
|12
|-
|1001
|20
|-
|1010
|reserviert für zukünftige Verwendung
|-
|1011
|reserviert für zukünftige Verwendung
|-
|1100
|reserviert für zukünftige Verwendung
|-
|1101
|reserviert für zukünftige Verwendung
|-
|1110
|reserviert für zukünftige Verwendung
|-
|1111
|reserviert für zukünftige Verwendung
|}

Mit dem Teiler F und dem Übertragungsanpassungsfaktor D kann die Zeitdauer eines Bits Elementary Time Unit (ETU) berechnet werden, wobei f die Frequenz des an die Chipkarte angelegten Taktes ist:

<math>etu=\frac{1}{D}\cdot\frac{F}{f}</math>

==== Globaler Interface Character TB1 ====
''Interface Character'' TB1 gibt den maximalen Stromverbrauch und die benötigte Spannung zum Programmieren des EEPROMs an, die vom Chipkartenleser über die Kontaktfläche Vpp zur Verfügung gestellt werden muss. Da moderne Chipkarten die Programmierspannung über eingebaute Ladungspumpen aus der normalen Stromversorgung erzeugen, wird das TB1 meist nicht mehr im ATR angegeben.

Die folgende Tabelle zeigt die Codierung des TB1:
{|border=1 cellspacing="0"
!Bit
!Bedeutung
|-
|b8
|Immer 0
|-
|b7
|rowspan="2"|Maximal benötigter Strom II
|-
|b6
|-
|b5
|rowspan="5"|Benötigte Programmierspannung PI1
|-
|b4
|-
|b3
|-
|b2
|-
|b1
|}

Folgende Werte sind für PI1 definiert:
{|border=1 cellspacing="0"
!PI1
!Bedeutung
|-
|0
|Die Kontaktfläche Vpp ist nicht an den Chip angeschlossen. Es wird keine Programmierspannung benötigt
|-
|1 bis 4
|reserviert für zukünftige Verwendung
|-
|5 bis 25
|Programmierspannung in Volt (5 Volt ist default)
|-
|26 bis 31
|reserviert für zukünftige Verwendung
|}

Der maximal benötigte Strom ergibt sich aus II mittels folgender Tabelle:
{|border=1 cellspacing="0"
!II
!benötigter Strom in mA
|-
|00
|25 mA
|-
|01
|50 mA (default)
|-
|10
|reserviert für zukünftige Verwendung
|-
|11
|reserviert für zukünftige Verwendung
|}

==== Globaler Interface Character TC1 ====
Dieser Parameter gibt die 'zusätzliche Schutzzeit' (''extra guardtime'') als ganzzahligen Wert N an. Dieser Werte definiert die Anzahl der ETUs zwischen den Flanken zweier aufeinanderfolgender Byteübertragungen mit folgender Formel:

<math>guardtime=12+\frac{F}{D}\cdot\frac{N}{f}</math>

Einzige Ausnahme ist der Wert 255, der die minimale Schutzzeit angibt, das ist
* 12 ETU für das Übetrtragungsprotokoll T=0 und
* 11 ETU für das Übetrtragungsprotokoll T=1.

==== Interface Character TDx ====
TD1, TD2, TD3 und TD4 enthalten jeweils zwei Informationen:
# Angabe über die folgenden ''Interface Characters'' TAx+1, TBx+1, TCx+1 und TDx+1 in einem Bitfielde im höherwertigen Nibble.
# Das von der Chipkarte verwendete Übertragungsprotokoll.

Die genaue Struktur wir in der folgenden Tabelle dargestellt:
{|border=1 cellspacing="0"
!Bit
!Bedeutung
|-
|b8
|Zeigt die Übertragung des TDx+1 Bytes an (1 = TDx+1 vorhanden, 0 = TDx+1 nicht vorhanden)
|-
|b7
|Zeigt die Übertragung des TCx+1 Bytes an (1 = TCx+1 vorhanden, 0 = TCx+1 nicht vorhanden)
|-
|b6
|Zeigt die Übertragung des TBx+1 Bytes an (1 = TBx+1 vorhanden, 0 = TBx+1 nicht vorhanden)
|-
|b5
|Zeigt die Übertragung des TA1 Bytes an (1 = TAx+1 vorhanden, 0 = TAx+1 nicht vorhanden)
|-
|b4
|rowspan="4"|Protokolltyp T
|-
|b3
|-
|b2
|-
|b1
|}

Für den Protokolltyp sind folgende Werte spezifiziert:
{|border=1 cellspacing="0"
!Protokoll T
!Bedeutung
|-
|T=0
|Byteorientiertes asynchrones halb-duplex Übertragungsprotokoll definiert in der Norm ISO 7816-3 Kapitel 8
|-
|T=1
|Blockorientiertes asynchrones halb-duplex Übertragungsprotokoll definiert in der Norm ISO 7816-3 Kapitel 9
|-
|T=2 und T=3
|Reserviert für zukünftige voll-duplex Übertragungsprotokolle
|-
|T=4
|Reserviert für ein erweitertes asynchrones halb-duplex Übertragungsprotokoll
|-
|T=5 bis T=13
|Reserviert für zukünftige Verwendung
|-
|T=14
|Reserviert für nationale Übertragungsprotokolle. In Deutschland benutzt für ein blockorientiertes asynchrones halb-duplex Übertragungsprotokoll.
|-
|T=15
|Globale Schnittstellen Parameter ohne Bezug auf ein spezielles Übertragungsprotokoll
|}

==== Globaler Interface Character TB2 ====
Interface Character TB2 enthält den 8 Bit Wert PI2. Er kann als Alternative zu PI1 im ''Interface Character'' TB1 verwendet werden um die Programmierspannung sehr genau anzugeben. PI2 gibt den Wert der benötigten Programmierspannung in zehntel Volt an.

Da moderne Chipkarten die Programmierspannung über eingebaute Ladungspumpen aus der normalen Stromversorgung erzeugen, wird das TB1 meist nicht mehr im ATR angegeben.

==== Protokollspezifischer Interface Character TC2 ====
TC2 ist ein Datenelement für das Protokoll T=0 und gibt die sogenannte ''work waiting time'' an. Dieser Wert ist die maximale Zeit zwischen den Startflanken zweier aufeinnanderfolgender Bytes. Der default Wert der ''work waiting time'' ist 10.

=== Die Historical Characters ===
Der Inhalt der ''Historical Characters'' ist in ISO 7816-4 festgelegt und in Compressed Type-Length-Value (TLV, Tag 4Xh und Länge 0-15 in einem Byte; dahinter der Wert) kodiert. Sie werden für verschiedene Informationen verwendet, zum Beispiel die Version des Betriebssystems sowie die Fähigkeiten der Karte.

Oft ist statt Compressed TLV kodierten Datenobjekten auch ein (nicht ISO 7816-4 konformer) reiner ASCII String zu finden.

=== Der Check Character TCK ===
Der ''Check Character'' ist eine XOR Prüfsumme von Byte T0 bis zum Byte vor dem ''Check Character''. Zusätzlich zu den Prüfungen des Übertragungsprotokolls kann damit die Korrektheit des ATR geprüft werden.

Der ''Check Character'' darf nicht mit dem ATR gesendet werden, wenn im ATR nur das Protokoll T=0 unterstützt wird. Wenn das Protokoll T=1 verwendet wird, muss der ''Check Character'' mit dem ATR übertragen werden.

== Weiterführende Links ==
*[[Smartcards]]
821
Bearbeitungen