GPC_APDU_Transport_over_SPI-I2C_v1.0_PublicRelease.pdf
目录
1 简介
越来越多的设备,如移动设备、可穿戴设备或其他 IoT(物联网)设备现在正在使用焊接安全元件 (SE)。 这产生了支持 SPI 或 I2C 等物理接口的新需求,以代替以前的 ISO/IEC 7816-3 层。 本规范描述了 APDU(如 [7816-3] 中定义的)如何通过这些替代物理接口传输。 这种新协议允许传输更长的有效载荷,旨在适应底层物理接口的特定功能。
1.1
本规范主要用于:
• 希望将安全元件嵌入到他们的解决方案中的设备制造商。
• 希望通过其产品中的替代物理接口支持 APDU 传输的 Secure Element OS 开发人员。 假设读者熟悉 ISO/IEC 7816-3 T=1 智能卡协议
Data Link Layer
管理物理接口上可靠的点对点数据传输的协议层。 它提供数据流控制和纠错。 它确保传入的数据既不会丢失也不会损坏,也不会以错误的顺序接收。
2 概述
本文档指定如何在主机设备 (HD) 和安全元件 (SE) 之间传输 APDU
使用基于 [SPI] 或 [I2C] 的串行物理接口,这些接口在行业中非常常用于连接电子元件。
第 3 节描述了为访问物理接口而应实现的物理层。
第 4 节描述了用于传输 APDU 命令和响应的数据链路层(在物理层上实现)。
第 5 节描述了 SE 可以进入省电模式的条件
3 物理接口
3.1 SPI接口
3.1.1 说明
[SPI] 中描述的串行外设接口 (SPI) 是一种同步串行数据链路,可提供全双工通信。 设备以主/从模式通信,主机通过发送数据启动通信,而从机能够同时发送数据。 然而,在本规范中,SPI 接口仅用于半双工通信。 尽管可能存在多个从设备,每个设备都使用自己单独的从选择线 (SS),但本规范仅描述了一个主设备和一个从设备之间的通信; 主机设备 (HD) 充当主设备,安全元件 (SE) 充当从设备。
3.1.2 物理层
SPI 总线指定了四种强制性物理信号/线:
• SCL 线:串行时钟(从 HD 输出)
• MOSI 线:Master Out / Slave In(HD 输出)
• MISO 线路:Master In / Slave Out(从 SE 输出)
• SS线:Slave Select(低电平有效,HD输出)
可以使用可选的 SPI-IRQ 物理线路。
如果存在,SE 可以使用 SPI-IRQ 线来通知 HD 它已准备好发送数据,这是必需的,因为只有 HD(主设备)可以启动通信。 如果 SPI-IRQ 线不可用,HD 可能会轮询 SE 以获取传入数据。 有关详细信息,请参阅第 3.1.5 节。
3.1.2.1 信号约定
SPI 通信应使用“模式 0”配置,如下所述:
• SPI 时钟极性位(CPOL) 应为0(非反相时钟),这意味着时钟的空闲状态为低并且触发在上升时钟信号(选择高电平有效时钟)时启动。
• SPI 时钟相位位(CPHA) 应为0,这意味着数据采样发生在SCL 信号的上升时钟信号上。 数据信号设置在片选和下降时钟信号。
• SCL 频率不得超过CIP 定义的最大时钟频率(MCF)(参见第4.3 节)。 如果 HD 不知道使用哪个 MCF(例如尚未检索到 CIP),则应使用第 3.1.7 节中定义的默认最大时钟频率(DMCF)。
• 在单个SPI 访问期间通过MOSI 或MISO 信号传输的位数应为8 的倍数。
• 最高有效位 (msb) 应首先发送
3.1.2.2 数据传输
只有 HD 可以发起数据传输,并且在与 SE 交换数据之前它应该选择 SE,即 HD 应该下拉 SS 线并在 SCL 线上提供适当的时钟信号。
当HD需要向SE发送数据时,它应该在MOSI线上提供,而可以忽略在MISO线上接收到的数据。 反之,当HD需要从SE接收数据时,需要在MOSI线上提供填充字节,并在MISO线上读取接收到的数据。
当SE需要向HD发送数据时,它应该在MISO线上提供,并可以忽略在MOSI线上接收到的数据。 反之,当SE需要从HD接收数据时,需要在MISO线上提供填充字节,并在MOSI线上读取接收到的数据。
一旦所有数据都按预期交换完毕,HD 将停止时钟信号并取消选择 SE。 上述规则如图 3-2 所示,其中:
• “msb”表示传输数据第一个字节的最高有效位的位置。
• “lsb”显示最后一个字节的最低有效位的位置。
• “tSS”是在启动时钟信号和传输数据的第一位之前主机在断言SS 线后应等待的最短时间。 它的值超出了本规范的范围。
• “tDS”是主机在数据的最后一位传输后取消断言 SS 线(即取消选择从机)之前应等待的最短时间。 它的值超出了本规范的范围。
3.1.2.3 数据碎片/SPI 碎片
SPI 总线用于传输定义了数据流控制的数据链路层模块(参见第 4 节)。 但是,第一级数据流控制是通过交换所谓的 SPI 片段在物理层实现的。 一个数据块可能被分割成多个 SPI 片段。 数据的分段将取决于需要交换的数据的大小和 SE 访问长度 (SEAL)。
当 HD 需要与 SE 交换数据(发送或接收)并且此类数据的长度超过 SEAL 字节时,HD 应分片和交换数据,以便每次 SPI 访问期间传送的字节数不超过 SEAL 的最大值 字节(在每个方向)。 HD 应该最大化每个 SPI 访问传输的字节数,以最小化 SPI 访问的数量。 此外,HD 应在两次连续的 SPI 访问之间暂停一段 SE 保护时间 (SEGT)。 这个过程如图 3-3 所示。
3.1.2.4 半双工使用
尽管 SPI 总线允许全双工模式操作,但本规范不使用此类功能,有意义的信息仅由数据链路层以半双工模式(见第 4 节)进行通信,这意味着 HD 和 SE 仅预期 交替发送数据链路层块。
3.1.3 激活顺序
在 SE 上电后,HD 在启动与 SE 的任何通信之前应等待电源唤醒时间 (PWT) 的持续时间。 当发起与 SE 的通信时,HD 应确保 SE 已准备好按照 3.1.4 节中描述的程序接收数据。
HD 然后可以检索 CIP(参见第 4.3 节)。 如果从未检索到 CIP 和/或 HD 不知道可以使用哪些参数值,则 HD 应使用第 3.1.7 节中定义的默认值(例如默认 PWT、默认 SEAL 等)。 否则,它可以使用先前从 CIP 读取的参数值。 HD 应根据 CIP 指定的参数调整其行为。
3.1.4 检测SE准备接收数据
SE 可能决定进入省电模式以节省电池(通常是主机设备电池),在这种情况下它将无法接收数据。 SE 实现可能进入省电模式的条件在第 5 节中描述。当 HD 希望发送数据并认为 SE 可能已进入省电模式时,它应首先确保 SE 已准备好接收数据。 为此,HD 应应用所谓的唤醒程序。 下面介绍两种唤醒程序; 然而,本规范承认在某些环境中可能无法实施这些过程这一事实。 因此,允许使用专有唤醒程序(HD 和 SE 都知道)。
• 唤醒程序 1(又名 SS-WUT-SCL):
在应用时钟信号 (SCL) 和发送数据之前,HD 应断言 SS 线并等待 WUT(或 DWUT)的持续时间。在此过程中,SS 线用作唤醒 SE 的中断线,等待 WUT 为 SE 提供足够的时间来唤醒并准备好接收数据。 为获得最佳性能,HD 应在 WUT 之后立即开始发送数据。 但是,它可以安全地等待更长时间; 保持 SS 线路断言可防止 SE 返回省电模式。
• 唤醒程序 2(又名 NB-WUT):
HD 应发送一个空字节(使用 3.1.2.2 节中描述的程序,即以取消选择 SE 结束),然后在发送任何重要数据之前等待 WUT(或 DWUT)的持续时间。 当 SE 检测到它在唤醒后第一次被取消选择时,它应该丢弃之前在 MOSI 线上接收到的任何数据。
在此过程中,等待 WUT 为 SE 提供了足够的时间来唤醒并准备好接收数据,并且取消选择指示 SE 丢弃最初在 MOSI 线上接收到的任何非重要数据。 请注意,为防止 SE 返回省电模式(参见第 5 节),HD 应注意不要等待太久。
此外,当 SE 期望一个新的数据链路层块(见第 4 节)而不是接收单个空字节时,SE 将简单地丢弃该空字节并等待进一步的传入数据。 需要此行为来处理 HD 错误地将 SE 评估为处于省电模式并不必要地应用唤醒程序的情况。
为支持上述程序,唤醒时间 (WUT) 被定义为 CIP 的一部分(参见第 4.3.3 节),默认 WUT (DWUT) 在第 3.1.7 节中定义。 如果实施专有唤醒程序,则 CIP 中的 WUT 可能会被忽略或用于其他含义。
3.1.5 检测SE准备发送数据
为检测 SE 已准备好发送数据并启动此类数据的检索,HD 物理层应使用以下部分中描述的机制之一。 由于此类机制对应于不同的硬件架构,因此选择使用一种或另一种是隐含的(即 HD 隐含地知道使用哪个)
3.1.5.1 轮询机制
当HD和SE设计为使用轮询机制时,HD应轮询SE以获取可用数据。 为此,它应首先决定轮询时间 (POT),该时间应大于 CIP 传送的 MPOT。 然后,当需要一些响应数据时,HD 将按如下方式轮询 SE:
• HD 应声明 SS 线,在 SCL 线上应用时钟,并发送一个空字节以尝试从 SE 接收第一个有意义的字节(即数据链路层块的有效第一个字节)。
• 如果从SE 接收到一个空字节,HD 将解除断言SS 线,等待POT 持续时间,然后再次尝试发送一个空字节。 HD 应重复此过程,直到它从 SE 接收到有意义的字节(见下文)或直到 HD 数据链路层确定超时已发生。
• 如果从SE 接收到一个有意义的字节,HD 可以立即继续接收剩余的块数据,或者可以解除断言SS 线,然后应用3.1.2.2 节中描述的过程来接收剩余的块数据。
3.1.5.2 中断机制
当 HD 和 SE 设计为使用中断机制时,专用 SPI-IRQ 线应在响应数据可用时由 SE 断言。 应实施电平敏感机制,其中应通过将 SPI-IRQ 线设置为有效高电压电平来触发中断。 一旦 SS 线被 HD 断言,SE 应立即清除中断。
为防止通信错误:
• SE 应仅在一致数据实际准备好发送时断言SPI-IRQ 线,即当有意义数据的SEAL 字节或比SEAL 字节短的完整数据链路层块准备好发送时。
• 如果 SPI-IRQ 线有效,HD 不应尝试发送新的命令数据
3.1.6 从 SE 接收数据
因为从 SE 接收数据只能由 HD(主设备)发起和驱动,所以 HD 需要知道应该从 SE 检索的数据的大小。 这个问题通过以下事实得到解决:当 HD 检测到 SE 准备好发送数据时(参见第 3.1.5 节),HD 然后仅从 SE 接收数据链路层块(参见第 4 节)并且 从该块的序言字段,HD 可以了解应接收多少数据。
注:当使用3.1.5.1节描述的轮询机制检测SE准备发送数据时,SE返回的第一个有效(非空)字节表示轮询过程结束,是第一个字节 SE 打算发送的数据链路层块。 当使用中断机制时,HD还没有接收到任何字节并且应该检索整个数据链路层块。
注意:数据传输和通信性能可以通过让 HD 始终立即不仅检索数据链路层块的序言字段而且检索常见的短块大小(例如 6 字节)来优化。 如果 HD 试图检索比 SE 可用的数据更多的数据,HD 应该只接收额外的填充字节(SPI 实现中的常见行为),如果 HD 收到一个不完整的块,它可能会使用额外的 SPI 访问来检索丢失的数据 .
4 数据链路层
数据链路层使用第 3 节中描述的物理层之一在 HD 和 SE 之间传输数据块。 此类块只能由 HD 和 SE 交替发送(即半双工通信),并且可以传送应用数据或传输控制数据。 数据链路层应实现的协议与[7816-3]中描述的T=1协议非常相似,因此简称为T=1'。
4.1 T=1'协议
T=1' 协议建立在 [7816-3] 中描述的 T=1 协议之上,具有以下差异:
• 一般的块结构是相同的,除了序言的LEN 字段,它被编码在2 个字节上。
• 为NAD 字段的值定义了附加规则。
• 2 字节CRC 保留为唯一的EDC 算法,应该使用。
• S(IFS xxx) 块可能包含按 1 或 2 个字节编码的值。
• 定义了额外的S-Block(详见4.2.2 节)。
• 定义了默认的 IFSC 值 8,HD 在不知道 IFSC 时应使用该值。 这个默认值足够大,HD 可以发送一个 S(CIP 请求)块,HD 可能想要这样做,以便发现更合适的 IFSC 值。
• 定义了默认的 IFSD 值 64,如果 SE 不知道 IFSD,则应使用它。 此默认值与最大 CIP 长度兼容。 HD 可以发送一个 S(IFS 请求)块来为通信的其余部分声明一个更合适的 IFSD 值。
• 不假设是否存在物理复位机制(例如冷复位或热复位)。 仅定义了软件复位,可以使用新的 S(SWR xxx) 块请求。 可能需要和使用物理机制的情况超出了本规范的范围。
在第 4.2 节中给出了更多解释。
[7816-3] 第 11.6.2.3 节中描述的无差错操作规则和 [7816-3] 附件 A.2 中描述的示例场景仍然适用。 [7816-3] 第 11.6.3 节中描述的错误处理规则和 [7816-3] 附件 A.3 中描述的示例场景仍然适用。 但是请注意,当 [7816-3] 建议执行“热重置”时,T=1' 协议应该尝试交换 S(SWR xxx) 块(参见第 4.2.2 节)。
4.2 块格式
T=1'协议使用的通用块结构与[7816-3]中描述的T=1协议相同; 然而,LEN 字段编码为 2 个字节,如表 4-1 所示。
LEN 和 CRC 字段应首先发送其最高有效字节(即大端顺序)。
例如,传输 14 字节 APDU 命令(包括 Le 字段)并具有 0xBDA4 的 CRC 值的块将按照表 4-2 中的指示进行编码。 (注意:NAD 和 PCB 值可能会有所不同,CRC 值也会相应变化。)
4.2.1 Node Address Byte (NAD) Field Format
NAD 字段指定块的源和预期目的地
以下规则适用于 NAD 值的编码:
• HD 和SE 应分配不同的地址,因此DAD 和SAD 值永远不会相同。
• 为了便于检测 NAD 字节(即块的开始与非重要字节),地址 0000b 和 1111b 是禁止的,因此对于 DAD 和 SAD 也是禁止的。
• 如果SE 知道它自己的地址和/或HD 的地址,那么它可以检查DAD 和/或SAD 值,如果其中任何一个无效则决定拒绝该块。
• 如果 SE 不知道自己的地址,那么为了构建传出块的 NAD 值,SE 应重新使用并反转从 HD 接收的最后一个块的 DAD 和 SAD 值。
对于涉及单个主机和单个从机的配置,本规范建议使用以下地址:
• 0001b:主机设备(HD)
• 0010b:安全元件 (SE)
4.2.2 Protocol Control Byte (PCB) Field Format
4.2.2 协议控制字节 (PCB) 字段格式
PCB 字段定义块的类型并包括传输控制数据。
T=1' 协议引入了以下新的块类型:
• S(CIP request):请求SE返回CIP。
• S(CIP 响应):回答包含CIP 的S(CIP 请求)块(参见第4.3 节)。
• S(RELEASE request):释放SE,即HD表示此时不介意SE进入省电模式。 有关详细信息,请参阅第 5 节。
• S(RELEASE 响应):确认一个S(RELEASE 请求)块。
• S(SWR 请求):请求SE 执行通信接口的软件复位。 发送此请求时,HD 还重置 N(S) 位并丢弃任何块链接信息。 SE 对该请求的确切解释超出了范围。
• S(SWR 响应):软件复位后确认S(SWR 请求)块。
PCB 域的编码如表 4-4 所示。
4.2.3 长度(LEN)字段格式
LEN 字段编码块的 INF 字段的长度。
以下值应被接收方视为无效:
• 超过接收器当前 IFS 值的值(即 SE 的 IFSC、HD 的 IFSD)
• 超出“0FF9”的值 (4089)(请参阅第 4.2.5 节中的解释)
4.2.4 信息(INF)字段格式
INF 字段的内容取决于块类型。
对于 S(IFS 请求)块的 INF 字段:
• 从'01' 到'FE' 的值应在1 个字节上编码。
• 从'00FF' 到'0FF9' (4089) 的值应按2 个字节编码(MSB 在前)。
• 超出“0FF9”(4089) 的值无效(请参阅第 4.2.5 节中的详细信息)
4.2.5 结语字段格式
Epilogue 字段传达块的错误检测代码。 在此版本的规范中,将使用 2 字节的 CRC。 请注意,这样的 CRC 只能有效地保护 (2^15 - 1) 位(包括其自身)免受 1、2 和 3 位损坏。 因此,此协议中 INF 字段的大小限制为最大值“0FF9”(4089)字节
4.3 通讯接口参数
CIP 包含 HD 用于与 SE 通信的通信接口参数(即物理层和数据链路层参数)以及历史字节。 为了检索 CIP,HD 应发送一个 S(CIP 请求)块(参见第 4.2 节)并接收一个包含以下部分中描述的 CIP 结构的 S(CIP 响应)块。 可以随时使用此过程(尽管更希望在开机时或软件重置后使用)。 在以下部分中,所有数值都编码为无符号整数
4.3.1 CIP——通用结构
本节介绍 CIP 的通用结构,与使用的物理层无关。
物理层参数
描述 SPI 物理层的数据,如表 4-8 中所定义,或者
描述 I2C 物理层的数据,如表 4-9 中所定义。
在这个版本的协议中,CIP 结构的总长度不得大于 64 字节。
注意:此要求与第 4.1 节中定义的默认 IFSD 值兼容
4.3.2 CIP – Specific Parameters for Data Link Layer
This section describes the parameters provided by the CIP for the Data Link Layer.
如果 HD 不知道要使用哪个 BWT 值(例如,尚未检索到 CIP),它应使用 300ms 的默认 BWT 值(DBWT)。
注意:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在数据链路层参数的末尾 并忽略这些数据
4.3.3 CIP – Specific Parameters for SPI Physical Layer
This section describes the parameters provided by the CIP when the SPI Physical Layer is used
4.3.3 CIP——SPI 物理层的特定参数
本节介绍使用SPI物理层时CIP提供的参数
注 1:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在物理层参数的末尾 并忽略此类数据。
注 2:参见第 3.1.5 节。 如果不使用轮询机制,则 MPOT 应设置为“00”。
注 3:参见第 3.1.2.3 节。 设置为“FFFF”的 SEAL 值应被解释为 SE 利用直接内存访问 (DMA),这意味着 HD 可以在每次 SPI 访问时虚拟地发送任何数量的数据。 在这种情况下,SE 可以相应地指示适当的 SEGT 值。
4.3.4 CIP – Specific Parameters for I2C Physical Layer
This section describes the parameters provided by the CIP when the I2C Physical Layer is used.
4.3.4 CIP——I2C 物理层的特定参数
本节介绍使用 I2C 物理层时 CIP 提供的参数。
注意:为了与更高版本的协议(如果将来有定义)实现一定程度的兼容性,HD 实现应接受更多数据(上表中未描述)出现在物理层参数的末尾和 忽略此类数据。
5 Power Saving Policy
SE 可以决定进入省电模式以节省电池(通常是主机设备电池)。 SE 实现进入这种模式的条件通常取决于定义有关性能、可用性、电池节省等要求的高级应用用例。因为可能无法捕获一组适合所有使用的此类条件 在某些情况下,本规范承认特定 SE 实现可能会根据专有策略决定进入省电模式这一事实。 然而,本文档为 SE 指定了以下可互操作的策略:
• SE 只能进入省电模式:
o 在收到 S(RELEASE 请求)块(参见第 4.2.2 节)并返回相应的 S(RELEASE 响应)块之后,或者
o 如果 HD 在以下任何事件后没有发送任何新的数据链路层块,则超时后:
启动完成(上电时)
SE 返回了一个 R-block 或 S-block(包括 S(SWR response))。
SE 返回一个 I-block 完成发送 APDU 响应(如果使用 APDU 链接,则返回链的最后一个 APDU 响应)。
虽然此政策保证 SE 仅在满足上述条件之一时才会进入省电模式,但出于其他专有原因,SE 可能会选择不这样做(即即使满足上述条件)。
请注意,如果超时适用(见下文),HD 可能会选择在达到超时之前发送 S(RELEASE 请求)块,即为 SE 提供更早进入省电模式的机会。
• SE 应指示适用的节能超时值(PST) 作为CIP 的一部分(参见第4.3 节)。
o 如果超时值设置为“00”,则 SE 表示它实际上可以随时进入省电模式。 实施专有政策的 SE 应指示此值。 假设 HD 实现知道并可以调整其行为以适应这种专有策略。
o 如果超时值设置为“FF”,则 SE 表示它不使用此超时值,因此只能在收到 S(RELEASE 请求)块时进入省电模式。
o 任何其他值(从“01”到“FE”)应理解为有效的超时值。 请注意,HD 在测量超时时应应用一些余量。
上电后,如果 HD 期望 SE 执行上述互操作策略并且不知道适用的超时值(例如,尚未检索到 CIP),则它应假定 SE 可能已经进入省电模式。
假定,如果 SE 实施专有的节电策略(或仅根据上述可互操作策略部分运行),HD 将对此类专有策略有足够的了解以调整其自身的行为。
请注意,假设进入或退出省电模式对数据链路层的通信参数(例如 N(S) 位、M 位、N(R) 位)没有影响。