我对符合ISO7816-4标准的第一个行业间APDU感兴趣。 这样的APDU可以/允许的最大长度是多少?
我能想到的最长APDU应该是一个扩展长度的ISO case 4 APDU。这意味着我们有4个字节的标题,3个字节用于扩展Lc,2个字节用于扩展Le。此外,Lc字段允许总共2 ^ 16个字节。 考虑到这种最坏情况APDU 2字节大的短值显然不足以解决最后字节的偏移。
这个问题有最好的做法,还是我错过了什么?
答案 0 :(得分:5)
你的计算是正确的(除了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,原因很简单,因为较大的值无法存储在有符号的短路中。需要从EEPROM中流式传输字节以获得接近该大小的任何值,APDU缓冲区将远小于此。
现在关于“最后一个字节的偏移量”我假设您正在讨论从智能卡读取文件结构。这些是使用READ BINARY APDU(B0
)命令读出的,该命令实际上包含P1 / P2中的偏移量。具有奇数INS(B1
)的READ BINARY可用于高于32Ki的偏移。使用这些命令,您可以处理大于大多数智能卡最大内存量的文件。
当然,UPDATE BINARY命令也是如此。因此,在64Ki限制上读/写字节不是问题。然而,确定文件大小并阅读文件的确切结尾会比您想象的更“有趣”。