其他分享
首页 > 其他分享> > 命令-响应对的传输(译自ISO7816-3)

命令-响应对的传输(译自ISO7816-3)

作者:互联网

12 命令-响应对的传输

12.1 应用协议数据单元

12.1.1 命令-响应对

应用协议数据单元是命令 APDU 或响应 APDU。 应用协议中的一个步骤包括传输命令 APDU、在接收实体中处理它并返回响应 APDU。 这对 APDU 称为命令-响应对。

如图 24 所示,本文档中定义的每个命令 APDU 包括

图 24 — 命令 APDU 结构

如图 25 所示,本文档中定义的每个响应 APDU 包括

图 25 — 响应 APDU 结构

命令头和响应尾的值应符合 ISO/IEC 7816-4 的规定。 如果该过程中止,则卡可能会变得无响应。 然而,如果响应 APDU 发生,则响应主体将不存在并且 SW1 SW2 将指示错误。

12.1.2 命令-响应对中的数据字段

每个命令-响应对可以携带命令数据字段和/或响应数据字段。

在 case 1 中,Nc = Nr = 0。命令 APDU 由头组成; Lc 字段、命令数据字段和 Le 字段不存在。 响应 APDU 由尾部组成; 响应数据字段不存在。

在 case 2 中,Nc = 0 且 Nr ≠ 0。命令 APDU 由头部和 Le 字段组成; Lc 字段和命令数据字段不存在。 响应 APDU 由响应数据字段和尾部组成。

在 case 3 中,Nc ≠ 0且 Nr = 0。命令APDU由头部、Lc字段和命令数据字段组成; Le 字段不存在。 响应 APDU 由尾部组成; 响应数据字段不存在。

在 case 4 中,Nc ≠ 0 且 Nr ≠ 0。命令 APDU 由报头、Lc 字段、命令数据字段和 Le 字段组成。 响应 APDU 由响应数据字段和尾部组成。

表 12 总结了命令-响应对的四种可能情况。

表 12 — 命令-响应对中的数据字段

图 26 显示了根据前四种情况的命令 APDU 的四种结构。

图 26 - 命令 APDU 的四种结构

因此,在任何命令-响应对中,命令 APDU 中没有 Le 字段是在响应 APDU 中不接收响应数据字段的标准方式。

12.1.3 命令 APDU 的解码约定

图 27 将命令 APDU 图示为一串 n 字节。 报头由前四个字节组成,即 CLA INS P1 P2。 主体由所有后续字节组成,即 C(5) 到 C(n)(如果有)。

图 27 — 命令 APDU 作为字节串

表 13 根据七种情况总结了命令 APDU 解码。

表 13 — 命令 APDU 解码

case 1、2S、3S 和 4S 适用于所有卡。 case 2E、3E 和 4E 也适用于明确说明其处理扩展长度字段能力的卡(卡能力应按照 ISO/IEC 7816-4 中的规定)。

12.2 T=0命令响应对传输

12.2.1 总则

本节根据需要使用 GET RESPONSE 和 ENVELOPE 命令(参见 ISO/IEC 7816-4)通过 T=0 定义应用协议数据单元(APDU)到传输协议数据单元(TPDU)的映射。 例如,case 4S 的命令-响应对被处理为两个连续的命令和响应 TPDU 对:第二个命令 TPDU 是 GET RESPONSE 命令。 表 14 总结了此后用于映射的某些响应尾值(参见 ISO/IEC 7816-4)。

表 14 — 下文中用于通过协议 T=0 进行映射的响应尾值

SW1 SW2
意义
‘9000’ 过程正常完成。 在 case 1、2 和 3 下,无需进一步操作。在 case 4 中,在收到 Nc 命令数据字节后,卡应准备好接收至少一个 GET RESPONSE 命令,用于传输最多 Ne 响应数据字节。
‘61XY’ 过程正常完成(SW2 编码 Nx,即仍然可用的额外数据字节数)。 在 case 1 和 3 中,卡片不应使用这样的值。 在 case 2 和 4 中,为了传输响应数据字节,卡应准备好接收 GET RESPONSE 命令,并将 P3 设置为 Nx 和 Ne 的最小值。
‘62XY’ 过程已完成,但有警告。 在 case 1 下,没有进一步的操作。 在 case 2、3 和 4 中,如果在传输所有命令和/或响应数据字节之前出现警告指示,则过程继续(例如,用于传输响应数据字节的 GET RESPONSE 命令),或者警告指示引发另一个命令 (例如,'6202' 到 '6280',用于传输卡源字节串的 GET DATA 命令,参见 ISO/IEC 7816-4)。 因此,卡不应该使用这样的值,直到最后一个响应 TPDU(见下文)。
‘63XY’
‘6700’ 由于长度错误,进程中止。 没有进一步的行动。
‘6CXY’ 由于 Le 字段错误(SW2 编码 Na,即可用数据字节的确切数量),进程中止。 在 case 1 和 3 中,卡片不应使用这样的值。 在 case 2 和 4 中,卡应准备好接收与 P3 = SW2 相同的命令。
‘6D00’ 由于无效或不受支持的指令代码,进程中止。 没有进一步的行动。

