2

我有一张没有融合的智能卡(我的意思是它没有预先个性化)。它有一个 ATR= 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2

Q1:我卡的历史字节是什么/在哪里?我如何分析它们?

Q2:我在哪里可以找到我的卡的型号?我在网上搜索了它的ATR,但一无所获!

当您尝试使用GPJ等工具列出真正空白卡(我的意思是未融合的卡)的小程序时,您会收到以下输出:

>> gpj -list

>> java -jar gpj.jar -list
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0

ATR: 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2

DEBUG: Command  APDU: 00 A4 04 00 07 A0 00 00 01 51 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain GP211 A0 00 00 01 51 00 00 , SW: 6A 82

DEBUG: Command  APDU: 00 A4 04 00 08 A0 00 00 00 18 43 4D 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain GemaltoXpressPro A0 00 00 00 18 43 4D 00 , SW:6A 82

DEBUG: Command  APDU: 00 A4 04 00 08 A0 00 00 00 03 00 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain OP201a A0 00 00 00 03 00 00 00 , SW: 6A 82

DEBUG: Command  APDU: 00 A4 04 00 07 A0 00 00 00 03 00 00
DEBUG: Response APDU: 6A 82
Failed to select Security Domain OP201b A0 00 00 00 03 00 00 , SW: 6A 82

net.sourceforge.gpj.cardservices.exceptions.GPSecurityDomainSelectionException:Could not select any of the known Security Domains!
at net.sourceforge.gpj.cardservices.GlobalPlatformService.open(Unknown Source)
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main(Unknown Source)

上面的输出意味着工具找不到任何可供选择的 SC。

我在互联网上搜索了很多,最后发现我需要一个密钥(Transport-Key)来进行Pre-Personalization过程。

让我分享一些知识!

预个性化程序如下(针对 JCOP):

  1. ATR 请求
  2. 选择命令来选择根小程序(Transport-Key 是这个小程序的 AID)
  3. 引导命令
  4. 可以根据需要使用尽可能多的 Read、WRITE、ADMINEXEC、SB_NAT_APPLET_INSTRUCTION 和 AUTH 命令
  5. 保护命令
  6. 熔断命令
  7. 重置卡。

在第 4 步中,我们使用默认设置初始化 IC(配置 IC 所需的生命周期、定义通信行为、ATR 和/或 ATS 参数或预加载小程序)。

顺便说一句,我做了前两个步骤(1和2),然后我重置了卡,我试图再次列出小程序:

>> gpj -list

>> java -jar gpj.jar -list
Found terminals: [PC/SC terminal ACS CCID USB Reader 0]
Found card in terminal: ACS CCID USB Reader 0

ATR: 3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2

DEBUG: Command  APDU: 00 A4 04 00 07 A0 00 00 01 51 00 00
DEBUG: Response APDU: 6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A 86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B 02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 01 2A 02 6E 01 02 90 00
Successfully selected Security Domain GP211 A0 00 00 01 51 00 00

DEBUG: Command  APDU: 80 50 00 00 08 E7 41 23 4E F5 3B EB E3
DEBUG: Response APDU: 00 00 41 98 00 17 14 97 42 48 FF 02 00 00 BA FF B1 51 C8 BD F1 69 59 8D 80 D6 72 66 90 00

javax.smartcardio.CardException: Card cryptogram invalid.at net.sourceforge.gpj.cardservices.GlobalPlatformService.openSecureChannel(Unknown Source)
at net.sourceforge.gpj.cardservices.GlobalPlatformService.main
(Unknown Source)

如您所见,出现了一个带有 AID= 的小程序A0 00 00 01 51 00 00。但我无法成功执行EXTERNAL AUTHENTCAT命令!

Q3:为什么外部认证失败?因为我没有设置 SD 密钥?

我尝试使用OpenSC Tool选择这个小程序:

>> opensc-tool -s 00A4040007A0000001510000

