我有一个包含 SSD(补充安全域)的 Javacard,我想删除它。通常,当我想从卡中删除小程序或包时,我会发送以下内容删除 APDU成功后命令相互认证过程(不需要 MAC 或数据字段加密,并且Security Level == 0
就足够了删除 APDU命令):
--> 80 E4 00 00 LC 4F <AID Len> <AID>
<-- 90 00
上面的命令对于普通小程序来说效果很好。但是当我将 SSD 的 AID 放入其中时,该卡会响应69 85状态词,这意味着“不满足使用条件。”.
Since 委托管理我的卡已启用该功能并且公共代币钥匙和一个Receipt密钥已加载到 ISD 中,我想上述错误可能是由于未使用删除令牌 in the 删除 APDU命令。所以我计算了删除令牌如下:
Global Platform Card Specification 2.2.0.7 : Figure C-8: Delete Token Calculation
DeleteToken = RSA_Sign("00 00 LC 4F <SSD AID Len> <SSD AID>", TokenPrivateKey)
然后我尝试使用以下命令删除SSD:
--> 80 E4 00 00 <LC+Len(DeleteToken)> 4F <SSD AID Len> <SSD AID> 9E <Len(DeleteToken> <DeleteToken>
<-- 69 85
但我又收到了6985状态字。有谁知道问题出在哪里以及我该如何解决它?
Update:
我什至尝试过删除 APDU命令与P2 = 0x80
删除 SSD 及其所有相关对象。但它也失败了:
--> 80 E4 00 80 09 4F <SSD AID Len> <SSD AID>
<-- 6A 86 (= Incorrect P1 or P2 parameter)
Update2:
我什至尝试在安全通道 (SecLevel = 03) 中发送 DELETE APDU 命令。但我再次收到了 6985 个状态字。我需要使用哪种哈希算法来生成删除令牌?据我所知,GP规范没有指定哈希算法。
Update3:
上述 SSD 是从卡的 ISD 包中实例化的0E
特权,这意味着:
安全域 + 委托管理 + DAP验证
Update4:
我想我发现了问题!
引述自2.1.1_Mapping_guidelines_v1.0.1-Final.pdf https://globalplatform.org/wp-content/uploads/2018/06/2.1.1_Mapping_guidelines_v1.0.1-Final.pdf:
6.1.删除
6.1.2.推荐
命令消息中发送的数据字段
(巴拉巴拉)
在支持补充安全域的实现中,如果尝试删除补充安全域的实例,并且补充安全域具有 DAP 验证权限(权限字节集的第 7 位),则不会删除安全域,并且返回响应“6985”。
问题1:知道为什么这样实施/推荐吗?将此类 SSD(具有 DAP 验证权限的 SSD)设为不可拆卸的目的是什么?
Update5:
我尝试更改 SSD 的权限以删除DAP验证使用它的特权安装注册表更新然后删除SSD。但它失败了6A 80
状态字(表示“数据字段中的参数不正确”)。
--> 00 A4 04 00 08 A0 00 00 00 03 00 00 00
<-- 6F 10 84 08 A0 00 00 00 03 00 00 00 A5 04 9F 65 01 FF 90 00
--> 80 50 00 00 08 DF 4B 4B B7 15 35 5A 93
<-- 00 00 41 89 00 24 94 97 41 21 01 02 00 77 5C 2B 50 27 5A F4 8A 18 C0 8B 2D C2 20 50 90 00
--> 84 82 00 00 10 30 AD 04 C4 60 A2 80 8B 5A 61 7E 49 3A 39 B6 C6
<-- 90 00
--> 80 E6 40 00 16 08 A0 00 00 00 03 00 00 00 00 07 <SSD AID> 01 80 00 00
<-- 6A 80
问题2:有什么问题安装注册表更新命令?