打开与 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 的安全连接 的相关文章

随机推荐