数据字段中包含 SSD AID 的删除 APDU 命令,返回 6985

2024-02-25

我有一个包含 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 enter image description here

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:有什么问题安装注册表更新命令?


使用 RSA 时的委托管理令牌应使用 SHA-1 作为具有 PKCS#1 方案的哈希机制。我有一些未经测试的签名代码 https://github.com/kaoh/globalplatform/blob/master/globalplatform/src/crypto.c#L1096并用于组装代币数据 https://github.com/kaoh/globalplatform/blob/master/globalplatform/src/globalplatform.c#L3338。也许这作为一个开始是有帮助的。

关于问题2:

我以前没有这样做过,但您正在传递 SSD AID 并再次作为应用程序 AID 传递 .仅当您想要修改应用程序的权限时才需要应用程序 AID,例如默认选择的权限。

Instead:

80 E6 40 00 16 08 A0 00 00 00 03 00 00 00 00 07 <SSD AID> 01 80 00 00

我想尝试一下这个:

80 E6 40 00 16 <Length SSD AID> <SSD AID> 00 01 80 00 00
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据字段中包含 SSD AID 的删除 APDU 命令,返回 6985 的相关文章

随机推荐

  • 如何在不使用触摸屏的情况下模拟触摸事件

    我目前正在尝试开发一个触摸屏应用程序 Windows 7的 视觉工作室2013 C WPF 我工作的地方将配备触摸屏 实际上是放置在平面屏幕上的一层 我希望能够生成触摸输入 以便在没有屏幕的情况下开发和测试应用程序 我找到的所有资源要么非常
  • 定制 Android 操作系统构建

    我想知道创建自定义 Android 版本并将其部署到市场上当前可用的设备上的可行性如何 是否有描述该过程的文件或指南 先感谢您 萨米 Try dsixda 的 Android 厨房 http forum xda developers com
  • JSON序列化时如何使用JavaScriptSerializer设置格式?

    我正在使用 JavaScriptSerializer 将文件中的对象序列化为 JSON 格式 但结果文件没有可读的格式 如何允许格式化以获得可读文件 你可以使用JSON NET http json codeplex com 序列化器 支持
  • Matplotlib寄生对数轴勾选不需要的镜像

    我正在尝试使用 mpl toolkits axes grid1 中的 host subplot 制作一个具有两个 y 轴的图 其中一个是对数轴 一个是线性轴 该图看起来不错 但辅助 y 轴 右 的小刻度也显示在图内部的主 y 轴 左 上 i
  • android sqlite数据库中rawquery和execSQL的区别

    使用 rawquery 和 execSQL 之间的确切区别是什么 在 android Activity 中编写查询时 何时使用 rawquery 以及何时使用 execSQL 来自 API 文档 void execSQL String sq
  • 片段 - 您是否必须在包含整个活动的片段周围使用活动包装器?

    考虑以下示例应用程序开发者 android com http developer android com images fundamentals fragments png 这描述了如何使用 Fragment 如下所示 在电话上 您可以在活
  • 是否可以将条件属性创建为 DisplayIf?

    我想创建一个与我的视图模型一起使用的属性 我想根据第三个值显示不同的文本字符串 我想做这样的事情 DisplayIf IsPropertyValid true Name value 1 DisplayIf IsPropertyValid f
  • 当第三方 C 函数返回指针时,您应该自行释放它吗?

    有许多函数 特别是在 POSIX 库中 返回指向几乎必然新分配的数据的指针 他们的联机帮助页没有说明您是否应该释放它们 或者是否有一些模糊的机制在起作用 例如返回指向静态缓冲区的指针 或者类似的东西 例如 inet ntoa http ww
  • 使用 Graphics.CopyFromScreen 以 150% 缩放比例截取屏幕截图

    我正在尝试创建屏幕截图 位图 我写了这个函数 public static Bitmap CreateScreenshot Rectangle bounds var bmpScreenshot new Bitmap bounds Width
  • Spark应用程序启动后如何更改名称?

    我在更新 重新配置名为 spark 的预定义 Spark 上下文时遇到问题 spark sparkContext conf get spark app name 返回应用程序名称 Databricks Shell 我想更新它并尝试使用 sp
  • 如何将一周 (200851) 转换为日期 (2008-12-27)?

    如何将年周 例如 0852 或 200852 转换为日期 例如 2008 12 31 或具体的一周结束日 即星期六 2008 12 27 或一周开始日 即 2008 年 12 月 21 日 周末的任何一天都可以 周五 周六 周日或周一 SQ
  • 如何调整/dev/shm的大小?

    On Ubuntu 18 04 当我跑步时 df h 我看到这个结果 Filesystem Size Used Avail Use Mounted on tmpfs 3 9G 73M 3 8G 2 dev shm dev shm大小为3 9
  • 评估一串简单的数学表达式[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 Locked 这个问题及其答案是locked help locked posts因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 挑战
  • 创建一个随机数并检查它是奇数还是偶数

    我希望创建一个批处理文件 该文件在运行时创建一个从 0 到 100 的随机整数 然后通过 if 语句运行它来检查它是奇数还是偶数 我遇到了一些麻烦 所以这就是我到目前为止遇到的问题 echo off set a num random 100
  • 如何使用 Swift 中的协议公开 Objective-C 对象的私有类方法?

    考虑两个私有方法UIColor 实例方法styleString返回颜色的 RGB 字符串 类方法 systemDestructiveTintColor它返回破坏性按钮使用的红色 UIColor h 私有标头供参考 https github
  • ServiceStack:否/swagger-ui/index.html

    我正在将 ServiceStack 用于我的自定义服务 在没有 IIS 的独立模式下 我想为我的服务添加超出范围的文档 metadata做 我想尝试一下 Swagger 插件 我已将插件命令添加到我的配置中 public override
  • 存在类型表达式的 Skolem 化

    在 Scala 中 以下表达式会引发类型错误 val pair A gt String A forSome type A a Int gt a toString 19 pair 1 pair 2 正如中提到的SI 9899 https is
  • 在 C# < 4 中,如何根据参数的运行时类型分派到方法?

    我有一个对象o在运行时保证是三种类型之一A B or C 所有这些都实现了一个通用接口I 我可以控制I 但不是A B or C 因此 我可以使用空标记接口 或者以某种方式通过使用接口来利用类型中的相似性 但我无法添加新方法或更改类型中的现有
  • ash 文件的结构如何?

    我有一个使用 ash 的小型发行版 不是 busybox 我不确定如何处理点文件结构 ashrc 似乎没有被拾取 我也没有看到 bash profile 类似物 shell启动文件有默认约定吗 手册页的调用部分对此进行了介绍 profile
  • 数据字段中包含 SSD AID 的删除 APDU 命令,返回 6985

    我有一个包含 SSD 补充安全域 的 Javacard 我想删除它 通常 当我想从卡中删除小程序或包时 我会发送以下内容删除 APDU成功后命令相互认证过程 不需要 MAC 或数据字段加密 并且Security Level 0就足够了删除