当T = 0,Lc> 0,Le> 0时,智能卡是否返回sw = 9000?

时间:2014-01-26 10:55:08

标签: smartcard pcsc winscard

Perse ISO / IEC 7816-3:2006,第12.2.5节规定了当读取器发送Lc> 0,Le> 0的命令APDU时,T = 0传输协议(字节流)会发生什么。初始命令TPDU没有Le字段,如果卡响应成功,应用程序应发送0xC0 GET RESPONSE命令,直到收到Le字节为止。

问题:如果智能卡希望返回数据,那么卡实际上是否有效以响应初始T = 0命令(在任何GET RESPONSE命令之前)返回0x9000,如7816-3所指定的那样?应用程序在0x9000响应后发出GET RESPONSE命令是否有效?相比之下,从阅读doTransmit in javax.smartcardiosc_transmit in OpenSC的使用情况来看,似乎这些应用程序仅在sw = 0x61xx响应后尝试获得响应,而不是在sw = 0x9000响应之后。

2 个答案:

答案 0 :(得分:1)

在ISO 7816中,ISO"案例"每个命令应该事先知道。换句话说,命令具有:

  1. 没有命令数据&没有回复数据
  2. 没有命令数据,但是响应数据
  3. 命令数据但没有响应数据
  4. 命令数据和响应数据
  5. 通常,如果发生指示错误的状态字,命令不会发送响应数据,即使ISO情况表明预期会有响应数据。


    现在在表14中说明了SW1 SW2 9000

      

    流程正常完成。在案例1,2和3中,没有进一步的行动。在情况4中,在接收到命令数据字节后,卡应准备好接收至少一个GET RESPONSE命令,以便最多传输Ne响应数据字节。

    对于ISO案例4 ,您发送命令数据并期望响应数据,您应该在GET RESPONSE之后发送9000。但是,如果你使用的是ISO案例2并且收到了9000,那么你应该发送GET RESPONSE


    在我看来,只要为ISO案例4 CommandAPDU之一(即包含命令数据的那个)指定一个Ne值 {{1} } 在收到javax.smartcardio SW1 / SW2后发出GET RESPONSE APDU。这意味着文档不完整或实现不正确。

答案 1 :(得分:0)

当我阅读7816-3,案例4S.2时,如果确切的C(N)字节可用,则卡可以以90 00响应。由于C(N)在用于案例4命令的APDU到TPDU的转换期间被切断,但是卡也是未知的,卡的唯一可靠选择是返回61xx。

对于案例2命令9000似乎是一个合理的答案[接下来是GET REPONSE C(N)],即使这个案例没有在7816-3中单独列出。