解锁后无法在 JavaCard 中列出或安装 CAP 文件。为啥?以及如何解决?
Posted
技术标签:
【中文标题】解锁后无法在 JavaCard 中列出或安装 CAP 文件。为啥?以及如何解决?【英文标题】:Cannot list or install CAP files in JavaCard after unlocking. Why? and how to solve it?解锁后无法在 JavaCard 中列出或安装 CAP 文件。为什么?以及如何解决? 【发布时间】:2021-06-22 16:09:12 【问题描述】:我有一个 SmartCafe JavaCard。我能够解锁它,但我无法在它上面运行任何命令。 我还能尝试什么?
也许是因为协议?但是我没有找到改变协议的方法。你还有什么想法
gp -dvl
#
# gp -dvl
[DEBUG] TerminalManager - Selected the only reader with a card
SCardConnect("Identiv uTrust 4701 F Contact Reader 0", T=*) -> T=1, 3BF71800008031FE45736674652D6E66C4
# GlobalPlatformPro 325fe84
# Running on Windows 10 10.0 amd64, Java 11.0.11 by Oracle Corporation
A>> T=1 (4+0000) 00A40400 00
A<< (0018+2) (54ms) 6F108408A000000003000000A5049F6501FF 9000
[DEBUG] GPSession - Auto-detected ISD: A000000003000000
Warning: no keys given, defaulting to 404142434445464748494A4B4C4D4E4F
[INFO] GPSession - Using card master keys with version 0 for setting up session [MAC]
A>> T=1 (4+0008) 80500000 08 9ECABDC6C1A59FEB 00
A<< (0028+2) (120ms) 0000216196005964450501020003ED298A383ECE2F1E4CA8EB811E95 9000
[DEBUG] GPSession - SSC: 0003
[DEBUG] GPSession - Host challenge: 9ECABDC6C1A59FEB
[DEBUG] GPSession - Card challenge: 0003ED298A383ECE
[DEBUG] GPSession - Card reports SCP02 with key version 1 (0x01)
[INFO] GPSession - Diversified card keys: ENC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) MAC=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) DEK=404142434445464748494A4B4C4D4E4F (KCV: 8BAF47) for SCP02
[INFO] GPSession - Session keys: ENC=C39AC2D18F94A22B14C04DBB8CF69B7F MAC=D527FB5519C316C9C876E016D80BAEBA RMAC=598ECF7C266BA87DEA24D380AFAFE069
[DEBUG] GPSession - Verified card cryptogram: 2F1E4CA8EB811E95
[DEBUG] GPSession - Calculated host cryptogram: BA9CC3E1E77BF363
A>> T=1 (4+0016) 84820100 10 BA9CC3E1E77BF3634913ED6DF33F8FEA
A<< (0000+2) (46ms) 9000
A>> T=1 (4+0010) 84F28002 0A 4F0056F974428777BDCE 00
A<< (0000+2) (49ms) 6A86
A>> T=1 (4+0010) 84F28000 0A 4F006C54999C15CDD096 00
A<< (0011+2) (52ms) 08A000000003000000079E 9000
Error: At position 1 the len is more then 3 [32]
java.lang.IllegalStateException: At position 1 the len is more then 3 [32]
at com.payneteasy.tlv.BerTlvParser.getDataLength(BerTlvParser.java:205)
at com.payneteasy.tlv.BerTlvParser.parseWithResult(BerTlvParser.java:85)
at com.payneteasy.tlv.BerTlvParser.parse(BerTlvParser.java:53)
at com.payneteasy.tlv.BerTlvParser.parse(BerTlvParser.java:44)
at pro.javacard.gp.GPRegistry.populate_tags(GPRegistry.java:151)
at pro.javacard.gp.GPRegistry.parse_and_populate(GPRegistry.java:211)
at pro.javacard.gp.GPSession.getStatus(GPSession.java:1022)
at pro.javacard.gp.GPSession.getRegistry(GPSession.java:963)
at pro.javacard.gp.GPTool.run(GPTool.java:665)
at pro.javacard.gp.GPTool.main(GPTool.java:107)
SCardDisconnect("Identiv uTrust 4701 F Contact Reader 0", true) tx:72/rx:67
【问题讨论】:
【参考方案1】:相互认证成功:
A>> T=1 (4+0016) 84820100 10 BA9CC3E1E77BF3634913ED6DF33F8FEA A
但 GET STATUS 命令失败:
84F28002 0A 4F0056F974428777BDCE 00 A> T=1 (4+0010) 84F28000 0A 4F006C54999C15CDD096 00 A
第一个 GET STATUS 命令以新格式搜索颁发者安全域,但收到“不正确的参数 P1,P2”作为响应。
第二个命令尝试读取相同的内容,但使用旧格式。这里收到了响应,但gp
似乎对结果08A000000003000000079E
有解析错误。
解析结果应该是:
08 - 长度 A000000003000000 - 援助 07 - 生命周期状态 = 卡片已初始化 9E - 应用程序权限
请针对gp
工具提出问题。应该很容易修复它。
在此问题未解决的情况下,您能否尝试使用替代工具来完成您的任务?我是GPShell 的作者,根据代码库,我认为至少不会发生此错误。
【讨论】:
谢谢,我试试看。 仍然无法工作 :) 很乐意在这里获得任何线索或提示更多信息:github.com/kaoh/globalplatform/issues/48 这个分析是 100% 正确的。对 GlobalPlatformPro 使用选项-P old
(自 v20.08.12 起)或 --op201
(旧版本)可能会有所帮助。以上是关于解锁后无法在 JavaCard 中列出或安装 CAP 文件。为啥?以及如何解决?的主要内容,如果未能解决你的问题,请参考以下文章