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

时间:2016-02-18 16:17:15

标签: smartcard javacard

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

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

第二个模糊点是关于结构选择部分。我们可以通过以下五种方式进行定义:

  1. 重置后隐含。
  2. 由DF名称选择明确
  3. 由文件标识符选择显式
  4. 由路径选择明确
  5. 由短EF标识符选择显式
  6. 模糊的一点是,据我所知,我可以在卡片上选择的唯一内容是小程序而不是别的。对于applet,我可以选择默认值(可以是上面选项的第一种方式,隐式选择)或者通过向Applet AID发送SELECT APDU命令来选择它(以上任何一种方式都没有提到)。

    那么这些结构选择方法是什么?

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

    1. 透明结构
    2. 具有固定大小记录的线性结构
    3. 包含可变大小记录的线性结构
    4. 具有固定大小记录的循环结构(箭头引用最近写入的记录)
    5. TLV结构
    6. 问题是,这些结构是什么?这些是数据存储在内存中的方式吗?如果是这样,为什么它们是在标准中定义的,而它们是关于卡的内在行为?程序员是否需要了解有关它们的任何信息?他/她能否检测/更改他/她卡的EF结构?

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

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

1 个答案:

答案 0 :(得分:4)

首先,ISO / IEC 7816-4描述了基于文件的卡。基于文件的卡可以具有不同的应用程序(使用SELECT by NAME选择)。然而,这些应用程序被认为是基于文件的OS中的不同数据结构和对象。这些应用程序不像Java Card小程序那样提供不同的功能

7816-3,尤其是4也描述了一般的半双工命令/响应APDU格式,这是对卡符合7816-4的最低要求。 Java Card使用APDU格式,但它不包括以其他方式模拟基于文件的卡的功能。你必须自己实现(或者从某个地方复制它)。

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

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

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

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

  • 标准没有模块化,因此无法检查支持哪些功能;
  • 已定义状态字,但它们仅包含错误的内存和语法原因;
  • 目前尚不清楚命令可以返回哪些错误,也不清楚错误需要处理的顺序;
  • 该标准不符合ISO / OSI层结构,应用和(安全)传输层混合;
  • Ne有两种定义,一种是最大响应大小,另一种是READ BINARY;
  • 未明确指定文件结束检测;
  • 即使创建标准的人员仍然误解了扩展长度APDU;
  • 许多命令尚未完全指定,包括例如创建文件;
  • 有许多弃用的命令,例如WRITE FILE。

这只是我的头脑。

基本上,标准更多是一套常用做法。您可以将它作为创建自己的协议或标准的起点,但这就是它。