可以链接连续的行业间命令-响应对:第一个命令 APDU 中的 CLA = 0xx1 xxxx 到倒数第二个命令中的 CLA = 0xx1 xxxx,最后一个命令中的 CLA = 0xx0 xxxx; 其他六位在链中保持不变(链接应按照 ISO/IEC 7816-4 中的规定)。

在 case 4S、2E、3E 和 4E 下,如果卡支持命令链(参见 ISO/IEC 7816-4),那么对于任何具有 CLA = 0xx0 xxxx 的行业间命令-响应对,无论第 5 位在前一个 CLA 中, 上述规则应在适当的情况下适用。 因此,命令链允许卡知道命令 TPDU 是否是最后一个,以便在最后一个响应 TPDU 之前不使用警告指示。

12.2.2 Case 1

命令 APDU 被映射到命令 TPDU 上,P3 = '00'。

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

12.2.3 Case 2S

短 Le 字段由一个字节组成:C(5) 具有用于编码 Ne 的任何值,从 1 到 256('00' 表示最大值,256)。 命令 APDU 被映射到命令 TPDU 上,没有任何变化。

根据Ne的接受和根据命令的处理,响应TPDU被映射到响应APDU。

case 2S.1 — 流程完成; 接收 Ne

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

case 2S.2 — 流程中止; Ne肯定不接收

该卡不接受Ne,不支持长度错误提供数据的服务。 来自卡的响应 TPDU 表明由于长度错误,该过程中止:SW1 SW2 = '6700'。 响应 TPDU 被映射到响应 APDU 上,没有任何变化。

case 2S.3 — 流程中止; Ne 不接受,Na 表示

卡不接受 Ne,卡的响应 TPDU 表示该过程被中止:SW1 = '6C'(长度错误)和 SW2 为编码 Na 从 1 到 256 的任何值('00' 表示 256),即 ,可用数据字节的确切数量。

卡应准备好接收与 P3 = SW2 相同的命令 TPDU。

响应 TPDU 由 Na 个数据字节和 SW1 SW2 组成。

case 2S.4 — SW1 SW2 = '9XYZ'(不包含 '9000')

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

12.2.4 Case 3S

短 Lc 字段由一个字节组成:C(5) ≠ '00' 用于编码 Nc 从 1 到 255。短 Le 字段由一个字节组成:C(n) 具有任何值,用于编码从 1 到 256 的 Ne (' 00' 表示最大值,256)。 通过切断 Le 字段,即 C(n),命令 APDU 被映射到命令 TPDU。

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

12.2.5 Case 4S

短 Lc 字段由一个字节组成:C(5) ≠ '00' 用于编码 Nc 从 1 到 255。短 Le 字段由一个字节组成:C(n) 具有任何值,用于编码从 1 到 256 的 Ne (' 00' 表示最大值,256)。 通过切断 Le 字段,即 C(n),命令 APDU 被映射到命令 TPDU。

case 4S.1 — 流程中止

来自卡的第一个响应 TPDU 指示过程中止:SW1 = '6X',除了 '61'、'62' 和 '63'。 响应 TPDU 被映射到响应 APDU 上,没有任何变化。

case 4S.2 — 流程完成

来自卡的第一个响应 TPDU 表明该过程已完成:SW1 SW2 = '9000'。 卡应准备好接收 P3 = C(n) 的 GET RESPONSE 命令 TPDU。

根据来自卡的第二个响应 TPDU,该过程将根据上述 case 2S.1、2S.2、2S.3 和 2S.4 继续进行。

case 4S.3 — 流程完成并添加信息

来自卡的第一个响应 TPDU 表示过程完成,卡给出信息:SW1 = '61' 和 SW2 为编码 Nx 从 1 到 256 的任何值('00' 表示 256),即额外的数量 数据字节仍然可用。 卡应准备好接收 GET RESPONSE 命令 TPDU,其中 P3 设置为 Nx 和 Ne 的最小值。

第二个响应 TPDU 被映射到响应 APDU 上,没有任何变化。

case 4S.4 — SW1 SW2 = '62XY' 或 '63XY' 或 '9XYZ'(不包含 '9000')

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

注:在 case 4S 中,不建议在第一响应 TPDU 中使用 “62XY” 和 “63XY”。

12.2.6 Case 2E

扩展的 Le 字段由三个字节组成: C(5) C(6) C(7); C(5) = '00' 并且 C(6) C(7) 具有用于编码 Ne 的任何值,从 1 到 65 536('0000' 表示最大值,65 536)。

case 2E.1 — Ne ≤ 256, C(5) = '00', C(6) C(7) 从 '0001' 到 '0100'

由于 Ne 是从 1 到 256,命令 APDU 应映射到命令 TPDU 上,P3 = C(7)。 该过程应根据 case 2S 继续。

case 2E.2 — Ne > 256,C(5) = '00',C(6) C(7) = '0000' 或从 '0101' 到 'FFFF'

当 Ne > 256 时,命令 APDU 应映射到命令 TPDU 上,P3 = '00'。

a) 如果来自卡的第一个响应 TPDU 指示由于长度错误(SW1 SW2 = '6700')而终止该过程,则响应 TPDU 应映射到响应 APDU 上而不作任何更改。

b) 如果来自卡的第一个响应 TPDU 指示由于长度错误而导致进程中止,并且卡给出信息:SW1 = '6C' 和 SW2 具有用于编码 Na 从 1 到 256 的任何值('00' 表示 256 ),即可用数据字节的确切数量,则该过程应按照 case 2S.3 的描述完成。

c) 如果第一个响应 TPDU 是 256 个数据字节后跟 SW1 SW2 = '9000',这意味着该卡不超过 256 个数据字节,和/或不支持 GET RESPONSE 命令。 然后响应 TPDU 将被映射到响应 APDU 上而不做任何更改。

d) 如果来自卡的第一个或后续响应 TPDU 是 SW1 = '61',则具有任何值的 SW2 将 Nx 编码为从 1 到 256('00' 表示 256),即仍然可用的额外数据字节数。 要从卡中检索的剩余数据字节数是 Nm = Ne 减去在先前响应 TPDU 中接收到的数据字节数。

12.2.7 Case 3E

扩展的 Lc 字段由三个字节组成: C(5) C(6) C(7); C(5) = '00' 并且 C(6) C(7) ≠ '0000' 用于将 Nc 从 1 编码到 65 535。

case 3E.1 — Nc 从 1 到 255,C(5) C(6) = '0000',C(7) ≠ '00'

由于 Nc 是从 1 到 255,命令 APDU 被映射到命令 TPDU 上,P3 = C(7)。

响应 TPDU 被映射到响应 APDU 上,没有任何变化。

case 3E.2 — Nc > 255,C(5) = '00',C(6) ≠ '00',C(7) 任何值

命令 APDU 应分成小于 256 字节的连续段,传送到连续 ENVELOPE 命令 TPDU 的数据字节中。 缺少数据字节意味着“数据串结束”。

12.2.8 Case 4E

扩展的 Lc 字段由三个字节组成: C(5) C(6) C(7); C(5) = '00' and C(6) C(7) ≠ '0000' 用于将 Nc 从 1 编码到 65 535。扩展 Le 字段由两个字节组成: C(n–1) C(n) 与 用于编码 Ne 的任何值,从 1 到 65 536('0000' 表示最大值,65 536)。

case 4E.1 — Nc < 256,C(5) C(6) = '0000',C(7) ≠ '00'

由于 Nc 是从 1 到 255,命令 APDU 被映射到命令 TPDU 上,P3 = C(7) 并附加 Nc 数据字节。 Le 字段,即 C(n-1) C(n),被截断。

a) 如果除了来自卡的第一个响应 TPDU 中的 '61'、'62' 或 '63' 之外的 SW1 = '6X',则响应 TPDU 被映射到响应 APDU 上而没有任何变化。

b) 如果来自卡的第一个响应 TPDU 中的 SW1 SW2 = '9000',则

c) 如果来自卡的第一个响应 TPDU 中的 SW1 = '61',则过程应根据上述 case 2E.2 d) 继续。

d) 如果 SW1 SW2 = '62XY' 或 '63XY' 或 '9XYZ',除了 '9000',在来自卡的第一个响应 TPDU 中,则响应 TPDU 被映射到响应 APDU 上而没有任何变化。

注:在 case 4E 中,在最后一个响应 TPDU 之前不推荐使用 “62XY” 和 “63XY”。

case 4E.2 — Nc > 255,C(5) = '00',C(6) ≠ '00',C(7) 任何值

当 Nc ≥ 256 时,过程将根据上述 case 3E.2 继续,直到命令 APDU 已完全传输到卡。 然后应按上述 case 4E.1 a)、b)、c) 和 d) 继续进行。

12.3 T=1的命令响应对传输

12.3.1 总则

本节定义了应用协议数据单元(APDU)到传输协议数据单元(TPDU)信息字段的映射,T=1。

12.3.2 Case 1

命令 APDU 被映射到 I-block 的信息字段上,没有任何变化。

响应的 I-block 的信息字段被映射到响应 APDU 上,没有任何变化。

12.3.3 Cases 2S and 2E

命令 APDU 被映射到 I-block 的信息字段上,没有任何变化。

响应 APDU 包括

12.3.4 Cases 3S and 3E

命令 APDU 被映射到任一

响应的 I-block 的信息字段被映射到响应 APDU 上,没有任何变化。

12.3.5 Cases 4S and 4E

命令 APDU 被映射到任一

响应 APDU 包括

标签:ISO7816,case,命令,APDU,TPDU,传输,字段,译自,响应
来源: https://www.cnblogs.com/sunchukun/p/15594241.html