【问题标题】:T=1 smart card protocolT=1 智能卡协议
【发布时间】:2017-10-06 06:56:51
【问题描述】:

我有关于 T=1 智能卡通信协议的问题。假设终端发送 I 块,其中包含要从卡返回的预期 Ne 数据(所谓的情况 2S),而卡要发送的数据较少。这是否意味着终端应该等到超时,然后检查最后两个字节收到的任何内容(应该是 SW1 和 SW2 状态)?还是有与该问题相关的其他情况? 对于 T= 0 协议,该问题由过程字节解决,但是在 T= 1 中,我只看到上述方式。

谢谢

【问题讨论】:

  • 我想卡片应该放在序言的 LEN 字段中,它返回的数据量是多少,但问题是该 LEN 字段是否被正确接收(检查字节确实在回复过程中稍后出现)。不过不太确定。
  • 虽然我不是协议专家,但这似乎是一种误解。 Le 仅表示终端接受的最大字节数。它可能会更少。 (这与协议块的 LEN 字段不同,它当然必须完全匹配,并且响应 APDU 与您发送的命令完全解耦。)后面的 LRC 字节是无关紧要的,因为我们正在谈论一个面向块的协议。
  • 在 ISO7816-3 中可能误导我的是:“Ne 表示响应数据字段中预期的最大字节数”。对我来说,它看起来像是预期的东西,但可能更多。无论如何,问题更多地与接收损坏的 LEN 字段的可能性有关,我打算将其用作尚未到来的字节数的指示器。因此,如果它(LEN)已损坏并且说大于即将到来的字节数,那么这是我捕捉超时的唯一选择吗?错误的 LEN 我只能从稍后出现的检查字节中学习,但我可能无法在消息中找到它(有错误的 LEN)。
  • 如果实际数据超过 LEN,可以立即检测到差异。如果提供的数据较少,则必须等待字符等待时间超时。

标签: smartcard


【解决方案1】:

guidot 可能声称他不是专家,但我不会相信他。

Ne 值(使用 Le 编码)实际上仅表示要返回的最大字节数。您可能只有一个特定最大值的缓冲区大小,或者有禁止使用更高值的开销(安全消息传递)。但是,您可能有 APDU 命令,其中 Ne 用于指示应发送的字节量(如果可用),例如 READ BINARY。

(响应)APDU 的大小由底层数据链路层(帧内块中使用的链接位和 LEN 字节)确定。 T=1 不是面向字节的协议,例如 T=0。对于 T=1 并且实际上 T=CL,数据链路层决定了命令和响应 APDU 的大小,而不是具有 Nc 和 Ne 字节的应用层。

【讨论】:

  • 我会留给你一个问题,如果在应用层有长度字节是否有利。恕我直言,ISO/IEC-7816-4 是有史以来最糟糕的标准之一;它以各种可以想象的方式糟透了,而成就却很少。关于如何读取文件以获取基于文件系统的卡的规范的无休止的对话充其量是荒谬的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-22
相关资源
最近更新 更多