打开与 Java Card 和 Global Platform 的安全连接

2024-04-26

在模拟器上成功开发 Java Card 后,现在我正在处理一个真正的 Java Card (金雅拓 IDCore 3010 http://www.gemalto.com/dwnld/6589_IDCore3010_Product_Datasheet_Jan14.pdf)。我一直在经历全球平台 http://sourceforge.net/p/globalplatform/wiki/GPShell/#security-domain-aids,但即使使用最基本的示例代码(将在卡上列出小程序)我也遇到问题。

这是原始代码:

mode_201
enable_trace
establish_context
card_connect
select -AID a0000000030000
open_sc -security 1 -keyind 0 -keyver 0 -mac_key 404142434445464748494a4b4c4d4e4f -enc_key 404142434445464748494a4b4c4d4e4f // Open secure channel
get_status -element e0
card_disconnect
release_context

我已经修改了,现在是这样的:

//I changed this, because the Card Management & API is compliant with GP2.1.1. 
mode_211
enable_trace
establish_context
//Switches are not necessary as I am using only one single-slot card reader
card_connect
//The auto-detected ISD AID of the card is: A000000018434D00
select -AID A000000018434D00
//This is the line where the command fails
open_sc -security 0 -keyind 0 -keyver 0 -keyDerivation none -key 47454d5850524553534f53414d504c45   // Open secure channel
//This would list applets and packages and security domains
get_status -element e0
card_disconnect
release_context

在全球平台页面上,您可以发现这些是用于open_sc命令:

open_sc -keyind x -keyver x -key xyz -mac_key xyz -enc_key xyz -kek_key xyz -security x -scp x -scpimpl x -keyDerivation x
Open secure channel

但遗憾的是我找不到有关这些开关的足够信息。

  • keyind:我发现的唯一信息是它是一个关键索引,我自己也猜到了。
  • keyver:按键设置版本。与上面相同。
  • key:我读到,如果我有一张使用密钥派生的卡,我必须使用 -keyDerivation 选项启用派生模式,并且必须使用 -key 指定主(母)密钥。所以在这里我提供了我的母密钥(4F454D5850524553534F53414D504C45)。
  • mac_key:它不应该相关,因为它是根据主密钥计算的。
  • enc_key:它不应该相关,因为它是根据主密钥计算的。
  • kek_key:它不应该相关,因为它是根据主密钥计算的。
  • security:我查到的信息是这样的:0:clear,1:MAC,3:MAC+ENC。由于在我的卡的数据表中找不到类似的内容,所以我选择了“0”。
  • scp:安全通道协议(1 SCP01、2 SCP02,默认未设置)。应该没有必要明确说明。我的卡同时支持 SCP01 和 SCP02。
  • scpimpl:安全通道实现(默认未设置)。应该没有必要明确说明。
  • 密钥派生:可能的值为“none”、“visa2”或“emvcps11”。另外,由于我在数据表中找不到有关此的信息,因此我将其堆叠为“无”。

这是我使用修改后的代码收到的错误消息:

C:\JavaCard\GPShell-1.4.4>GPShell.exe list.txt
mode_211
enable_trace
establish_context
card_connect
select -AID A000000018434D00
Command --> 00A4040008A000000018434D00
Wrapped command --> 00A4040008A000000018434D00
Response <-- 6F198408A000000018434D00A50D9F6E061291518101009F6501FF9000
open_sc -security 0 -keyind 0 -keyver 0 -keyDerivation none -key 47454d585052455
3534f53414d504c45   // Open secure channel
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 6A88
GP211_get_secure_channel_protocol_details() returns 0x80206A88 (6A88: Referenced
 data not found.)

有人可以告诉我出了什么问题以及我应该如何参数化和执行open_sc命令?非常感谢!

Solution:这是工作版本:

mode_201
enable_trace
establish_context
card_connect
select -AID A000000018434D00
open_sc -scp 1 -scpimpl 0x15 -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 -keyDerivation visa2
get_status -element e0
card_disconnect
release_context

不幸的是,与日常生活中的其他设备相比,智能卡通常不提供完整的手册或说明。如果您没有一些必要的参数,您就会迷失。尝试使用开关mode_201:

mode_201
enable_trace
enable_timer
establish_context
card_connect
select -AID A000000018434D00
open_sc -security 3 -keyind 0 -keyver 0 -key 47454d5850524553534f53414d504c45 -keyDerivation visa2 // Open secure channel
get_status -element e0
card_disconnect
release_context

有一个名为的示例文件listgemXpressoProR3_2E64.txt: https://sourceforge.net/p/globalplatform/code/HEAD/tree/trunk/gpshell/helloInstallgemXpressoProR3_2E64.txt https://sourceforge.net/p/globalplatform/code/HEAD/tree/trunk/gpshell/helloInstallgemXpressoProR3_2E64.txt

也许您的卡与此金雅拓卡兼容。

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

打开与 Java Card 和 Global Platform 的安全连接 的相关文章

  • JavaCard 的数学库?

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

    假设我想对 Mifare Classic 进行身份验证 我如何知道要发送到卡的 APDU 的确切类型 Example 这段代码 bcla 0xFF bins 0x86 bp1 0x0 bp2 0x0 currentBlock len 0x5
  • 如何更改小程序的权限和卡历史字节?

    我已经认为更改历史字节仅限于预个性化步 但是 我发现了一个名为设置ATRHistBytes今天在 GlobalPlatform API 中 这是它的描述 GlobalPlatform 2 2 第 172 页 设置ATRHistBytes p
  • Java 9、10、11、12...等中的 javax.smartcardio

    从 Java 9 开始 javax smartcardio 库发生了什么 有替代方法或某种方式在 JAR 中获取它吗 在网上搜索了几个小时后 感谢上面的答案 据我了解 Java 9 及更高版本是模块化的 这是几年前计划的语言改进 此外 在新
  • JavaCard 中的类字节到底是什么?

    我已经开始使用 JavaCards 并试图掌握 CLA 字节的含义 如果要读RFC 5 4 1 类字节 http www cardwerk com smartcards smartcard standard ISO7816 4 5 basi
  • 请求客户证书

    我看到很多关于此的未解决的问题 显然很多开发者都已经得到了past http forums asp net t 1356598 aspx Need 20to 20integrate 20CAC 20Card 20Authentication
  • 如何检查智能卡在Linux上是否正常工作?

    我有支持 PKCS 11 的智能卡吗 我只是想检查我的智能卡是否工作正常 如何在 Ubuntu 上检查它 请指导我 我可以使用什么软件 我应该遵循什么步骤 重要的是要明白PKCS 11标准只是定义了C语言API访问智能卡和其他类型的加密硬件
  • JAVACARD2.2中selectApplet()方法的功能是什么

    正如 JavaCard 2 2 API 文档中提到的here http www win tue nl pinpasjc docs apis jc222 javacard framework Applet html selectingAppl
  • 如何创建和使用Java Card库包?

    正如您可能知道的 正如中提到的Java 卡开发套件用户指南为Java Card平台编写大型应用程序的关键是将代码划分为单独的包单元 软件包最重要的限制是最大组件大小为 64KB 对于 方法组件 如果应用程序的方法组件的大小超过 64KB 那
  • 将证书从智能卡复制到计算机

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

    这个问题专门针对 MIFARE Ultralight C EV1 或 MIFARE DESFire EV1 甚至 NTAG 卡 我想实现一个令牌系统 以便每次普通用户读取其中一张卡时 他们都会获得一个可用令牌 该令牌将从他们正在读取的 NF
  • 智能卡项目中WIN32和x86的区别

    我有智能卡相关的项目 在智能卡领域x86和win32有什么区别 因为我必须在vc 中创建32位应用程序 那么什么解决方案平台 我应该选择MS Visual Studio 2008 x86 用于 Intel AMD 特定代码生成 而 Win3
  • SCardEstablishContext 内存泄漏

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

    我一直在使用 pcsc sharp 库开发一个小型智能卡扫描仪应用程序 该应用程序作为控制台应用程序运行时工作正常 代码如下 using System using System Collections Generic using Syste
  • 打开与 Java Card 和 Global Platform 的安全连接

    在模拟器上成功开发 Java Card 后 现在我正在处理一个真正的 Java Card 金雅拓 IDCore 3010 http www gemalto com dwnld 6589 IDCore3010 Product Datashee
  • mifare 卡身份验证错误“6982:安全状态未满足”

    我有 pc sc 读卡器和非接触式卡 mifare 卡 我可以连接到该卡 并且我也成功执行 getdate 命令 但是当我想进行身份验证时 我看到此错误 6982 安全状态不满足 我已经尝试过这 3 个不同的身份验证命令 但所有这些命令都出
  • 如何在Windows 8上正确使用SCardGetStatusChange?

    智能卡服务在 Windows 8 上的行为有所不同 并且 MSDN 尚未更新其文档 任何人都可以提供有关如何正确调用 SCardGetStatusChange 来监视 Windows 8 上的智能卡操作的代码片段吗 提前致谢 这是我为个人博
  • 无法将小程序(.cap 文件)下载到智能卡中:SW 6D 00(无效指令)

    我正在开发 JCOP3 SecID P60 CS 智能卡 我正在尝试使用下载 cap 文件pyAPDU工具购买 我得到 6D 00回答 无效指令 与 的结果相同gp 请问有人可以告诉我问题出在哪里吗 未给出您用于初始选择颁发者安全域 ISD
  • 关于Javacards中SELECT APDU命令的一些问题

    下面引用的段落是一篇文章的一部分 该文章名为如何编写 Java Card 小程序 开发人员指南陈志群撰 我看到了here http lig membres imag fr donsez ujf messi sc examples javaw
  • 获取数据APDU命令不同的标签和响应格式

    你可能知道 全球平台卡规格 http globalplatform org specificationscard asp定义了一个名为Get Data从智能卡检索一些信息 全球平台专业版 https github com martinpal

随机推荐