ISO/IEC 7816 数据对象和结构选择和 EF 结构

ISO/IEC 7816 Data object and Structure Selection and EF Structures

我正在阅读 ISO/IEC 7816 第 4 部分标准。不幸的是,其中有一些模糊的地方对我来说,我希望我能在这里得到答案。

第一个模糊点是关于数据对象。数据对象定义为 Simple-TLVBer-TLV 类别,并对这些类别进行了一些描述。但是 Data Object 本身是什么?是我们存储在卡上的数据吗?如果是这样,据我所知,我们将数据存储在我们的小程序的不同字段中,我们不考虑它们的任何 BER-TLVSimple-TLV 类别!它们只是一系列十六进制数字。

第二个模糊点是关于结构Select离子部分。定义了以下五种不同的方式:

  1. 重置后隐含。
  2. 由 Selection 由 DF 名称显式
  3. 通过文件标识符Select显式
  4. 通过路径Select显式
  5. 通过短 EF 标识符 Selection 显式

模糊的一点是,据我所知,我唯一可以 select 在卡上的是小程序,没有别的。对于小程序,我可以通过发送 SELECT APDU 命令来制作默认的 selected(这可以是上述选项的第一种方式,隐式 selection)或 Select使用 Applet AID 刷卡(上述方式均未提及)。

那么这些结构Select离子方法是什么?

第三个模糊点是EF结构。定义EF-s可以有以下五种结构:

  1. 透明结构
  2. 具有固定大小记录的线性结构
  3. 具有可变大小记录的线性结构
  4. 具有固定大小记录的循环结构(箭头指向最近写入的记录)
  5. TLV 结构

问题又来了,这些结构是干什么用的?这些是数据存储在内存中的方式吗?如果是这样,为什么它们在标准中定义,而它们是关于卡的内部行为的?程序员需要了解它们吗? he/she detect/change 可以使用 his/her 卡的 EF 结构吗?

最后,是否所有符合 ISO 7816-4 标准的卡都支持上述所有项目(因为我在 ISO 7816-4 中找不到任何提及它们是可选的或其他内容的内容)?

是否所有符合 ISO 7816-4 的卡都需要支持这部分标准中定义的 APDU 命令?

首先,ISO/IEC7816-4描述了基于文件的卡片。基于文件的卡片可以有不同的应用程序(selected using SELECT by NAME)。然而,最好将这些应用程序视为基于 OS 的文件中的不同数据结构和对象。这些应用程序不提供与 Java 卡片小程序不同的 功能

7816-3 尤其是 4 还描述了通用的半双工 command/response APDU 格式,这是卡符合 7816-4 的最低要求。 Java 卡片使用 APDU 格式,但它不包含以其他方式模拟基于文件的卡片的功能。您必须自己实施(当然也可以从某处复制)。


数据对象是具有类型(由标签描述)、大小(或长度)和值的对象:TLV。在 7816-4 中,卡中和传输中的对象都可以存在。最后你只对输入输出感兴趣;您如何解释、存储或生成它们并不重要。


支持哪个文件select离子和结构取决于卡的制造商。一般来说,基于文件的卡片需要支持所有 selection 方法,但对于 Java 卡片实现来说,这还不是很清楚。许多 Java 卡片小程序不支持 SELECT by PATH。 PATH SELECT 通常在 Java Card 上很麻烦,因为它不由操作系统处理,也不能由 Applet 处理(因为 Applet 实例不能只是 select 另一个 Applet实例)。

是的,外部用户可以看到文件结构。实施什么取决于。同样,基于文件的卡片可能支持所有。例如。当您需要在卡上存储记录时,循环结构非常有用。有限的内存可能会提示您删除最旧的记录。例如,您可以想象这用于数字行驶记录仪卡。使用符合 7816 的 SQL 等命令搜索记录。


ISO/IEC 7816 是最差的标准之一。它确实没有说任何关于可选的,这可能会让你相信卡片确实应该实现一切。然而,一些声称合规的卡只保留一开始定义的 APDU 结构。许多卡并没有实现所有功能,而那些实现的卡往往会出错。

  • 标准未模块化,因此无法检查支持或不支持哪些功能;
  • 状态词已定义,但仅包含错误的记忆和句法原因;
  • 不清楚命令可以返回哪些错误,也不清楚需要按什么顺序处理错误;
  • 标准不符合ISO/OSI层结构,应用层和(安全)传输层混合;
  • Ne 有两种定义,一种是通用的,它是最大响应大小,另一种是用于 READ BINARY;
  • 未正确指定文件结束检测;
  • 扩展长度的 APDU 仍然被标准制定者误解;
  • 许多命令尚未完全指定,包括例如创建文件;
  • 有许多已弃用的命令,例如 WRITE FILE。

这就在我脑海中。

基本上,该标准更多的是一套通用的做法。您可以将其用作创建自己的协议或标准的起点,仅此而已。