【发布时间】:2019-06-24 20:21:23
【问题描述】:
我正在尝试列出与 GlobalPlatform 2.1.1 兼容的智能卡内容,特别是列出已安装的小程序(除了 ISD)和/或使用 APDU 命令的公钥,但我找不到任何示例。
我们将不胜感激任何参考/文档。
ATR:3B7F94000080318065B0850300EF120FFF829000
提前致谢。
【问题讨论】:
标签: smartcard apdu globalplatform
我正在尝试列出与 GlobalPlatform 2.1.1 兼容的智能卡内容,特别是列出已安装的小程序(除了 ISD)和/或使用 APDU 命令的公钥,但我找不到任何示例。
我们将不胜感激任何参考/文档。
ATR:3B7F94000080318065B0850300EF120FFF829000
提前致谢。
【问题讨论】:
标签: smartcard apdu globalplatform
查看GlobalPlatformPro 或GPShell 了解一些工作示例。
基本上您需要向 ISD 进行身份验证(这意味着您必须拥有正确的密钥)并发出 GET STATUS 命令(请参阅全球平台卡规范 2.1.1,第 9.4 章)。
要获取有关加载的 ISD 密钥的信息,请使用带有适当标签的 GET DATA(第 9.3 章)。
祝你的项目好运!
编辑>
一些卡(不是很多)支持带有对象枚举的 ISO 7816-4 SELECT APDU,并允许使用以下方法迭代卡应用程序(无需身份验证):
00 A4 04 00 00 -- 按 [截断] 空应用程序标识符选择,第一次或唯一一次出现
当 SW != 6A 82
00 A4 04 02 00 -- 获取下一个事件详情请见ISO 7816-4
EDIT2>
如果卡使用默认的40..4F 键,请使用 GlobalPlatformPro(参见here):
java -jar gp.jar -list
请注意,使用错误密钥的身份验证尝试几乎肯定会破坏您的卡——请参阅here。
EDIT3>
对于带有“知名母钥匙”的金雅拓卡:
java -jar gp.jar -visa2 -key 47454D5850524553534F53414D504C45 -list
请注意,使用错误密钥的身份验证尝试几乎肯定会破坏您的卡
【讨论】:
00 A4 04 00 00 和 00 A4 00 02 00 总是输出相同的结果:Received (SW1=0x90, SW2=0x00): 6F 65 84 08 A0 00 00 00 18 43 4D 00 A5 59 73 4A 06 07 2A 86 48 86 FC 6B 01 60 0C 06 0A 2A 86 48 86 FC 6B 02 02 01 01 63 09 06 07 2A 86 48 86 FC 6B 03 64 0B 06 09 2A 86 48 86 FC 6B 04 01 05 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 9F 6E 06 12 91 21 72 03 00 9F 65 01 FF 我已经尝试过带有令人毛骨悚然的警告的 GPP (jar),但似乎这些不是正确的键。也许应该联系发行人。对不起格式,似乎换行不起作用?
如果您想在不进行身份验证的情况下获取应用程序列表,则有可能以下可能会起作用:
00A40400 以希望选择 ISD。80CA 2F00。最后一条命令来自GlobalPlatform v2.2.1 specification 的第 152 页。我只看到它在一张卡上工作:Tesla Model 3 NFC Card。
如果有效,您将获得一堆标记为 61 的串联 ASN.1 项目,其中包含 AID(标记 4F)。
【讨论】:
智能卡从未设计用于转储,而是用于非常细粒度的访问,例如:此文件只能在 PIN 验证后读取,以便使用密钥 9 编写质询-响应测试是必要的。这是与 SLE4428 等存储卡的概念差异,这意味着您通常无法读取所有内容。
对于没有文件系统但只有applet 的javacard,所有这些都提供了它们的命令集,转储的想法是完全奇怪的,因为每个applet 都由可执行代码和持久变量的任意组合组成。你想象的结果是什么?
ISO 7816-15 定义了一个公共接口来检索一些信息,例如已安装应用程序的列表,但您不能依赖它的支持。
【讨论】: