扩展 APDU 和 T=0/1 通信协议

2024-03-28

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

我还有一个 ACR38 智能卡读卡器,它支持 T=0 和 T=1 协议。 (我与一张卡成功进行了 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协议进行通信(虽然提到该卡支持该协议):

蟒蛇脚本:

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)

Output:

>>> ================================ 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 协议上扩展形式的 Select APDU 命令正常工作:

蟒蛇脚本:

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)

Output :

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

我想我误解了这个概念,并且我将扩展 APDU 与T=1 and T=0协议!

Every T=1兼容的智能卡,可以发送和接收扩展APDU吗?我们无法通过以下方式发送和接收扩展 APDUT=0协议?如果我们想要发送扩展 SELECT APDU 命令到安全域,SD 必须实现ExtendedLength界面?

对于扩展 APDU 传输有哪些要求?

  1. T=1 兼容读卡器
  2. T=1 兼容智能卡
  3. 一个小程序实现了ExtendedLength界面

这样对吗?

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

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


Q1:更改协议是可能的。卡支持哪些协议的信息通过ATR/ATS 进行收发。然后终端可以决定使用哪一个。因此,协议是否可选取决于您的终端 shell。对于 JCOP Shell,这是/change-protocol。 但一般不建议T=0。

Q2:如果您通过发送 ATR/ATS 启动卡,则卡管理器处于活动状态,仅支持全局平台命令。全球平台不支持扩展长度。通过发送一个选择命令(因此必须是简单的长度),小程序被选择,并且实际的选择命令也被转发到您的小程序的process()方法(并且可以通过selectingApplet()方法)。现在您已在 Applet 中,您可以根据需要发送任意数量的扩展长度命令。您可以通过将小程序安装为默认选择来绕过初始的非扩展长度选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

