Zum Inhalt springen
Sprache: DE

Wie spricht ein Rechner mit einem USB-NFC-Lesegerät?

Über PC/SC, die Schnittstelle, die Rechner für Kartenlesegeräte benutzen: Das Programm öffnet einen Zusammenhang, führt die Lesegeräte auf, verbindet sich mit dem, was auf einem davon liegt, und überträgt APDU. Windows zeigt sie als winscard, macOS als CryptoTokenKit. Ein Tag ohne Kartenanwendung antwortet über Befehle, die das Lesegerät umsetzt.

Wo der Code sitzt

Ein Programm spricht nie mit dem USB-Gerät. Es spricht mit der Ressourcenverwaltung, die das Betriebssystem bereitstellt, die mit dem Lesegerät spricht, das mit der Karte oder dem Tag spricht. Die Spezifikationen von PC/SC legen diese Kette Stück für Stück fest und sind offen veröffentlicht; Teil 3 ist der über das Lesegerät selbst, und dort landet eine Entwicklung, wenn ein Tag sich anders verhält als eine Karte.

Was zwischen dem Programm und der Karte unterwegs ist, ist eine APDU, die Einheit, die die Seite zur APDU beschreibt. Ein kontaktloses Lesegerät trägt sie unverändert zu einem Type-4-Tag oder einer Karte; alles Übrige auf dieser Seite gibt es, weil die anderen Tag-Typen diese Sprache nicht sprechen.

Derselbe Austausch, zwei Systeme

Unter Windows gehören die Aufrufe zu winscard: ein Zusammenhang, die Liste der Lesegeräte, dann SCardConnect, das eine Art der Freigabe nimmt, geteilt, ausschließlich oder unmittelbar, und die Protokolle, die das Programm annimmt, T=0 oder T=1. SCardTransmit sendet den Befehl mit der passenden Steuerstruktur des Protokolls und gibt die Antwort zurück.

Unter macOS und iOS geht derselbe Austausch über CryptoTokenKit. TKSmartCardSlotManager führt die Steckplätze auf und verlangt die Berechtigung com.apple.security.smartcard; TKSmartCard öffnet eine Sitzung, überträgt und beendet sie, und stellt send(ins:p1:p2:data:le:) bereit, das die APDU für Sie baut, mit cla, useExtendedLength und useCommandChaining daneben.

Ab iOS 26 kann dasselbe Rahmenwerk einen Steckplatz auf dem eigenen Funk des Telefons öffnen: createNFCSlot(message:completion:) legt einen NFC-Steckplatz für Chipkarten an und zeigt eine Oberfläche des Systems, was einen Tag hinter die Schnittstelle stellt, die ein Lesegerät benutzt hätte. Core NFC bleibt das Rahmenwerk für Tags, die keine Karten sind, wie die Seite zu den Sitzungen beschreibt.

Tags ohne Kartenanwendung

Ein Type-2- oder Type-5-Tag hat keine Anwendung zum Auswählen und keine APDU zum Beantworten. Teil 3 der Spezifikation behandelt sie, indem er dem Lesegerät die Arbeit überträgt: Ein konformes Lesegerät muss Read Binary, Update Binary, Load Keys, General Authenticate, Verify für Karten mit einem Sicherheitscode und Get Data unterstützen. Die Spezifikation sagt ausdrücklich, dass diese Befehle aus der Branche stammen und nicht von der ISO, und dass die Hersteller der Lesegeräte die Einzelheiten bei den Chipherstellern zusammentragen.

Get Data ist der, den jedes Vorhaben benutzt: Klasse FF, Anweisung CA, Parameter 00 00, und eine erwartete Länge von 00 für die ganze Kennung. Die Spezifikation legt fest, was zurückkommt: 4, 7 oder 10 Bytes bei einem Tag nach ISO 14443 A, die 4 Bytes der PUPI bei einer Karte nach 14443 B, 8 Bytes bei ISO 15693, in der bei der Antikollision empfangenen Reihenfolge, aufgefüllt statt umgedeutet, und 6A 81, wenn die Karte überhaupt keine Kennung hat.

Ein Lesegerät, das einen Tag liest, den Ihr Code nicht liest, ist also meist ein Lesegerät, das einen Befehl umsetzt, den Ihrer nicht sendet, und kein besserer Funk.

Was das Lesegerät über einen Tag sagt

Ein kontaktloser Tag hat keine Antwort auf das Zurücksetzen, und für Karten geschriebene Programme erwarten eine. Das Lesegerät baut daher eine künstliche, deren Felder die Ergänzung zu Teil 3 festlegt: die eingetragene Kennung der PC/SC Workgroup, A0 00 00 03 06, ein Byte, das die Norm benennt, ISO 14443 A Teil 3, ISO 15693 Teil 1, FeliCa und so fort, dann zwei Bytes, die den Chip aus einem Verzeichnis benennen, das die Workgroup auf Anfrage pflegt.

Lesen Sie sie, bevor Sie irgendetwas senden. Sie sagt Ihrem Code, welche Familie er in der Hand hat, und ein unbekannter Chip erscheint als keine Angabe und nicht als Fehlschlag, was der Unterschied zwischen einem Programm ist, das sich anpasst, und einem, das ein kaputtes Lesegerät meldet.

Häufige Fragen

Kann ich eine APDU an einen Tag senden, der keine Karte ist?

Nicht an den Tag. Sie senden die Befehle, die das Lesegerät für Karten ohne Anwendung umsetzt, in der Klasse FF, und das Lesegerät macht daraus, was der Tag versteht.

Wie liest man die Kennung eines Tags?

Mit Get Data, FF CA 00 00, und einer erwarteten Länge von 00. Es gibt 4, 7 oder 10 Bytes bei ISO 14443 A zurück, die 4 Bytes der PUPI bei 14443 B, und 8 Bytes bei ISO 15693.

Warum meldet ein Lesegerät eine Antwort auf das Zurücksetzen für einen Tag, der keine hat?

Weil Programme eine erwarten. Das Lesegerät baut sie aus dem Verzeichnis von PC/SC, benennt die Norm und die Familie des Chips, sodass Code erkennt, was er in der Hand hat.

Ist die Schnittstelle unter macOS dieselbe?

Die Aufrufe unterscheiden sich, CryptoTokenKit statt winscard, und es verlangt die Berechtigung für Chipkarten. Die APDU, die darüber laufen, sind dieselben.