• Beitrags-Autor:
  • Beitrag zuletzt geändert am:09.05.2021
  • Beitrags-Kategorie:Informatik
  • Lesedauer:5 min Lesezeit

Der SRIX4k ist ein kontaktloser, 13,56 MHz RFID-Chip mit einem 4kB EEPROM von ST. Nach der Produktbeschreibung sollte der OmniKey 5321 von HID diesen Chip auslesen können. Wie sich aber erst nach vielen erfolglosen Versuchen herausstellte, ist dies mit den Informationen aus dem Entwicklerhandbuch zum OmniKey nicht möglich. Der Support von HID konnte dann weiterhelfen und gab den Hinweis, wie ein Zugriff auf den SRIX4k-Chip möglich ist und wird nachfolgend beschrieben.

Offiziell wird von HID nur das Auslesen der UID des SRIX4k-Chips unterstützt (über die üblichen PC/SC-Kommandos), aber bei einem RFID-Chip mit 4kB EEPROM ist das natürlich keine Option, wenn man auch den Speicher beschreiben bzw. auslesen möchte. Inoffiziell wird dies aber über eine ‚Generic Session‘ unterstützt, wie dies im Handbuch für MIFARE Plus-Karten beschrieben ist, nur mit einer anderen Preamble.

Initiierung einer generischen Session

Zunächst muss die ‚Generic Session‘ über die APDU

CommandClassINSP1P2LcData InLe
Init Session0xFF0xA00x000x070x030x01 0x00 0x01

geöffnet werden. Als Rückantwort erhält man im Erfolgsfall: 0x9000

Senden von Kommandos

Anschließend können die SRIX4k-spezifischen Kartenkommandos über die APDU

CommandClassINSP1P2LcData InLe
Card Command0xFF0xA00x000x056 + n01 00 0B 00 00 64 + SRIX4k command00

gesendet werden, wobei 01 00 0B 00 00 64 die Preamble für den SRIX4k-Chip ist und für Lc 6+n durch die entsprechende Anzahl der Bytes im Data In-Feld ersetzt werden muss.

Zum Beispiel hat das ReadBlock-Kommando des SRIX4k den Kommando-Code 0x08, so dass für das Auslesen des Block 1 des SRIX4k-Chips die folgende APDU gesendet werden muss:

FF A0 00 05 08 01 00 0B 00 00 64 08 01 00

Als Antwort erhält man die vier Bytes des Blocks sowie die beiden Status-Bytes zurück, bei einem neuen SRIX4k-Chip:

FF FF FF FF 90 00

wobei 90 00 der Statuswert für eine erfolgreiche Operation ist.

Die Berechnung von CRC-Checksummen ist nicht notwendig, dies wird vom Reader übernommen. Ebenso sind die Kommandos zum Initialisieren und Auswählen eines SRIX4k-Chips nicht notwendig. Von den SRIX4k-Kommandos sind nur

  • Read_block(Addr) = 0x08h
  • Write_block(Addr,Data) = 0x09h
  • Get_UID() = 0x0Bh

notwendig. Zu beachten ist noch, dass das Write_block-Kommando keine Antwort zurückgibt und der Kartenleser daher einen Fehlercode zurückliefert.

Schließen der generischen Session

Die ‚Generic Session‘ kann über die APDU

CommandClassINSP1P2LcData InLe
Init Session0xFF0xA00x000x070x030x01 0x00 0x02

geschlossen werden. Als Rückantwort erhält man im Erfolgsfall: 0x9000

Links