SGP.02-嵌入式UICC的远程配置体系结构技术规范(v4.0第255页)特别指出:
函数调用方提供的数据格式不应取决于所选的OTA协议能力(例如,SM-DP可以认为数据长度没有限制)
和更高版本的
SM-SR有责任构建最终的命令脚本,取决于eUICC功能和所选协议:
通过添加用于确定或不确定长度的命令脚本模板,
并且,如果需要,通过将所提供的命令脚本分割成若干条
以及,如有必要,通过添加相关的脚本链接TLV。
我知道SM-DP可以向ES3.SendData
发送任意长的data
参数,如果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
。我只是错过了描述它的规格。
-
eUICC的内部缓冲区有限,即无法在内部存储10kb或更大的完整配置文件包。必须对邮件进行分块处理。如果eUICC只支持例如1kb,那么您必须在最多3个APDU命令之后拆分APDU命令才能保持在1kb以下。SGP.02规范定义为至少具有1024个字节。功能齐全的SM-SR可能会在EID中存储一些基于eUICC供应商的属性,为某些eUICC添加特殊处理和补丁,以支持更大的缓冲区大小。
-
将每个APDU块(1..n APDU)编码为扩展的远程命令格式(ETSI TS 102 226,第5.2.1节)(紧凑格式只能对最后一个APDU有一个响应,但如果它有效,您可以保存几个字节)
-
将每个扩展的远程命令消息编码为SMS-DELIVER(TS 123 048和simalliance Interoperability Stepping Stones release 6)这包括使用OTA密钥(KiC、KID)进行数据加密。gsm0348是一个很好的Java库。注意:对于每条消息,OTA计数器必须递增。选择一个参考号,并为所有邮件保留该参考号。我想这就是eUICC如何知道哪些消息属于一起的标识符。
-
如果使用SMS(我建议改用CAT-TP或HTTPs->更快、更可靠),则将其编码为SMS-PP下载消息(TS 131 111)。如果有效负载超过140字节,您将在此处使用消息串联。
-
您将收到一条SendShortMessage(TS 131 111,6.4.10)作为响应。使用TS 123 048和simalliance Interoperability Stepping Stones release 6再次提取用户数据。您将收到SMS响应消息。查看响应数据包以获取用户数据。
-
提取用户数据作为扩展远程响应(ETSI TS 102 226)
eUICC将处理流式消息。连接的短消息仅用于在传输期间属于一起的消息块。
详细解释分段和脚本链接如何工作的最佳规范是SGP.11嵌入式UICC测试规范的远程配置架构。
它本身没有要求,但它有传入ES3.SendData
的字节级示例和eUICC接收到的消息的示例。这样就可以很容易地推断出SM-SR的实际行为。
这里有更详细的解释,并参考了该规范。
命令脚本
命令脚本是在ES3.SendData的数据字段中发送的命令列表。它可以是(参见SGP.02-v4.0表150中的data
字段描述):
-
C-APDU命令列表(在SGP.11-v4.0第595页的
EXPANDED_COMMANDS
方法中定义,并在SGP.11v4.0第407页的步骤2中使用) -
形成SCP03t脚本的TLV命令(在SGP.11-v4.0第600页的
SCP03T_SCRIPT
方法中定义,并在SGP.11v4.0第408页的步骤14中使用)
脚本链接
当需要执行在多个传输消息中发送的多个命令,但在执行第一个命令并用于下一个命令后需要保留执行的某些上下文时(例如,第一个命令是INSTALL [for personalization]
,第二个是STORE DATA
),脚本链接是使用的功能。此上下文是TS 102 226第4节中定义的命令会话。
这至少在这些情况下使用(SGP.02中的附录K也支持这一点):
-
当后续命令基于eUICC 的响应时
-
当命令脚本太大,无法在一个中发送时
脚本链接由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
)。
显式链接似乎仅适用于SMS
或CAT_TP
传输。对于HTTPS
,命令会话与HTTP远程应用程序管理–Public Release v1.1.3第3.6节中定义的管理会话一致,因此无需添加显式脚本链接TLV。
分段
当命令脚本太大并且无法在一个片段中发送时,SMSR会生成多个命令脚本。SMSR从SMDPCMD1
、CMD2
、…、CMDN
接收的命令(参见SGP.11-v4.0第408页的步骤14)以及形成命令脚本的命令被划分为若干命令脚本。第一个包含命令CMD1
、CMD2
、…、CMDi
的一些初始部分。第二个命令脚本包含命令CMDi+1
、CMDi+2
、…、CMDj
。第三种是CMDj+1
、…、CMDk
等
如果使用SMS
或CAT_TP
,则对于每个命令,都会在开头添加一个具有适当值的链式TLV(参见SGP.11-v4.0中的4.2.18.2.1.1节)。
然后,每个新的命令脚本都会在一条单独的消息中发送到eUICC。