OmniKey 5321 Lesegerät und SRIX4k RFID-Chip

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.

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

Command Class INS P1 P2 Lc Data In Le
Init Session 0xFF 0xA0 0x00 0x07 0x03 0x01 0x00 0x01

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

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

Command Class INS P1 P2 Lc Data In Le
Card Command 0xFF 0xA0 0x00 0x05 6 + n 01 00 0B 00 00 64 + SRIX4k command 00

gesendet werden, wobei [cci]01 00 0B 00 00 64[/cci] die Preamble für den SRIX4k-Chip ist und für [cci]Lc[/cci] 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 [cci]0x08[/cci], so dass für das Auslesen des Block 1 des SRIX4k-Chips die folgende APDU gesendet werden muss:

[cc]FF A0 00 05 08 01 00 0B 00 00 64 08 01 00[/cc]

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

[cc]FF FF FF FF 90 00[/cc]
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 [cci]Write_block[/cci]-Kommando keine Antwort zurückgibt und der Kartenleser daher einen Fehlercode zurückliefert.

Die ‚Generic Session‘ kann über die APDU

Command Class INS P1 P2 Lc Data In Le
Init Session 0xFF 0xA0 0x00 0x07 0x03 0x01 0x00 0x02

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