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.smartcardio和sc_transmit in OpenSC的使用情况来看,似乎这些应用程序仅在sw = 0x61xx响应后尝试获得响应,而不是在sw = 0x9000响应之后。
答案 0 :(得分:1)
在ISO 7816中,ISO"案例"每个命令应该事先知道。换句话说,命令具有:
通常,如果发生指示错误的状态字,命令不会发送响应数据,即使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中单独列出。