我有一个Javacard,其中包含一个SSD (补充安全域),我想删除它。通常,当我想从我的卡中删除一个applet或一个包时,我在成功的相互认证过程之后发送以下删除APDU命令(不需要MAC或数据字段加密,Security Level == 0
就足以删除APDU命令):
--> 80 E4 00 00 LC 4F <AID Len> <AID>
<-- 90 00
上面的命令对于普通的applet很好。但是,当我把我的SSD的AID放进去时,卡片上写着6985个状语,意思是“使用条件不满足”。
由于在我的卡中启用了委托管理功能,并且ISD中加载了一个公共令牌密钥和一个收据密钥,我想可能是由于在Delete APDU命令中没有使用DELETE令牌造成了上述错误。因此,我计算了删除标记如下:
全局平台卡规范2.2.0.7 :图C-8:删除令牌计算
DeleteToken = RSA_Sign("00 00 LC 4F <SSD AID Len> <SSD AID>", TokenPrivateKey)
然后我尝试使用follwing命令删除SSD:
--> 80 E4 00 00 <LC+Len(DeleteToken)> 4F <SSD AID Len> <SSD AID> 9E <Len(DeleteToken> <DeleteToken>
<-- 69 85
但我又得到了6985的状态词。有没有人知道问题在哪里,我怎样才能解决?
更新:
我甚至尝试使用P2 = 0x80
的DELETE APDU命令删除带有所有相关对象的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:
使用0E
权限从卡的ISD包实例化上述SSD,这意味着:
安全域+委托管理+ DAP验证
Update4:
我想我找到问题了!
引用自2.1.1
6.1.删除 6.1.2.建议 在命令消息中发送的数据字段 (诸如此类) 支持辅助安全域的实现上的,如果试图删除补充安全域的实例,而补充安全域具有DAP验证特权(特权字节集的第7位),则安全域不会被删除,并返回'6985‘响应。
Question1:知道为什么会这样实现/推荐它吗?使这类SSD (带DAP验证特权的SSD)不可移除的目的是什么?
Update5:
我试图更改我的SSD的priveleges,以从其中删除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
Question2:用于注册表更新命令的安装有什么问题?
发布于 2020-11-15 20:49:46
https://stackoverflow.com/questions/64848060
复制相似问题