Using reader with a card: ACS CCID USB Reader 0
Sending: 00 A4 04 00 07 A0 00 00 01 51 00 00
Received (SW1=0x90, SW2=0x00):
6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 od......Q....X.e
01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A ...n.G.#GA.sI..*
86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B .H..k.`...*.H..k
02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B ...c...*.H..k.d.
06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B ..*.H..k..Ue...+
85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 ...Hd...f...+...
01 2A 02 6E 01 02                               .*.n..

Q4:这个输出是什么意思?

在下面,您还可以在get-data脚本之后看到GP Shell的输出:

.:: gpshell get_data.txt

establish_context
enable_trace
enable_timer
card_connect
command time: 281 ms
get_data -identifier 9F7F
Command --> 80CA9F7F00
Wrapped command --> 80CA9F7F00
Response <-- 9F7F2A4790507547912347410041980017149742484812420500000000143E24303
137313400000000000000009000
9F7F2A4790507547912347410041980017149742484812420500000000143E243031373134000000
0000000000
command time: 62 ms
get_data -identifier 66
Command --> 80CA006600
Wrapped command --> 80CA006600
Response <-- 664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A86488
6FC6B03640B06092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A0
26E01029000
664B734906072A864886FC6B01600B06092A864886FC6B020202630906072A864886FC6B03640B06
092A864886FC6B040255650B06092B8510864864020103660C060A2B060104012A026E0102
command time: 47 ms
card_disconnect
command time: 141 ms
release_context
command time: 0 ms

.::

Q5:这个输出是什么意思?我该如何分析它?

4

3 回答 3

10

Q1:我卡的历史字节是什么/在哪里?我如何分析它们?

A1:您可以在此站点中输入 ATR,它会为您解析。基于你卡的历史字节是4A 43 4F 50 32 34 32 52 33

Q2:我在哪里可以找到我的卡的型号?我在网上搜索了它的ATR,但一无所获!

A2:你不需要做任何事情,因为这个网站让你一切都变得简单:) 恭喜,它认出了你的卡!是NXP JCOP v2.4.x

Q3:为什么外部认证失败?因为我没有设置 SD 密钥?

A3:错误是Card cryptogram invalid。似乎从卡端和 gpj 端使用的密钥是不同的。您需要知道卡中设置了哪些密钥,并为 gpj 设置相同的密钥。

Q4:这个输出是什么意思?

A4:如果您想继续研究 Java Cards,阅读 Global Platform 文档很重要。select 命令的响应消息中返回的数据字段在 GP 文档的第 9.9.3.1 节中进行了说明。

根据您的结果,我将每个部分分开,然后在下面列出每个标签。请注意,加粗的十六进制字节是标签。

6F 64 84 08 A0 00 00 01 51 00 00 00 A5 58 9F 65 od......Q....Xe
01 FF 9F 6E 06 47 91 23 47 41 00 73 49 06 07 2A ...nG# GA.sI..*
86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B .H..k.`... .H..k
02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B ...c...
.H..kd
06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B ..*.H..k..Ue...+
85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 ...高清...f...+...
01 2A 02 6E 01 02

标签 6F:文件控制信息(FCI 模板)[强制]--> 64

标签 84:应用程序/文件 AID [强制] --> 08 A0 00 00 01 51 00 00 00

标签 A5:专有数据 [强制]--> 58

标签 9F65:命令消息中数据字段的最大长度 [强制]--> 01 FF

标签 9F6E:应用程序生产生命周期数据 [可选]--> 06 47 91 23 47 41 00

标签 73:安全域管理数据 [可选]--> 49 06 07 2A 86 48 86 FC 6B 01 60 0B 06 09 2A 86 48 86 FC 6B 02 02 02 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 02 55 65 0B 06 09 2B 85 10 86 48 64 02 01 03 66 0C 06 0A 2B 06 01 04 01 2A 02 6E 01 02

Q5:这个输出是什么意思?我该如何分析它?

A5:查看此wiki 以了解 Global Platform以了解所有 GP 命令,然后自行分析输出

最后,请永远不要再问这么长的问题:(请打破部分并将每个部分作为一个单独的问题提出,谢谢:)

于 2015-01-04T17:03:29.210 回答
2

ATR 主要用于与阅读器建立通信。虽然可以通过经验和大量比较数据对这些信息进行一些映射,但这并不能保证。ISO 7816-3 描述了 ATR 的编码,它也可能包含一些历史字节(未由阅读器评估,因此通常用于简单的可检索标识)。

在您的情况下,包含 9 个历史字节,其中包含简单的 ASCII 文本“JCOP242R3”,这可能有助于您入门。

于 2015-01-04T15:15:14.107 回答
1

答1:根据您的卡ATR(3B F9 13 00 00 81 31 FE 45 4A 43 4F 50 32 34 32 52 33 A2)您的历史字节数是**(4A 43 4F 50 32 34 32 52 33**) 历史字节数分析: ---根据 ISO/IEC 7816-3 格式字节 T0 中的位 4 到 1(在您的 ATR 即F9中)告诉可用的历史字节数,即总共 9 个历史字节可用。

您的 ATR 描述如下

TS = 0x3B   Direct Convention
T0 = 0xF9   Y(1): b1111, K: 9 (historical bytes)
TA(1) = 0x13    Fi=372, Di=4, 93 cycles/ETU (43010 bits/s at 4.00 MHz, 53763 bits/s for fMax=5 MHz)
TB(1) = 0x00    VPP is not electrically connected
TC(1) = 0x00    Extra guard time: 0
TD(1) = 0x81    Y(i+1) = b1000, Protocol T=1
----
TD(2) = 0x31    Y(i+1) = b0011, Protocol T=1
----
TA(3) = 0xFE    IFSC: 254
TB(3) = 0x45    Block Waiting Integer: 4 - Character Waiting Integer: 5
----
Historical bytes    4A 43 4F 50 32 34 32 52 33
Category indicator byte: 0x4A   (proprietary format) "JCOP242R3"
TCK = 0xA2  correct checksum

答2:卡模式l是什么意思?

于 2015-01-14T11:22:06.100 回答