5

我对符合 ISO7816-4 的第一个行业间 APDU 很感兴趣。这种 APDU 可以/允许的最大长度是多少?

我能想到的最长的 APDU 应该是扩展长度的 ISO case 4 APDU。这意味着我们有 4 个字节的标题,3 个字节用于扩展 Lc,2 个字节用于扩展 Le。此外,Lc 字段允许寻址总共 2^16 个字节。考虑到这种最坏情况的 APDU,一个 2 字节的大短值显然不足以解决最后一个字节的偏移量。

是否有解决此问题的最佳做法,还是我错过了什么?

4

1 回答 1

6

您的计算是正确的(除了 Nc 的最大大小64Ki - 1以字节为单位,而不是 64Ki。所以最大命令 APDU 将是4 + 3 + (64Ki - 1) + 2 = 64Ki + 8。请注意,可以返回的数据量64Ki,状态字的最大大小为两个字节响应 APDU 是64Ki + 2. 但是许多智能卡会限制智能卡可以发送和返回的数据量. ISO 7816-4 2013 规范包含指示智能卡和智能卡“缓冲区大小”的方法应用程序。

在 Java Card 中,限制设置为 32 Ki - 1,原因很简单,较大的值不能存储在有符号的 short 中。需要从 EEPROM 流式传输字节以获得接近该大小的任何位置,APDU 缓冲区将比这小得多。


现在关于“最后一个字节的偏移量”,我假设您正在谈论从智能卡读取文件结构。这些是使用 READ BINARY APDU ( ) 命令读取的B0,该命令实际上包含 P1/P2 中的偏移量。带有奇数 INS ( B1) 的 READ BINARY 可用于高于 32Ki 的偏移量。使用这些命令,您可以寻址大于大多数智能卡最大内存量的文件。

当然,UPDATE BINARY 命令也是如此。因此,超过 64Ki 限制的读/写字节不是问题。然而,确定文件大小并读取文件的确切结尾比您想象的更“有趣”。

于 2013-10-02T16:31:38.490 回答