如何分割太大而无法放入一个传输 APDU 的命令脚本

如何解决如何分割太大而无法放入一个传输 APDU 的命令脚本

SGP.02 - 嵌入式 UICC 技术规范的远程供应架构(特别是 v4.0 的第 255 页)说:

函数调用者提供的数据格式SHALL NOT依赖于选择的OTA协议能力(例如SM-DP可以考虑没有数据长度限制)

以后

SM-SR 负责构建最终的命令脚本, 取决于 eUICC 功能和所选协议:

  • 通过添加确定或不确定长度的命令脚本模板,

  • 如有必要,将提供的命令脚本分成几部分

  • 并在必要时添加相关的脚本链接 TLV。

据我所知,SM-DP 可以向 data 发送任意长的 ES3.SendData 参数,如果 data 太大而无法放入一个,SM-SR 应该在多个 SMS 中发送多个 APDU .这就是 segmenting 的意思。

问题是我找不到定义应该如何进行分段的相关规范。这就是问题所在:细分流程在哪里定义?

我可能错了,但它似乎与 ETSI TS 123 048 的第 6.3 节中描述的连接短消息不同。

似乎在 ETSI TS 102 226 中简要提到的脚本链接有些相关,因此也非常欢迎指向定义其工作原理的规范的指针(TS 102 226 谈论脚本链接 TLV,但没有讨论如何使用它们,在至少我肯定会遗漏一些更广泛的背景知识,它是如何工作的,因此任何提示都值得赞赏)。

更新:

ES8.EstablishISDPKeySet 函数需要发送 3 个 APDU。它们非常大,因为它们包含密钥。从 SGP.02-v4.0 表 150 我了解到它们是使用扩展远程命令格式从 SM-DP 发送到 SM-SR 的。据我所知,这种格式的脚本可能相当大(假设 SM-DP 可以假设数据长度没有限制)。并且不清楚 SM-SR 应该如何segment 它或使用 chaining。我只是缺少描述此内容的规范。

解决方法

  1. eUICC 的内部缓冲区有限,即它无法在内部存储 10kb 或更大的完整配置文件包。消息必须分块。如果 eUICC 仅支持例如1 kb 那么你必须在最多 3 个 APDU 命令后拆分 APDU 命令以保持在 1kb 以下。 SGP.02 规范定义至少有 1024 个字节。功能齐全的 SM-SR 可能会根据 eUICC 供应商在 EID 中存储一些属性,以便为某些 eUICC 添加特殊处理和补丁以支持更大的缓冲区大小。

  2. 将每个 APDU 块(1..n 个 APDU)编码为扩展远程命令格式(ETSI TS 102 226,第 5.2.1 节)(紧凑格式只能对最后一个 APDU 有一个响应,但如果它有效,你可以节省几个字节)

  3. 将每个扩展远程命令消息编码为 SMS-DELIVER(TS 123 048 和 simalliance 互操作性垫脚石第 6 版)这包括使用 OTA 密钥(KiC、KID)的数据加密。 gsm0348 是一个很好的 Java 库。注意:对于每条消息,OTA 计数器必须递增。选择一个参考编号并为所有消息保留该编号。我猜这是 eUICC 如何知道哪些消息属于一起的标识符。

  4. 如果使用 SMS(我建议改用 CAT-TP 或 HTTPs -> 更快更可靠)将其编码为 SMS-PP 下载消息 (TS 131 111)。如果有效负载超过 140 字节,您将在此处使用消息连接。

  5. 您将收到作为响应的 SendShortMessage (TS 131 111,6.4.10)。使用 TS 123 048 和 simalliance Interoperability Stepping Stones 版本 6 再次提取用户数据。您将收到 SMS 响应消息。查看响应包以获取用户数据。

  6. 将用户数据提取为扩展远程响应 (ETSI TS 102 226)

eUICC 将处理流式消息。串接后的短消息仅用于在传输过程中属于一起的消息块。

,

详细解释分段和脚本链如何工作的最佳规范是 SGP.11 嵌入式 UICC 测试规范的远程供应架构

它本身没有要求,但它具有传入 ES3.SendData 的字节级示例和 eUICC 接收的消息示例。这可以很容易地推断出 SM-SR 的实际行为。

这里有更详细的解释,并参考了该规范。

命令脚本

命令脚本是在 ES3.SendData 的数据字段中发送的命令列表。它可以是(参见 SGP.02-v4.0 表 150 中的 data 字段说明):

  1. C-APDU 命令列表(在 SGP.11-v4.0 第 595 页的 EXPANDED_COMMANDS 方法中定义,并在 SGP.11-v4.0 第 407 页的步骤 2 中使用)

  2. 形成 SCP03t 脚本的 TLV 命令(在 SGP.11-v4.0 第 600 页的 SCP03T_SCRIPT 方法中定义,并在 SGP.11-v4.0 第 408 页的步骤 14 中使用)

脚本链

脚本链是当需要执行在多个传输消息中发送的多个命令,但在执行第一个命令后需要保留执行的某些上下文并用于下一个命令(例如第一个命令是 INSTALL [for personalization],第二个是 STORE DATA)。此上下文是 TS 102 226 的第 4 节中定义的命令会话。

这至少在这些情况下使用(SGP.02 中的附件 K 也支持):

  1. 当后续命令基于来自 eUICC 的响应时

  2. 当命令脚本太大而无法一次发送时

脚本链接由 SM-SR 执行,通过将脚本链接 TLV 添加到扩展远程格式的命令脚本来实现。请参阅 TS 102 226 中的第 5.4.1.2 节。

脚本链接的示例可以在 SGP.11-v4.0 中找到。

对于第一种情况,请参阅第 4.2.10.2.1.1 节中 EstablishISDRKeyset 过程的方案。对于第二种情况,请参阅第 4.2.18.2.1.1 节中 DownloadAndInstallation 过程的方案。脚本链接的字节级表示在第 601 页的 SCP80_PACKET 方法中进行了描述(请参阅选项 CHAINING_OPT)。

似乎显式链接仅适用于 SMSCAT_TP 传输。对于 HTTPS,命令会话与基于 HTTP 的远程应用管理 – 公开发布 v1.1.3 的第 3.6 节中定义的管理会话一致,因此不需要添加显式脚本链接 TLV。

细分

当命令脚本过大且无法一次性发送时,SMSR 会生成多个命令脚本。 SMSR 从 SMDP CMD1,CMD2,...,CMDN(参见 SGP.11-v4.0 第 408 页的步骤 14)接收并形成命令脚本的命令被拆分成几个命令脚本。第一个包含命令 CMD1,CMDi 的一些初始部分。第二个命令脚本包含命令 CMDi+1CMDi+2、...、CMDj。第三个 CMDj+1,CMDk 等等。

如果使用了 SMSCAT_TP,那么对于每个命令,一个链接 TLV 被添加到具有适当值的开头(参见 SGP.11-v4.0 中的第 4.2.18.2.1.1 节) .

然后每个新的命令脚本都会在单独的消息中发送到 eUICC。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?