gpt4 book ai didi

javacard - 安全最大 Java 卡 APDU 数据命令和响应大小

转载 作者:行者123 更新时间:2023-12-02 21:56:09 25 4
gpt4 key购买 nike

Java Card APDU 中建议的数据字段大小是多少?在陈志群的智能卡的Java Card技术:体系结构和程序员指南一书中,提到Le字段最多允许255。

我们是否将 APDU 命令解释如下:

|<----------------------- 255 Bytes total ------------------------>|
|<- CLA -><- INS -><- P1 -><- P2 -><- Lc -><---- DATA ----><- Le ->|

因此,如果 CLA、INS、P1、P2、Lc、Le 各为 1 个字节,我们应该假设我们只能安全地将 249 个字节设置到 DATA 区域?

对于 APDU 响应,我们的解释是:

|<----------------------- 258 Bytes total ------------------------>|
|<-------------------------- DATA ------------------------><- SW ->|

响应数据可以安全地设置为 256 字节,其中包含 2 字节的 SW,并且由数据响应和 SW 组成的响应总计为 258 字节?

考虑到我们必须面对可能无法链接并且我们必须自己手动处理数据流的情况,安全地发送和接收 block 数据还有哪些其他考虑因素?

最佳答案

据我所知,Le 字段允许 1-256 字节(Lc 的限制为 255),引用 ISO 7816-3:

Case 2S ⎯ The short Le field consists of C(5) encoding Ne from 1 to 256 ('00' means the maximum, 256)....
....
Case 4S ⎯ ...The short Le field consists of C(6+Nc) encoding Ne from 1 to 256 ('00' means the maximum, 256)....

(并且它符合您的“Response APDU”长度256+2,也许这只是一个拼写错误)

255 字节的限制是针对“Command APDU”的 DATA 部分。因此,对于整个非扩展长度“命令 APDU”,限制应为 5+255+1

所有这些限制均在 ISO 7816-3 中精确定义 - 请查看此处。

<小时/>

请注意,javacard 的 APDU 缓冲区可能较小。来自 APDU 类的 javadoc:

The buffer length (meaning APDU buffer) must be at least 133 bytes ( 5 bytes of header and 128 bytes of data)

因此,要读取长度超过 128 字节的传入数据,您可能需要调用 APDU.receiveBytes() 来获取剩余的不适合的字节。

同样的可能适用于发送数据(即APDU.sendBytes()可能需要发送更长的数据)。

<小时/>

对于应用程序级别的框架,我知道这些方法(可能会鼓舞人心):

  • ISO 7816-4(使用 CLA 中的位 5)

  • 全局平台(使用P1的最高有效位来指示某些命令的更多 block /最后一个 block )

  • EMV CPS(使用数据内显式长度的 STORE DATA 命令)

关于javacard - 安全最大 Java 卡 APDU 数据命令和响应大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32994936/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com