扩展 APDU 和 T=0/1 通信协议 的相关文章

  • JavaCard 的数学库?

    我目前正在开发一个 JavaCard 项目 v 2 2 2 我需要使用平方根 对数等来计算值 我知道Math类在 JavaCard API 中不可用 想知道是否存在另一个提供此类操作的库 而且我也不能用double价值观 但我需要 有没有一
  • 在智能卡上上传 .cap 文件?

    我有一张新卡 其 ATR 代码如下 3B 68 00 00 00 73 C8 40 12 00 90 00 我在谷歌上搜索了这张ATR 最后我知道这是一张 巴西电子公积金卡 问题是我该如何使用这张卡 我的意思是它支持哪些 APDU 有它的数
  • 如何通过 WMI 获取系统上的所有智能卡读卡器?

    我想使用 WMI 获取系统上所有 PCSC 智能卡读卡器的 DeviceID 和服务 它们都是通过 USB 连接的 因此我查询 WMI 注册表以获取所有信息Win32 PnPEntitys 但我不知道如何确定哪些设备是 读卡器 这是我已经拥
  • Mifare认证

    假设我想对 Mifare Classic 进行身份验证 我如何知道要发送到卡的 APDU 的确切类型 Example 这段代码 bcla 0xFF bins 0x86 bp1 0x0 bp2 0x0 currentBlock len 0x5
  • 使用 Java 卡钱包

    我是一个java卡初学者 从示例中复制了下面的代码 不知何故 我已经知道部分代码是如何工作的 但还是对下面的事情感到困惑 ownerpin 的工作方式以及设置 pin 的方式和时间 如何进行信用和借记工作 我了解平衡是如何运作的 这方面还不
  • 处理方法未从主机接收完整的 APDU 命令?

    主机向小程序发送以下命令选择EF文件 00 A4 02 00 02 40 01 目的是选择带ID的EF文件40 01 在命令的数据字段中指定 但是当我调试 process APDU apdu 方法时 APDU 缓冲区仅包含前 5 个字节00
  • 如何使用java卡apdu从智能卡写入和读取数据

    我写了一个小程序并将其安装在智能卡中 但我不知道如何读写智能卡数据 private void readName APDU apdu throws ISOException byte apduBuffer apdu getBuffer for
  • 验证和认证的区别?

    如您所知 我们通过以下方式向卡证明我们是真实用户INITIAL UPDATE and EXTERNAL AUTHENTICATION命令 如下 lt 80 50 00 00 08 Host Challenge gt lt 84 82 03
  • 用于获取智能卡序列号的 APDU 命令

    如何使用 APDU 命令获取智能卡的序列号 我尝试使用 SCardGetAttrib 函数来查询它winscard dll不幸的是 我被告知使用 APDU 命令来执行此操作 因为没有标准方法来获取序列号 问题是我无法弄清楚我的智能卡是什么类
  • 请求 EMV 卡的 GPO 命令时出现解析器错误

    我在使用 VISA 卡的 GET PROCESSING OPTIONS GPO 命令时遇到一些问题 以下是我对 VISA 应用程序的 SELECT 命令的响应 6F408407A0000000031010A535500A5649534120
  • 从 Mastercard/VISA 借记卡/信用卡读取 EMV 数据 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在尝试构建一个应用程序来读取 编码卡上的数据 如 PAN 到期日 客户名称 PIN 等信息 到目前为止 我发现我需要发送 APDU
  • 将证书从智能卡复制到计算机

    是否可以将证书从智能卡复制到计算机并 用它来登录某个站点 在 Mac 上 这些证书出现在钥匙串中 并且可以保存到磁盘 但我不确定如何强制站点提示对话框屏幕以选择证书 连接智能卡后 会出现提示并要求选择证书 智能卡包含由封装在 X509 证书
  • 智能卡项目中WIN32和x86的区别

    我有智能卡相关的项目 在智能卡领域x86和win32有什么区别 因为我必须在vc 中创建32位应用程序 那么什么解决方案平台 我应该选择MS Visual Studio 2008 x86 用于 Intel AMD 特定代码生成 而 Win3
  • 安装后将 Javacard 小程序标记为隐式可选(默认小程序)

    我正在寻找一种方法 将小程序标记为隐式可选 默认选择 小程序 然后将其上传并安装在全球平台 http www globalplatform org JCOP 2 4 2 R1 http www nxp com products identi
  • Secure Com SCP02 会话:响应初始化更新命令返回的“密钥多样化数据”的作用是什么

    在初始化更新命令的响应字段中 密钥多样化数据 包含制造商ID和安全域AID的最后两个字节 被返回到Off Card实体 我想知道这些数据的用途是什么 我在某处读到 该密钥多样化数据用于派生卡外的基本密钥 我不知道这是对还是错 如果是正确的
  • SCardEstablishContext 内存泄漏

    我们在某些 Windows 安装上突然出现智能卡 API 问题 调用 SCardEstablishContext 函数时似乎存在内存泄漏 可以在控制台应用程序中重现该问题 代码示例位于http www pinvoke net default
  • Javacard 中的 ECDSA 签名

    我正在 Javacard 中使用 ECDSA 实现签名代码 我的代码在异常部分输出 0x0003 NO SUCH ALGORITHM 这意味着该卡不支持该算法 我不明白这一点 因为我的供应商告诉我它支持 ECC 我的结论是 我不知道如何使用
  • 在 Java Card 上将 byte[] 转换为 Short[] 的快速方法

    我想在 Java 卡上优化 SHA 3 算法 我需要一种消耗更少内存的快速算法 可以轻松转换byte to short 或短 to byte 我当前的实现如下所示 private short byteToShort byte b int l
  • jcop是在java卡中安装小程序的唯一方法吗?

    我正在尝试理解java卡的概念 我有一些疑问 我想与大家分享 也许你会对我有任何最好的建议 Jcop 我在某处读到 Java Card OpenPlatform JCOP 是由 IBM Z rich Research Laboratory
  • 智能卡 CMS 解密

    我在用着充气城堡管理我的项目的加密功能 我设法使用CMS用于加密和解密 两个密钥都存储在我的文件系统中 a cert and a p12 这是我实际使用的两个函数 private static byte CmsEncrypt byte me

