我对符合ISO7816-4标准的第一个行业间APDU很感兴趣.这样的APDU可以/允许的最大长度是多少?
我能想到的最长的APDU应该是一个扩展长度的ISO case 4 APDU.这意味着我们有4个字节的标题,3个字节用于扩展Lc,2个字节用于扩展Le.此外,Lc字段允许总共2 ^ 16个字节.考虑到这种最坏情况APDU,2字节大的短值显然不足以解决最后字节的偏移.
有这个问题的最佳做法还是我错过了什么?
你的计算是正确的(除了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限制上读/写字节不是问题.然而,确定文件大小并读取文件的确切结尾会比您想象的更"有趣".