gpt4 book ai didi

smartcard - 扩展 APDU 和 T=0/1 通信协议(protocol)

转载 作者:行者123 更新时间:2023-12-03 08:06:29 25 4
gpt4 key购买 nike

我有一个 JCOP V2.4.2 R3 java 卡,它在其数据表“该卡支持 T=1T=0 通信协议(protocol)”中提到

我还有一个 ACR38 智能卡读卡器,它支持 T=0 和 T=1 协议(protocol)。 (我与一张卡成功T=0通信,与这张卡成功T=1通信。)

我编写了以下程序并将其上传到卡上以发送和接收扩展 APDU:

package extAPDU;

import javacard.framework.APDU;
import javacard.framework.Applet;
import javacard.framework.ISOException;
import javacardx.apdu.ExtendedLength;

public class ExAPDU extends Applet implements ExtendedLength {

private ExAPDU() {
}


public static void install(byte bArray[], short bOffset, byte bLength)
throws ISOException {
new ExAPDU().register();
}

public void process(APDU arg0) throws ISOException {
short number = arg0.setIncomingAndReceive();
arg0.setOutgoingAndSend((short)0, (short)(number+7));
}

}

在 CAD 方面,我使用 python 脚本将不同的 APDU 发送到卡。问题是:

1-为什么我不能用T=0协议(protocol)开始通信(虽然提到卡支持这个协议(protocol)):

python 脚本:
from smartcard.scard import *
import smartcard.util
from smartcard.System import readers
from smartcard.CardConnection import CardConnection

r=readers()
print r
connection =r[0].createConnection()
connection.connect(CardConnection.T0_protocol)

normalCommand=[0x00,0xa4,0x04,0x00,0x06,0x01,0x02,0x03,0x04,0x05,0x06]
data,sw1,sw2=connection.transmit(normalCommand)
print "SW for Normal Command:"
print data,hex(sw1),hex(sw2)

输出:
>>> ================================ RESTART ================================
>>>
['ACS CCID USB Reader 0']

Traceback (most recent call last):
File "C:\extAPDU.py", line 13, in <module>
connection.connect(CardConnection.T0_protocol)
File "D:\PythonX\Lib\site-packages\smartcard\CardConnectionDecorator.py", line 54, in connect
self.component.connect(protocol, mode, disposition)
File "D:\PythonX\Lib\site-packages\smartcard\pcsc\PCSCCardConnection.py", line 118, in connect
raise CardConnectionException('Unable to connect with protocol: ' + dictProtocol[pcscprotocol] + '. ' + SCardGetErrorMessage(hresult))
CardConnectionException: Unable to connect with protocol: T0. The requested protocols are incompatible with the protocol currently in use with the smart card.
>>>

2- 为什么卡不能在 T=1 协议(protocol)的扩展形式中使用 Select APDU 命令正常工作:

python 脚本:
from smartcard.scard import *
import smartcard.util
from smartcard.CardConnection import CardConnection
from smartcard.System import readers

r=readers()
print r
connection =r[0].createConnection()
connection.connect(CardConnection.T1_protocol)

normalCommand=[0x00,0xa4,0x04,0x00,0x00,0x00,0x06,0x01,0x02,0x03,0x04,0x05,0x06]
data,sw1,sw2=connection.transmit(normalCommand)
print "SW for Normal Command:"
print data,hex(sw1),hex(sw2)

输出 :
>>> ================================ RESTART ================================
>>>
['ACS CCID USB Reader 0']
SW for Normal Command:
[] 0x67 0x0
>>>

我想我误解了这个概念,我把扩展 APDU 和 T=1 混在一起了。和 T=0协议(protocol)!

T=1兼容的智能卡,是否可以发送和接收扩展 APDU?我们无法通过 T=0 发送和接收扩展 APDU协议(protocol)?如果我们想向安全域发送扩展 SELECT APDU 命令,SD 必须实现 ExtendedLength界面?

对于扩展 APDU 传输有什么要求?
  • T=1 兼容读卡器
  • T=1 兼容智能卡
  • 一个实现 ExtendedLength 的小程序接口(interface)

  • 这样对吗?

    我对扩展兼容性和 T=0/1 感到非常困惑。智能卡的兼容性。任何光线都会受到赞赏。

    请注意,我可以使用 T=1 成功地将扩展 APDU 发送到上述小程序。协议(protocol)!

    最佳答案

    Java Card 本身已经处理了 T=0 特定命令,因此 T=0/T=1 APDU 对程序员来说几乎是一样的。当然存在差异,但这些在 APDU 类中得到了很好的解释。

    T=0 是基于字节的协议(protocol),而 T=1 使用下面的帧。大多数 T=0 的卡不支持扩展长度。请注意,要获得扩展长度功能,javacardx.apdu.ExtendedLength需要实现标记接口(interface)。

    JCOP 卡可以配置为使用 T=0/T=1/T=CL 等。但是,您需要访问卡(可能还有用户手册)来配置卡。 Java Card API 不包含任何用于更改冷或暖 ATR 中对协议(protocol)或传输协议(protocol)参数的支持的命令。

    关于延长长度的要求,您是正确的。请注意,现在可能很难找到不支持 T=1 的读卡器。 T=0 是旧协议(protocol),应该首选 T=1。

    关于smartcard - 扩展 APDU 和 T=0/1 通信协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28855930/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com