2017-03-07 3 views
0

Je me suis ennuyé et j'ai essayé tous les codes INS sur ma carte SIM via le lecteur PCSC.SIM/Javacard - Impossible d'envoyer INS 69 ou 96

J'ai eu un comportement étrange - quand j'utilise le CLA 80 et l'INS 69 ou 96, je reçois une exception dans mon programme.

Je sais que INS 6X et 9X ne sont pas valides, mais seulement pour ces 2 valeurs (69 et 96) je reçois une exception à chaque fois.

Quelqu'un peut-il m'expliquer pourquoi?

Merci pour les aides :)

BTW - Je l'ai essayée en utilisant la smartcard.scard (python), Scard (C++) et smartcardio (Java).

+0

Ceci est probablement dû au protocole 'T = 0', où ces octets sont utilisés, voir ISO 7816-3 ... – vlp

+0

@vlp comme je l'ai mentionné je sais que 6x & 9x ne sont pas valides. Mais seulement pour ces 2 je reçois une exécution. – Bluestar

+1

(En supposant que vous obtenez un mot significatif pour les autres valeurs INS - que vous n'avez pas écrit): Si je me souviens bien, c'est parce qu'il y a un moment pendant le protocole T = 0 quand la carte fait écho à l'INS/~ INS ou répond avec un mot d'état 6XXX/9XXX. Comme ces deux ne peuvent être distingués, les INS 6X/9X sont interdites. La même situation devrait être l'INS de '60' où cette valeur est utilisée pour l'extension de temps. (Je voudrais écrire une réponse, mais je suis très occupé à étudier ISO 7816-3 maintenant ... Je suis désolé) – vlp

Répondre

0

La raison pour laquelle les valeurs CLA de 6X et 9X ne sont pas valides est la façon dont fonctionne le protocole T=0.

Extraits de l'ISO 7816-3: en-tête

  1. Command:

Le dispositif d'interface initie chaque commande en transmettant un en-tête de cinq octets qui indique à la carte ce qu'il faut faire.

... sautées ...

L'en-tête se compose de cinq octets dénotés CLA, INS, P1, P2 et P3. Les valeurs de CLA, INS, P1 et P2 doivent être conformes aux spécifications de l'ISO/CEI 7816-4.

  • CLA désigne une classe de commandes. La valeur 'FF' est invalide (réservé pour PPSS, voir 6.3.1 et 9.2).

    REMARQUE: L'ISO/CEI 7816-4 applique 'FF' comme valeur non valide de CLA.

  • INS désigne un code d'instruction. Les valeurs '6X' et '9X' ne sont pas valides. REMARQUE: L'ISO/CEI 7816-4 applique '6X' et '9X' comme valeurs non valides de l'INS. P1 P2 désigne un paramètre d'instruction , par exemple une référence complétant le code d'instruction.

  • P3 code le nombre d'octets de données notés D1 à Dn à transférer pendant la commande.

    • Dans une commande de transfert de données sortant, P3 = '00' présente un transfert de données de 256 octets à partir de la carte.

    • Dans une commande de transfert de données entrante , P3 = '00 'n'introduit aucun transfert de données.

  1. Procédure octet:

Après avoir transmis l'en-tête comme une chaîne de cinq caractères, le dispositif d'interface doit attendre un caractère acheminant un octet de procédure. Il existe trois types d'octets de procédure, voir Tableau 11.

  • Si la valeur est « 60 », il est un octet NULL. Il ne demande aucune action sur le transfert de données . Le dispositif d'interface doit attendre qu'un caractère achemine un octet de procédure .

  • Si la valeur est '6X' ou '9X', à l'exception de '60', est un octet SW1. Il ne demande aucune action sur le transfert de données. L'interface doit attendre qu'un caractère achemine un octet SW2. Il n'y a pas de restriction sur la valeur SW2. REMARQUE: L'ISO/CEI 7816-4 impose «60» comme valeur non valide de SW1, ainsi que toute valeur différente de «9X» et «6X». Si la valeur est la valeur de INS, outre les valeurs '6X' et '9X', il s'agit d'un octet ACK. Les octets de données restants, s'il reste des octets , désignés Di à Dn, doivent être transférés ultérieurement. Ensuite le périphérique d'interface doit attendre un caractère véhiculant une procédure octet.

  • Si la valeur est le ou-exclusif de « FF » avec la valeur de INS, en dehors des valeurs de 6X »et « 9X », il est un octet d'accusé de réception. Seul le octet de données suivant s'il existe, noté Di, doit être transféré. Ensuite le périphérique d'interface doit attendre un caractère véhiculant une procédure octet.

  • Toute autre valeur est invalide.

A chaque octet de procédure, la carte peut procéder à la commande par NULL ou ACK, ou terminer la commande par ME1 ME2, ou montrer sa désapprobation en devenant ne répond pas (WT sera dépassé).

  1. octet d'état:

L'état octets SW1 SW2 indiquer le statut de la carte à la fin de la commande. Leurs valeurs doivent être spécifiées dans l'ISO/CEI 7816-4.


En d'autres termes - les valeurs INS de 9X et 6X sont interdits comme octet d'accusé de réception (soit directement, soit complémentaire/variante ou exclusif) ne peut pas être distinguée de SW1 à l'octet de procédure.


Je reconnais que cela n'explique pas pourquoi vous obtenez exception que pour des valeurs particulières de l'INS 69/96 et non pour les autres 6X/9X. C'est un comportement indéfini.

J'espère que ce message vous sera utile ... bonne chance!