2017-09-28 2 views
2

Ich habe eine Frage zu T = 1 Smart Card-Kommunikationsprotokoll. Angenommen, das Terminal sendet einen I-Block mit erwarteten Ne-Daten, die von der Karte zurückgegeben werden sollen (sog. Fall 2S), und die Karte hat weniger zu sendende Daten. Bedeutet dies, dass das Terminal bis zum Timeout warten und dann prüfen sollte, was für die letzten zwei Bytes empfangen wurde (was der Status SW1 und SW2 sein sollte)? Oder gibt es ein anderes Szenario in Bezug auf dieses Problem? Mit T = 0 Protokoll wird dieses Problem durch Prozedur-Byte angesprochen, aber in T = 1 sehe ich nur den obigen Weg.T = 1 Smartcard-Protokoll

Dank

+0

Ich nehme an, dass Karte sollte Prolog LEN Feld, was ist die Menge der Daten, die es zurückgibt, aber Frage ist, wenn das LEN-Feld korrekt empfangen wird (überprüfen Bytes kommt später während der Antwort). Allerdings nicht so sicher. – Djole

+1

Obwohl ich kein Protokollexperte bin, scheint das ein Missverständnis zu sein. Le gibt nur die * maximale * Anzahl der vom Terminal akzeptierten Bytes an. Es kann weniger sein. (Dies unterscheidet sich von dem LEN-Feld der Protokollblöcke, die natürlich exakt übereinstimmen müssen, und die Antwort-APDU ist vollständig von dem Befehl, den Sie senden, entkoppelt.) Das LRC-Byte folgt später ist irrelevant, da wir über a sprechen blockorientiertes Protokoll. – guidot

+0

Was mich in ISO7816-3 wahrscheinlich in die Irre geführt hat, war: "Ne bezeichnet die maximale Anzahl von Bytes, die im Antwortdatenfeld erwartet werden". Für mich sah es aus wie etwas, was erwartet wird, aber mehr sein könnte. Egal, Frage bezieht sich mehr auf die Möglichkeit, beschädigtes LEN-Feld zu erhalten, was ich als Indikator dafür verwenden möchte, wie viele Bytes noch kommen werden. Also, wenn es (LEN) ist beschädigt und sage größer als die Menge der Bytes kommen, ist es meine einzige Möglichkeit, die Zeitüberschreitung zu fangen? Von falschem LEN konnte ich nur von Check-Byte (s) lernen, die später kommen, aber ich kann es nicht in der Nachricht finden (mit schlechtem LEN). – Djole

Antwort

0

Guidot behauptet vielleicht, dass er kein Experte, aber ich würde ihm nicht glauben.

Der Ne-Wert (codiert mit Le) gibt tatsächlich nur eine maximale Anzahl von Bytes an, die zurückgegeben werden sollen. Sie haben möglicherweise nur eine Puffergröße eines bestimmten Maximums oder einen Overhead (sicheres Messaging), der die Verwendung höherer Werte verhindert. Sie können jedoch APDU-Befehle haben, wobei Ne verwendet wird, um die Menge an Bytes anzugeben, die gesendet werden sollte, falls verfügbar, wie zum Beispiel READ BINARY.

Die Größe der (Antwort-) APDU wird durch die zugrunde liegende Datenverbindungsschicht bestimmt (das Verkettungsbit und die LEN-Bytes, die in den Blöcken innerhalb der Rahmen verwendet werden). T = 1 ist kein Byte-orientiertes Protokoll wie T = 0. Für T = 1 und tatsächlich T = CL bestimmt die Datenverbindungsschicht die Größe der Befehls- und Antwort-APDU, nicht die Anwendungsschicht mit den Nc- und Ne-Bytes.

+0

Ich werde Sie mit der Frage verlassen, ob es vorteilhaft ist, Länge Bytes auf der Anwendungsschicht überhaupt zu haben. IMHO ISO/IEC-7816-4 ist einer der schlechtesten jemals gebauten Standards; es saugt auf jede erdenkliche Art und Weise, während es sehr wenig bewirkt. Endlose Gespräche darüber, wie man eine Datei für eine Spezifikation einer Dateisystem-basierten Karte liest, sind bestenfalls lächerlich. –

Verwandte Themen