2017-03-07 5 views
0

Ich wurde gelangweilt und versuchte alle INS-Codes zu meiner SIM durch PCSC Leser.SIM/Javacard - Kann nicht senden INS 69 oder 96

Ich habe ein komisches Verhalten - wenn ich die CLA 80 und die INS 69 oder 96 benutze bekomme ich eine Ausnahme in meinem Programm.

Ich weiß, dass INS 6X und 9X ungültig sind, aber nur für diese 2 Werte (69 und 96) bekomme ich jedes Mal eine Ausnahme.

Kann mir jemand erklären warum?

Vielen Dank für die Helfer :)

BTW - ich versuchte es die smartcard.scard (Python) verwenden, SCARD (C++) und smartcardio (Java).

+0

Dies ist wahrscheinlich wegen 'T = 0' Protokoll, wo diese Bytes verwendet werden, siehe ISO 7816-3 ... – vlp

+0

@vlp wie ich erwähnte Ich weiß, dass 6x & 9x ungültig sind. Aber nur für diese 2 bekomme ich eine Ausnahme. – Bluestar

+1

(Angenommen, Sie erhalten ein aussagekräftiges Statuswort für die anderen INS-Werte - die Sie nicht geschrieben haben): Wenn ich mich gut erinnere, liegt es daran, dass während des T = 0-Protokolls ein Echo auf das INS/~ INS auftritt oder antwortet mit einem 6XXX/9XXX Statuswort. Da diese beiden nicht unterschieden werden können, sind die 6X/9X INS verboten. Die gleiche Situation sollte das INS von '60' sein, wo dieser Wert für die Zeitverlängerung verwendet wird. (Ich würde eine Antwort schreiben, aber ich bin ziemlich beschäftigt, ISO 7816-3 jetzt zu studieren ... Es tut mir leid) – vlp

Antwort

0

Der Grund, warum die CLA-Werte 6X und 9X ungültig sind, ist die Art und Weise, wie das -Protokoll funktioniert.

Auszüge aus ISO 7816-3:

  1. Befehlskopf:

Die Schnittstelleneinrichtung jeden Befehl durch Senden eines Fünf-Byte-Header initiiert, die die Karte sagt, was zu tun ist.

... übersprungen ...

Der Header besteht aus fünf Bytes bezeichnet CLA, INS, P1, P2 und P3. Die Werte von CLA, INS, P1 und P2 müssen den Angaben in ISO/IEC 7816-4 entsprechen.

  • CLA bezeichnet eine Klasse von Befehlen. Der Wert 'FF' ist ungültig (reserviert für PPSS, siehe 6.3.1 und 9.2).

    HINWEIS: ISO/IEC 7816-4 erzwingt 'FF' als ungültigen Wert von CLA.

  • INS bezeichnet einen Anweisungscode. Die Werte '6X' und '9X' sind ungültig.

    HINWEIS: ISO/IEC 7816-4 erzwingt '6X' und '9X' als ungültige Werte von IN.

  • P1 P2 bezeichnet einen Befehl Parameter, beispielsweise eine Referenz den Befehlscode abgeschlossen wird.

  • P3 codiert die Anzahl von Datenbytes bezeichnet D1 bis Dn zu während des Befehls übertragen werden.

    • in einem ausgehenden Datenübertragungsbefehl, P3 = '00' führt eine 256-Byte-Datenübertragung von der Karte.

    • In einem eingehenden Datenübertragungsbefehl führt P3 = '00 'keine Datenübertragung ein.

  1. Procedure Byte:

nach dem Header als eine Kette von fünf Zeichen zu übertragen, muss die Schnittstellenvorrichtung für eine Wartezeit Zeichen Übermittlung eines Prozedurbytes. Es gibt drei Arten von Verfahren Bytes, siehe Tabelle 11.

  • Wenn der Wert '60', es ist ein NULL-Byte. Es fordert keine Aktion auf Daten Übertragung. Das Schnittstellengerät muss auf ein Zeichen warten, das ein Prozedur-Byte übermittelt.

  • Wenn der Wert '6X' oder '9X' ist, mit Ausnahme von '60', ist ein SW1-Byte. Es fordert keine Aktion bei der Datenübertragung an. Die Schnittstelle Gerät muss auf ein Zeichen warten, das ein SW2-Byte übermittelt. Es gibt keine Einschränkung für den SW2-Wert.

    HINWEIS: ISO/IEC 7816-4 erzwingt '60' als ungültigen Wert von SW1 sowie einen anderen Wert als '9X' und '6X'.

  • Wenn der Wert der Wert von IN ist, abgesehen von den Werten ‚6X‘ und ‚9X‘, ist es ein ACK-Byte. Alle verbleibenden Datenbytes, wenn irgendwelche Bytes verbleiben, die mit Di bis Dn bezeichnet sind, sollen anschließend übertragen werden. Dann muss das Schnittstellengerät auf ein Zeichen warten, das eine Prozedur Byte übermittelt.

  • Wenn der Wert des Exklusiv-ODER ‚FF‘ mit dem Wert von IN, abgesehen von den Werten ‚6X‘ und ‚9X‘, ist es ein ACK-Byte ist. Nur das nächste Datenbyte, wenn es existiert, mit Di bezeichnet, soll übertragen werden. Dann muss das Schnittstellengerät auf ein Zeichen warten, das eine Prozedur Byte übermittelt.

  • Jeder andere Wert ist ungültig.

Bei jedem Verfahren Byte kann die Karte mit dem Befehl von NULL oder ACK, geht oder den Befehl beenden durch SW1 SW2 oder seine Ablehnung zeigen, indem sie nicht mehr reagiert werden (WT überschritten wird).

  1. Statusbyte:

Die Statusbytes SW1 SW2 den Kartenstatus am Ende des Befehls anzuzeigen. Ihre Werte müssen wie in ISO/IEC 7816-4 angegeben sein.


Mit anderen Worten - die Werte der INS9X6X und werden als ihre ACK Byte (entweder direkt oder komplementär/Exklusiv-Oder-Variante) verboten aus SW1 bei dem Verfahren Byte nicht unterschieden werden.


Ich gebe zu, dass dies erklärt nicht, warum Sie Ausnahme sind immer nur für bestimmte INS Werte von 69/96 und nicht für die anderen 6X/9X diejenigen. Es ist undefiniertes Verhalten.

Hoffe dieser Beitrag ist nützlich für Sie ... viel Glück!

Verwandte Themen