随机推荐

  • COM 返回未实现任何接口的类型

    我需要通过 NET 4 0 应用程序自动执行 Adob e InDesign CS3 中的一些任务 我已使用 Visual Studio 中的 添加引用 对话框添加了对 InDesign 类型库的引用 它生成一个互操作程序集 该程序集正确包
  • 在不重新查询数据库的情况下重新排序 Rails 中的活动记录?

    例如 假设我有一个名为 Products 的模型 并且在 Products 控制器中 我有以下用于 Product list 视图的代码来显示排序的产品 products Product order params order by 想象一下
  • 使用CamerX android进行视频录制时使用语音识别器API

    我目前正在使用cameraX 来录制带有音频的视频 并且工作得很好 但是现在我必须在录制视频时使用SpeechRecognizer 并获取用户所说内容的转录 UPDATE 我尝试从视频中提取音频 然后将其作为额外内容提供给意图 但它不起作用
  • 彼此之间具有 N2N 关系的两个实体的组成之间的关系

    我定义了两个实体 Product ProductId PK Name not null Parts PartId PK Name not null 它们之间定义了多对多关系 根据我的要求 我需要对复合产品 零件与其他复合产品 零件之间的另一
  • NSURLSession HTTP/2 内存泄漏

    这个我的测试用例指出 当使用带有 HTTP 2 连接的 NSURLSession 时 存在内存问题 测试1 iOS 9 HTTP 2服务器 我使用 NSURLSession 上传 10M 文件到 HTTP 2 服务器 如果文件上传完成一切正
  • GitHub 文件夹上有一个白色箭头

    我最近推送到 github 并在我的一个文件夹上看到一个白色箭头 当我单击该文件夹时 它不会打开它 在我的本地计算机上 它有内容 但在 github 中我无法访问它们 这是什么意思 Symptom 检查本地是否有 git 该文件夹下的子文件
  • 在控制台中动态更改字体

    是否有合适的插件或类来更改公共输出控制台中的字体大小 字体类型和装饰 您可以通过进入首选项来更改终端的字体 但这不是我在这里寻找的 我希望能够从代码内动态更改字体 Ruby 或一些终端命令中有什么可以做到这一点 我使用 Mac OS X A
  • 自动保存对 Chrome 开发工具中现有样式所做的 CSS 更改?

    我已经将必要的文件映射到本地资源 但是 虽然这确实允许我保存对 源 面板中的文件所做的任何更改 但我想知道是否可以自动保存对 元素 面板中对 CSS 所做的更改 否则 目前 对 元素 面板中的样式所做的任何更改似乎只存在于此处 我记得在某个
  • 如何创建自定义文本转语音引擎

    据我所知 TTS 需要 TTS 引擎才能说一种语言 在 Android 模拟器 2 2 中 默认使用 Pico TTS 引擎 它只有一些流行语言 我在市场上看到一些引擎必须购买才能安装 我的问题 有没有办法创建支持其他语言的自定义引擎 通过
  • 如何使 Application.Properties.Settings 公开并保持这种状态

    我正在将我的应用程序设置集中到一个位置 并且我选择使用公共库中的设置集合来执行此操作 我已将所有这些设置移至它们自己的文件中 该文件使用配置源拉入我的 app config 中
  • 如何自动递增 varchar?

    我可以在一张表中为供应商 s0001 s0002 创建一个主键 例如 c0001 c0002 吗 数据库设计的思想是保持每个数据元素独立 每个元素都有自己的数据类型 约束和规则 那c0002不是一个字段 而是两个字段 与相同XXXnnn管他
  • ASP.NET 应用程序中的实体框架 ObjectContext 单元测试

    我使用以下代码为每个 ASP NET 请求创建实体框架 ObjectContext public static class ObjectContextPerRequest public static EStudyTestDatabaseEn
  • 如何使用 MVVM 模式“禁用”WPF 中的按钮?

    我正在尝试掌握 WPF 和 MVVM 并取得了良好的进展 WPF 和 MVVM 方面进展顺利 然而 XAML 和数据绑定方面则完全是另一回事了 我将如何 禁用 按钮 例如 我的视图模型中有一个 CanClose 属性 用于确定当前是否可以关
  • SwiftUI:无法将“Bool”类型的值转换为预期的参数类型“Binding

    为 SwiftUI 创建基于文本的游戏 想知道为什么我无法在字符 ForEach 循环中访问 isSelected 它给出了错误 无法将类型 Bool 的值转换为预期参数类型 Binding 在线上Toggle isOn character
  • 为什么 const_cast 会删除指针的常量性,但不会删除指向 const 的指针?

    我明白那个const cast使用指针和引用 我假设输入const cast应该是一个指针或引用 我想知道为什么如果输入是指针 引用 它不会消除常量性const int 以下代码按预期工作 const cast具有多级指针 int main
  • 如何删除自动完成上的清除按钮并仅显示文本

    我是反应虚拟化和自动完成的新手 我目前已经构建了一个列表 当选中该复选框时 该列表会显示多个文本 这是我的代码 https codesandbox io s material demo forked 1qzd3 file demo tsx
  • Django:限制模型数据

    我正在以一种限制可以通过模型获得的查询集的方式进行搜索 假设我有以下模型 具有依赖项 Company Section Employee Task more models Customer Contract Accounts other gr
  • 使用 dict.values() 或 dict.itervalues() 迭代时修改字典值

    我有一个像这样初始化的字典 tab Mike 0 Chad 15 Taylor 2 我希望能够将整数添加到字典中的每个值 例如 添加 5 后 字典应如下所示 Mike 5 Chad 20 Taylor 7 似乎这可以通过几行代码来完成 但我
  • mvc视图中模型空引用异常

    问题是从控制器传递数据到视图时出现空引用异常 我将模型从控制器传递到视图 如下所示 ViewBag PartId id var viewmodel new Orderviewmodelnew var order new OrderMnage
  • 扩展 APDU 和 T=0/1 通信协议

    我有一个 JCOP V2 4 2 R3 java 卡 它的数据表中提到 该卡支持T 1 and T 0通信协议 我还有一个 ACR38 智能卡读卡器 它支持 T 0 和 T 1 协议 我与一张卡成功进行了 T 0 通信 并且与该卡成功进行了